Hoe routes handmatig te registreren voor de freebsd-router. Dynamische routering in FreeBSD, BIRD

De Fryukhi-verdeling wordt vaak de meest geschikte oplossing genoemd netwerk taken op het lokale netwerk. Vandaag zullen we een van de netwerkproblemen oplossen: een gateway opzetten op Freebsd 10 voor toegang tot internet vanuit een lokaal gebied. Dit is een eenvoudige, populaire en gewilde serverfunctionaliteit die kan worden uitgebreid met extra functies.

We zullen de volgende versie van het systeem gebruiken om onze taak van het opzetten van een gateway op te lossen:

# uname -v FreeBSD 10.2-RELEASE-p8 #0 r292756M: zaterdag 26 december 22:49:34 MSK 2015 root@freebsd:/usr/obj/usr/src/sys/GENERIC

Op de server zijn 2 netwerkkaarten geïnstalleerd:

  • h0voorkant, ontvangt internet van de provider, instellingen via dhcp
  • hn1lokaal netwerk, adres 10.20.30.1, handmatig ingesteld

Onze taak bij het opzetten van een software-freebsd-router omvat het instellen van routing op de server, het installeren en configureren van ipfw, het inschakelen van nat, het instellen van lokale DHCP en DNS-servers.

De server voorbereiden om de gateway te configureren

Informatie over uitgegeven huurcontracten DHCP-server dnsmasq kan in het bestand worden bekeken /var/db/dnsmasq.leases.

Netwerkactiviteit in freebsd analyseren met iftop

Soms wil je zien wat er op de router gebeurt en wie internet gebruikt op dit moment. Standaard beschikt het systeem niet over een kant-en-klaar hulpmiddel om deze informatie te verkrijgen. Zal ons te hulp komen eenvoudig programma iftop, waarmee u de activiteit op de netwerkinterface in realtime kunt bekijken.

Installeren alstop naar de geconfigureerde Freebsd-gateway:

# pkg installeer iftop

We lanceren iftop die de interface aangeeft en de gebruikte poorten weergeeft:

# iftop -i hn1 -P

We zien een interessant beeld: wie klimt waar, door welke haven en met welke snelheid.

Ik heb bijvoorbeeld een internetverkeergenerator op een van de computers gestart. Het besloeg bijna het hele kanaal en dit werd duidelijk zichtbaar op de router met behulp van iftop. Natuurlijk deze eenvoudig hulpprogramma lost niet alle monitoringproblemen op netwerk activiteit, maar het is prima om de huidige foto te presenteren als je niets meer nodig hebt.

Conclusie

Laten we samenvatten wat we hebben gedaan. In korte tijd hebben we een volwaardige gateway (in wezen een softwarerouter) opgezet op basis van Freebsd 10 om internettoegang te bieden aan clients achter de server. Tegelijkertijd werd de automatische ontvangst van instellingen verzekerd. Zelfs op bescheiden schaal virtuele server zo'n gateway kan behoorlijk veel verkeer verwerken.

De hele installatie duurt letterlijk 10-15 minuten. Het grootste deel van de tijd wordt besteed aan het assembleren van de kernel. Hoe hoger de versie van Freebsd, hoe langer het duurt om te bouwen, ondanks het feit dat de hardwaresnelheden aanzienlijk toenemen.

Laten we de punten doornemen en uitzoeken wat we precies hebben gedaan:

  1. We hebben de server voorbereid op het configureren van de gateway.
  2. We hebben de kernel opnieuw opgebouwd met de nodige parameters.
  3. We hebben ipfw en nat geconfigureerd en routing ingeschakeld.
  4. DNSmasq geïnstalleerd en geconfigureerd voor distributie netwerkinstellingen via dhcp en dns-server.
  5. We hebben iftop geïnstalleerd voor een eenvoudige analyse van netwerkactiviteit op de externe interface.

Dit is genoeg voor volwaardig werk gateway op Freebsd 10. Als het nodig is om gebruikersverkeer te tellen of de toegang daartoe te beperken bepaalde middelen, je kunt naar hem toe gaan.

Laatst bijgewerkt 30 augustus 2017 Hoe wijzig of stel ik een standaardroute in voor mijn FreeBSD-server? Hoe maak ik de standaardrouteconfiguratie persistent?

U moet het route-commando op FreeBSD gebruiken om de netwerkrouteringstabellen handmatig te manipuleren. Het biedt de volgende zes opdrachten:
Adblock gedetecteerd 😱

Mijn website wordt mogelijk gemaakt door het tonen van online advertenties aan mijn bezoekers. Ik snap het! Advertenties zijn vervelend, maar ze helpen deze website draaiende te houden. Het is moeilijk om de site draaiende te houden en nieuwe inhoud te produceren als zoveel mensen advertenties blokkeren. Overweeg alstublieft om geld te doneren aan de nixCraft via PayPal/, of word een supporter die Patreon gebruikt.

  1. toevoegen: een route toevoegen.
  2. doorspoelen:Verwijder alle routes.
  3. verwijderen: een specifieke route verwijderen.
  4. wijziging: Aspecten van een route wijzigen (zoals de toegangspoort).
  5. krijgen: de route voor een bestemming opzoeken en weergeven.
  6. monitor: Rapporteer voortdurend eventuele wijzigingen in de routeringsinformatiebasis, foutieve zoekopdrachten in de routering of vermoedelijke netwerkpartities.

Taak: FreeBSD-routeringstabel bekijken/tonen

Gebruik de opdracht netstat met de optie -r als volgt:
$ netstat -r
$ netstat-rn
Voorbeelduitvoer:

Routeringstabellen Internet: Bestemming Gateway Vlaggen Ref. Gebruik Netif Verlopen standaard 61.221 .xx.yy UGS 0 247 em1 10 10.10.110.5 UGS 0 50 em0 10.10.110/26 link#1 UC 0 0 em0 10.10.110.5 00:1b:0d: e6:58 :40 UHLW 2 0 em0 1145 61.221 .xx.yy/29 link#2 UC 0 0 em1 61.221 .xx.yy 00:1b:0d:e6:57 :c0 UHLW 2 0 em1 1055 61.221 .xx/24 link#2 UC 0 0 em1 127.0.0.1 127.0.0.1 UH 0 0 lo0

Routeringstabellen Internet: Bestemming Gateway Vlaggen Ref. Gebruik Netif Verlopen standaard 61.221.xx.yy UGS 0 247 em1 10 10.10.110.5 UGS 0 50 em0 10.10.110/26 link#1 UC 0 0 em0 10.10.110.5 00:1b:0d: e6:58:40 UHLW 2 0 em0 1145 61.221.xx.yy/29 link#2 UC 0 0 em1 61.221.xx.yy 00:1b:0d:e6:57:c0 UHLW 2 0 em1 1055 61.221.xx/24 link#2 UC 0 0 em1 127.0.0.1 127.0.0.1 UH 0 0 lo0

Op de eerste twee regels worden standaardroutes weergegeven. Om alleen de IPv4-routeringstabel af te drukken, voert u het volgende in:
# netstat -4 -r -n
Voorbeelduitvoer:

Om alleen de IPv6-routeringstabel af te drukken, voert u het volgende in:
# netstat -6 -r -n

Taak: FreeBSD Stel een standaardroute in

Alle netwerkpakketten die niet kunnen worden verzonden volgens de vorige vermeldingen in de routeringstabel, worden via de volgende standaardgateway verzonden:
# route toevoegen standaard 192.168.1.254

Hoe sla ik routeringsinformatie op in een configuratiebestand?

Als u de FreeBSD-box opnieuw opstart, zal de routeringsconfiguratie verloren gaan, d.w.z. de routeringsinformatie blijft niet bestaan. U moet het bestand /etc/rc.conf bewerken om de standaardroute in te stellen:
# vi /etc/rc.conf
Stel de standaardroute in door de defaultrouter-variabele te bewerken:
standaardrouter = "192.168.1.254"
Sla het bestand op en sluit het.

In een netwerk met meerdere routers ontstaat vroeg of laat de behoefte aan dynamische routering. Ik zal je niet vertellen wat dynamische routering is en waarom het nodig is, omdat dit de basisprincipes zijn waarover je op internet kunt lezen, dit onderwerp gaat over software om dynamische routering te bieden.
Een van de meest bekende programma's het bieden van dynamische routing is zeker de beroemde quagga. cisco-stijl (wauw, wat een ellendig ding) console-interface, ondersteuning voor RIP, OSPF, BGP, ISIS,... Ja, het product is bekend. Maar het heeft een aantal nadelen, bijvoorbeeld:
- ondersteunt geen meerdere routeringstabellen (een parodie op het tabeltype is slechts een aanfluiting);
- FreeBSD, waar ik zo dol op ben, heeft een aantal ernstige problemen. Sinds versie 0.99.16 is het bijvoorbeeld kapot OSPF-protocol. Als er meerdere routeringstabellen in het systeem zijn, scant de quaga alles, wat onaangename jambs veroorzaakt met het beoogde doel;
- de enige manier Het besturen van een quaga vanuit runtime betekent het gebruik van de console;
- bijna onbestaande API voor ontwikkelaars.
Het werkt zeker beter onder Linux, maar er is nog steeds geen ondersteuning voor meerdere routeringstabellen...

Vandaag zullen we het dus hebben over een project als BIRD.
En meteen de productaankondiging mee startpagina project:
Wat ondersteunen we: - Zowel IPv4 als IPv6 (gebruik --enable-ipv6 bij het configureren) - Meerdere routeringstabellen - BGP - RIP - OSPF - Statische routes - Inter-table protocol - Command-line interface (met behulp van de `birdc'-client ; krijg wat hulp, druk gewoon op `?") - Zachte herconfiguratie - geen online opdrachten om te wijzigen de configuratie op zeer beperkte manieren, bewerk gewoon het configuratiebestand en geef een `configure'-opdracht of verzend SIGHUP en BIRD zal mogelijk de nieuwe configuratie gaan gebruiken, waarbij protocollen die door de configuratiewijzigingen worden beïnvloed, opnieuw worden opgestart Krachtig taal voor routefiltering
Duim omhoog - “Meerdere routeringstabellen”, “Inter-tabel protocol”?

Even een lyrische uitweiding: in FreeBSD verschenen meerdere routeringstabellen met versie 7.1 al in 2008, wat erg laat is. Ze verschenen bijvoorbeeld al in 1999 in Linux. Helaas kan BIRD niet met tabellen werken FreeBSD-routering, en moest het daarom een ​​beetje afmaken. Het eindigde gemakkelijk. De code is gemakkelijk te lezen en heeft een uitstekende API-dekking.
Zo hebben we BIRD met ondersteuning voor meerdere routeringstabellen in FreeBSD.

Laten we het nu even hebben over de “Inter-table protocol”-functie van BIRD. Wat is dit? In BIRD bestaat het concept van “routeringstabel”, nee, dit is geen systeemrouteringstabel, dit is een interne BIRD-tabel waarin routes op een of andere manier worden opgeslagen en aan BIRD worden afgeleverd. En je kunt ze zo aanleveren: statische aangifte routes, import uit de systeemrouteringstabel, routes die aankomen via OSPF/BFP/RIP/...
Al deze routes bevinden zich in de BIRD-tabel, die de “routeringstabel” wordt genoemd.
Hoe kun je een tafel declareren? Gemakkelijk:
tabel fib0; tafel fib2;
Hierdoor worden er binnen BIRD twee routeringstabellen aangemaakt, "fib0" en "fib2".

Maar lege tafels zijn voor ons van weinig belang, laten we ze vullen met statische routes. Dit is heel eenvoudig te doen (dit zijn voorbeelden van een werkend configuratiebestand):
protocol statisch (tabel fib0; route 10.0.0.0/8 via 10.2.2.1; route 193.33.62.0/23 via 10.2.2.1; route 91.202.20.0/22 ​​via 10.2.2.1; route 93.186.96.0/20 via "ng0 "; route 193.203.60.0/22 ​​via "ng0"; route 78.132.128.0/17 via "ng0"; route 213.135.128.0/19 via "ng0"; route 82.179.144.0/20 via "ng0"; via " ng0"; ) protocol statisch (tabel fib2; route 0.0.0.0/0 via 192.168.130.2; )
Zoals u kunt zien, hebben we de tabellen gevuld met specifieke routes. Bovendien is duidelijk dat de gateway kan worden opgegeven als IP-adres, of als interface (in het geval van “ng0”). Bovendien belet niets u om standaardroutes op te geven.

Daarom hebben we onze borden voorzien van routes. Een redelijke vraag: hoe combineer je de routes van deze borden met wat er in het systeem zit? Er is hiervoor een kernelprotocol, bijvoorbeeld:
protocolkernel (tabel fib0; scantijd 20; importeer niets; exporteer alles; kerneltabel 0; ) protocolkernel (tabel fib2; scantijd 20; importeer niets; exporteer alles; kerneltabel 2; )
Hier binden we fib0 aan systeemrouteringstabel 0 (dit is de standaardtabel voor FreeBSD) en fib2 aan systeemtabel 2.
import - zegt dat we zullen importeren van systeemtabel 0 naar fib0 (in in dit geval- we zullen niets importeren), en exporteren - geeft aan dat we van fib0 naar de systeemrouteringstabel 0 zullen schrijven (in dit voorbeeld zullen we de volledige fib2 naar de systeemrouteringstabel schrijven).
Voor fib2 is alles vergelijkbaar. Ik denk dat er hier geen vragen meer mogen rijzen.
scantijd - hoe vaak we deze tabellen zullen synchroniseren. 20 seconden. Wat betekenen deze 20 seconden? Het is namelijk mogelijk dat BIRD geen gebeurtenis van het systeem kon ontvangen over een wijziging in de systeemrouteringstabel. Om deze situatie te voorkomen, wordt de tabel elke 20 seconden opnieuw gelezen. Ja, dit kan worden uitgeschakeld.

Laten we het nu hebben over het “Inter-table protocol”, wat het is en waarom het eigenlijk nodig is.
Tot nu toe hebben we ons gebaseerd op het feit dat fib0 gebonden is aan systeemrouteringstabel 0, en fib2 gebonden is aan tabel 2. Wat als we enkele routes van fib0 naar fib2 moeten geven? deze operatie zal niet alleen de overdracht van routes van fib0 naar fib2 met zich meebrengen, maar als gevolg daarvan ook de invoer van routes van fib0 in de systeemrouteringstabel 2. Dit wordt net zo gemakkelijk bereikt, het pijpprotocol, bijvoorbeeld:
protocol pipe (tabel fib2; peertabel fib0; exporteer niets; importeer alles; )
Tabel fib2 is verbonden met fib0, maar exporteert niets naar fib0, maar importeert alle routes uit fib0. Dit is zo'n lastig protocol.

Maar dit alles zou saai zijn en rustig en zonder BIRD opgelost kunnen worden, als er niet één ‘maar’ was. Maar er zijn twee naburige routers waarmee we routes uitwisselen :) We communiceren met onze buren via BGP. Voorbeeld:
protocol bgp (tabel fib0; lokaal als 64602; buur 192.168.135.2 als 64603; exportfilter rfc1918_reject; importfilter rfc1918_reject; ) protocol bgp (tabel fib0; lokaal als 64602; buur 192.168.135.10 als 64604; exportfilter afgewezen; importfilter rfc1 918_afwijzen ;)
Dus wat betekent dit allemaal? Onze AS heeft nummer 64602, buren 64603 en 64604. Elke buur heeft zijn eigen bgp-protocol. Elk van deze protocollen is gebonden aan de fib0-tabel - d.w.z. van alle routes die via bgp komen/verzenden, worden geschreven/verzonden naar/van fib0. Ik denk dat er geen vragen zijn. In totaal bevat onze fib0-tabel al: statische routes dat geldt ook voor bgp.
Er was ook een wijziging in de export-/importparameters: filter rfc1918_reject. We zullen hieronder bekijken hoe filters zijn geschreven, maar voor nu zeg ik dat dit filter de export/import verbiedt van routes uit netwerken die zijn gedeclareerd in RFC1918 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/ 16).

Voorbeeldfilter voor het bovenstaande:
# afwijzen rfc1918 filter filter rfc1918_reject ( indien net ~ [ 10.0.0.0/8+, 172.16.0.0/12+, 192.168.0.0/16+ ] dan afwijzen; anders accepteren; )
BIRD gebruikt een eigen beschrijvingstaal om filters en functies te schrijven. De syntaxis is te vinden in officiële documentatie. Als de route in dit geval tot een van de subnetten behoort die tussen vierkante haken staan, wordt deze afgewezen. 10.0.0.0/8+ - betekent dat elke route die tot 10.0.0.0/8 behoort en ook subnetten van dit netwerk wordt afgewezen.

Nou, nu breng ik je compleet voorbeeld configuratiebestand:
log syslog (debug, trace, info, remote, waarschuwing, fout, auth, fataal, bug); log stderr alles; # Overschrijf router-ID router-ID 0.0.0.10; # Definieer nog een routeringstabel tabel fib0; tafel fib2; # weiger rfc1918 filter filter rfc1918_reject ( if net ~ [ 10.0.0.0/8+, 172.16.0.0/12+, 192.168.0.0/16+ ] dan weigeren; anders accepteren; ) # Schakel globale foutopsporing van alle protocollen in debug protocols all ; protocolkernel (tabel fib0; scantijd 20; importeer niets; exporteer alles; kerneltabel 0; ) protocolkernel (tabel fib2; scantijd 20; importeer niets; exporteer alles; kerneltabel 2; ) protocol statisch (tabel fib0; route 10.0 .0.0/8 via 10.2.2.1; route 193.33.62.0/23 via 10.2.2.1; route 91.202.20.0/22 ​​via 10.2.2.1; route 78.132.128.0/17 via ‘ng0’; route 213.135. 128.0/19 via "ng0"; route 82.179.144.0/20 via "ng0"; route 195.19.96.0/19 via "ng0"; pipe (tabel fib2; peer-tabel fib0; exporteer niets; importeer alles; ) protocol bgp (tabel fib0; lokaal als 64602; buur 192.168.135.6 als 64601; exportfilter rfc1918_reject; importfilter rfc1918_reject; ) protocol bgp (tabel fib0; lokaal als 64602; buur 192.168.135.2 als 64603; buur 192 .168.135.10as 64604;

exportfilter rfc1918_reject;
importfilter rfc1918_reject; ) # Dit pseudo-protocol houdt alle up/down-gebeurtenissen van de interface in de gaten. protocolapparaat (scantijd 10; # Scaninterfaces elke 10 seconden)
Alle stukken zijn hierboven besproken, maar ik zal slechts samenvatten wat deze configuratie doet:
1. Er worden twee BIRD-routeringstabellen gemaakt (fib0 en fib2);
2. De tabellen uit stap 1 zijn respectievelijk gekoppeld aan systeemrouteringstabellen 0 en 2;

3. Het paging van routes van fib0 naar fib2 is toegestaan;

4. De fib0-tabel is ook gevuld met routes die via bgp komen. Als gevolg hiervan zijn er gemeenschappelijke routes in twee systeemrouteringstabellen :) PS: En tot slot, wat er aan de hand is
mira# uname FreeBSD mira# birdc toont protocollen allemaal BIRD 1.2.5 gereed. naam prototabelstatus sinds info kernel1 Kernel fib0 omhoog 22:01 Voorkeur: 10 Invoerfilter: REJECT Uitvoerfilter: ACCEPT Routes: 0 geïmporteerd, 13 geëxporteerd, 0 voorkeur Routewijzigingsstatistieken: ontvangen afgewezen gefilterd genegeerd geaccepteerd Importupdates: 0 0 0 0 0 Import trekt in: 0 0 --- 0 0 Export updates: 16 0 0 --- 16 Export trekt in: 2 --- --- --- 2 kernel2 Kernel fib2 up 22:01 Voorkeur: 10 Invoerfilter: REJECT Uitvoer filter: ACCEPTEREN Routes: 0 geïmporteerd, 14 geëxporteerd, 0 voorkeur Routewijzigingsstatistieken: ontvangen afgewezen gefilterd genegeerd geaccepteerd Importupdates: 0 0 0 0 0 Import ingetrokken: 0 0 --- 0 0 Exportupdates: 17 0 0 --- 17 Export trekt in: 2 --- --- --- 2 statisch1 Statisch fib0 omhoog 22:01 Voorkeur: 200 Invoerfilter: ACCEPT Uitvoerfilter: REJECT Routes: 9 geïmporteerd, 0 geëxporteerd, 18 voorkeur Routewijzigingsstatistieken: ontvangen afgewezen gefilterd genegeerd geaccepteerd Importupdates: 9 0 0 0 9 Import ingetrokken: 0 0 --- 0 0 Exportupdates: 0 0 0 --- 0 Export ingetrokken: 0 --- --- --- 0 statisch2 Statisch fib2 omhoog 22:01 Voorkeur: 200 Invoerfilter: ACCEPT Uitvoerfilter: REJECT Routes: 1 geïmporteerd, 0 geëxporteerd, 1 voorkeur Routewijzigingsstatistieken: ontvangen afgewezen gefilterd genegeerd geaccepteerd Importupdates: 1 0 0 0 1 Import ingetrokken: 0 0 --- 0 0 Exportupdates : 0 0 0 --- 0 Export trekt in: 0 --- --- --- 0 pipe1 Pipe fib2 up 22:01 => fib0 Voorkeur: 70 Invoerfilter: ACCEPT Uitvoerfilter: REJECT Routes: 16 geïmporteerd, 0 geëxporteerd Statistieken van routewijzigingen: ontvangen afgewezen gefilterd genegeerd geaccepteerd Importupdates: 28 0 0 9 19 Import ingetrokken: 3 0 --- 0 3 Exportupdates: 20 19 1 0 0 Export ingetrokken: 3 0 --- 0 0 bgp1 BGP fib0 omhoog 22 :01 Gevestigde voorkeur: 100 Invoerfilter: rfc1918_reject Uitvoerfilter: rfc1918_reject Routes: 5 geïmporteerd, 9 geëxporteerd, 6 voorkeur Routewijzigingsstatistieken: ontvangen afgewezen gefilterd genegeerd geaccepteerd Importupdates: 5 0 0 0 5 Import ingetrokken: 0 0 --- 0 0 Exportupdates: 16 3 1 --- 12 Export ingetrokken: 2 --- --- --- 3 BGP-status: Gevestigd Sessie: externe AS4 Neighbor AS: 64601 Neighbor-ID: 192.168.135.6 Neighbor-adres: 192.168.135.6 Nexthop adres: 192.168.135.6 Bronadres: 192.168.135.5 Buurhoofden: vernieuwen AS4 Hold-timer: 102/180 Keepalive-timer: 10/60 bgp2 BGP fib0 up 22:01 Gevestigde voorkeur: 100 Invoerfilter: rfc1918_reject Uitvoerfilter: rfc1918_reject Routes: 2 geïmporteerd, 11 geëxporteerd, 2 voorkeur Routewijzigingsstatistieken: ontvangen afgewezen gefilterd genegeerd geaccepteerd Importupdates: 5 0 0 0 5 Import ingetrokken: 3 0 --- 0 3 Exportupdates: 16 4 1 --- 11 Export ingetrokken: 2 -- - --- --- 0 BGP-status: Gevestigde sessie: externe AS4 Buur-AS: 64603 Buur-ID: 0. 0.0.50 Buuradres: 192.168.135.2 Nexthop-adres: 192.168.135.2 Bronadres: 192.168.135.1 Buurcaps: vernieuwen AS4 Hold-timer: 87/180 Keepalive-timer: 45/60 bgp3 BGP fib0 start 22:01 Inactieve BGP-fout: slecht BGP-identificatie Voorkeur: 100 Invoerfilter: rfc1918_reject Uitvoerfilter: rfc1918_reject Routes: 0 geïmporteerd, 0 geëxporteerd, 0 voorkeur Statistieken routewijziging: ontvangen afgewezen gefilterd genegeerd geaccepteerd Importupdates: 0 0 0 0 0 Import ingetrokken: 0 0 --- 0 0 Updates exporteren: 0 0 0 --- 0 Export wordt ingetrokken: 0 --- --- --- 0 BGP-status: Inactief Foutwachttijd: 43/60 Laatste fout: BGP-fout: Slecht BGP-identificatieapparaat1 Apparaat master up 22:01 Voorkeur: 240 Invoerfilter: ACCEPT Uitvoerfilter: REJECT Routes: 0 geïmporteerd, 0 geëxporteerd, 0 voorkeur Statistieken routewijziging: ontvangen afgewezen gefilterd genegeerd geaccepteerd Updates importeren: 0 0 0 0 0 Import trekt in: 0 0 --- 0 0 Updates exporteren : 0 0 0 --- 0 Export trekt zich terug: 0 --- --- --- 0