Kuidas muuta Linuxi server ruuteriks liikluse staatiliseks ja dünaamiliseks käitlemiseks - 10. osa
Nagu me selle LFCE ( Linux Foundation Certified Engineer ) sarja varasemates õpetustes oskasime oodata, käsitleme selles artiklis IP-liikluse marsruutimist staatiliselt ja dünaamiliselt konkreetsete rakendustega.
Kõigepealt tehkem mõned mõisted selgeks:
- Lihtsamalt öeldes on pakett põhiüksus, mida kasutatakse teabe edastamiseks võrgus. Võrgud, mis kasutavad TCP/IP-d võrguprotokollina, järgivad andmete edastamisel samu reegleid: tegelik teave jagatakse pakettideks, mis koosnevad nii andmetest kui ka aadressist, kuhu see tuleks saata.
- Marsruutimine on andmete\" suunamine " protsess võrgusisesest allikast sihtkohta.
- Staatiline marsruutimine nõuab marsruutimistabelis määratletud käsitsi konfigureeritud reeglistikku. Need reeglid on fikseeritud ja neid kasutatakse paketi ühest masinast teise liikumisel läbimise viisi määratlemiseks.
- Dünaamiline marsruutimine või nutikas marsruutimine (kui soovite) tähendab, et süsteem saab vajadusel automaatselt muuta marsruuti, mida pakett järgib.
Täpsem IP ja võrguseadmete seadistamine
Pakett iproute pakub võrkude ja liikluse juhtimise haldamiseks tööriistakomplekti, mida kasutame kogu selles artiklis, kuna need tähistavad pärandtööriistade, näiteks ifconfig ja route asendamist.
iproute komplekti keskset utiliiti nimetatakse lihtsalt ip-ks. Selle põhisüntaks on järgmine:
# ip object command
Kus objekt võib olla ainult üks järgmistest (kuvatakse ainult kõige sagedasemad objektid - täieliku loendi leiate inimeselt ip ):
- link : võrguseade.
- addr : protokolli (IP või IPv6) aadress seadmes.
- marsruut : marsruutimistabeli kirje.
- reegel : reegel marsruutimispoliitika andmebaasis.
Kui käsk tähistab konkreetset toimingut, mida saab objektil teha. Konkreetsele objektile rakendatavate käskude täieliku loendi kuvamiseks võite käivitada järgmise käsu:
# ip object help
Näiteks,
# ip link help
Ülaltoodud pilt näitab näiteks, et võrguliidese olekut saate muuta järgmise käsuga:
# ip link set interface {up | down}
Selliste käsu ‘ ip ’ lisanäidete saamiseks lugege 10 kasulikku käsku „ip“ IP-aadressi konfigureerimiseks
Selles näites keelame ja lubame eth1 :
# ip link show # ip link set eth1 down # ip link show
Kui soovite eth1 uuesti lubada,
# ip link set eth1 up
Kõigi võrguliideste kuvamise asemel võime määrata ühe neist:
# ip link show eth1
Mis tagastab kogu teabe eth1 jaoks.
Praegust peamist marsruutimistabelit saate vaadata kolme järgmise käsu abil:
# ip route show # route -n # netstat -rn
Kolme käsu väljundi esimene veerg tähistab sihtvõrku. ip route show väljund (pärast märksõna dev ) esitab ka võrguseadmed, mis toimivad nende võrkude füüsilise lüüsina.
Kuigi tänapäeval eelistatakse marsruudi asemel käsku ip , saate ülejäänud üksikasjade selgitamiseks siiski viidata inimesele ip-route ja man route veergudest.
Tahame marsruutida icmp (ping) pakette dev2-st dev4-ni ja ka vastupidi (pange tähele, et mõlemad kliendimasinad on erinevates võrkudes). Iga NIC-i nimi koos vastava IPv4-aadressiga on toodud nurksulgudes.
Meie testikeskkond on järgmine:
Client 1: CentOS 7 [enp0s3: 192.168.0.17/24] - dev1 Router: Debian Wheezy 7.7 [eth0: 192.168.0.15/24, eth1: 10.0.0.15/24] - dev2 Client 2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4
Vaatame marsruutimistabelit dev1-s (kast CentOS):
# ip route show
ja seejärel muutke seda, et kasutada oma enp0s3 NIC-i ja ühendust 192.168.0.15-ga, et pääseda hostidesse võrgus 10.0.0.0/24:
# ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3
Mis sisuliselt kõlab: "" Lisage marsruut 10.0.0.0/24 võrku enp0s3 võrguliidese kaudu, kasutades lüüsina 192.168.0.15 ".
Samamoodi dev4-s (kasti openSUSE) võrgu 192.168.0.0/24 hostimiseks
# ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3
Lõpuks peame lubama edastamise meie Debiani ruuteris:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Nüüd pingime:
ja
Nende seadete püsivaks muutmiseks alglaadimisel muutke ruuteris /etc/sysctl.conf ja veenduge, et muutuja net.ipv4.ip_forward väärtuseks seatakse tõene järgmiselt:
net.ipv4.ip_forward = 1
Lisaks konfigureerige mõlema kliendi NIC-id (otsige konfiguratsioonifaili saidist /etc/sysconfig/network saidil openSUSE ja /etc/sysconfig/network-scripts CentOS-ist - mõlemal juhul nimetatakse seda nimeks ifcfg-enp0s3 ).
Siin on konfiguratsioonifail kastist openSUSE:
BOOTPROTO=static BROADCAST=10.0.0.255 IPADDR=10.0.0.18 NETMASK=255.255.255.0 GATEWAY=10.0.0.15 NAME=enp0s3 NETWORK=10.0.0.0 ONBOOT=yes
Teine stsenaarium, kus Linuxi masinat saab ruuterina kasutada, on see, kui peate Interneti-ühendust jagama privaatse kohtvõrguga.
Router: Debian Wheezy 7.7 [eth0: Public IP, eth1: 10.0.0.15/24] - dev2 Client: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4
Lisaks pakettide edastamise ja staatilise marsruudi tabeli seadistamisele kliendis, nagu eelmises näites, peame ruuterisse lisama mõned iptables-reeglid:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT # iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Esimene käsk lisab tabelis nat (võrguaadressi tõlkimine) ahelale POSTROUTING reegli, mis näitab, et väljuvate pakettide jaoks tuleks kasutada eth0 NIC-i.
MASQUERADE näitab, et sellel NIC-il on dünaamiline IP ja et enne paketi saatmist Interneti\" metsikule metsikule maailmale " peab paketi privaatne allika aadress ruuteri avaliku IP-ga.
Paljude hostidega kohtvõrgus jälgib ruuter loodud ühendusi jaotises /proc/net/ip_conntrack , nii et ta teab, kuhu Internetist vastus tagastada.
Ainult osa väljundist:
# cat /proc/net/ip_conntrack
on näidatud järgmisel ekraanipildil.
Kus on esile tõstetud pakettide päritolu (kasti openSUSE privaatne IP) ja sihtkoht (Google DNS). See oli jooksmise tulemus:
# curl linux-console.net
kasti openSUSE.
Kuna olen kindel, et võite juba aimata, kasutab ruuter nimeserverina Google'i 8.8.8.8, mis selgitab, miks väljuvate pakettide sihtkoht sellele aadressile osutab.
Märkus. Internetist saabuvaid pakette aktsepteeritakse ainult siis, kui need on osa juba loodud ühendusest (käsk nr 2), samas kui väljaminevad paketid on lubatud\" vaba väljumine " (käsk nr 3).
Ärge unustage oma iptables-reegleid püsivaks teha, järgides selle osa 8. osas - IPptablesi tulemüüri seadistamine.
Dünaamiline marsruutimine Quaggaga
Tänapäeval on Linuxi dünaamiliseks marsruutimiseks kõige enam kasutatav tööriist quagga . See võimaldab süsteemiadministraatoritel suhteliselt odava Linuxi serveriga rakendada sama funktsionaalsust, mida pakuvad võimsad (ja kulukad) Cisco ruuterid.
Tööriist ise marsruutimisega ei tegele, vaid muudab pigem kerneli marsruutimistabelit, kuna see õpib pakettide käsitsemiseks uusi parimaid marsruute.
Kuna tegemist on sebra kahvliga, programmiga, mille arendamine mõni aeg tagasi lakkas, säilitab see ajaloolistel põhjustel samad käsud ja ülesehituse kui sebra. Sellepärast näete sellest hetkest alates palju sebrale viitamist.
Pange tähele, et dünaamilist marsruutimist ja kõiki sellega seotud protokolle ei ole võimalik käsitleda ühes artiklis, kuid olen kindel, et siin esitatud sisu on teie jaoks lähtepunkt.
Quagga installimiseks valitud jaotisse:
# aptitude update && aptitude install quagga [On Ubuntu] # yum update && yum install quagga [CentOS/RHEL] # zypper refresh && zypper install quagga [openSUSE]
Kasutame sama keskkonda nagu näites 3, ainsa erinevusega, et eth0 on ühendatud peavärava ruuteriga IP 192.168.0.1 abil.
Järgmisena muutke /etc/quagga/daemons ,
zebra=1 ripd=1
Nüüd looge järgmised konfiguratsioonifailid.
# /etc/quagga/zebra.conf # /etc/quagga/ripd.conf
ja lisage need read (asendage valitud hosti nimi ja parool):
service quagga restart hostname dev2 password quagga
# service quagga restart
Märkus. See ripd.conf on marsruutimisteabe protokolli konfiguratsioonifail, mis annab ruuterile teavet selle kohta, millistesse võrkudesse pääseb ja kui kaugel nad (hüpete hulga osas) asuvad.
Pange tähele, et see on ainult üks protokollidest, mida saab kasutada koos quaggaga, ja ma valisin selle selle õpetuse jaoks kasutusmugavuse tõttu ja kuna enamik võrguseadmeid seda toetab, ehkki selle puuduseks on mandaatide edastamine lihttekstina. Sel põhjusel peate määrama konfiguratsioonifailile õiged õigused:
# chown quagga:quaggavty /etc/quagga/*.conf # chmod 640 /etc/quagga/*.conf
Selles näites kasutame kahe ruuteriga järgmist seadistust (looge ruuteri nr 2 konfiguratsioonifailid, nagu eelnevalt selgitatud):
Tähtis: ärge unustage mõlema ruuteri jaoks järgmist seadistust korrata.
Looge ühendus sebra abil (kuulamine pordil 2601 ), mis on ruuteri ja kerneli loogiline vahendaja:
# telnet localhost 2601
Sisestage failis /etc/quagga/zebra.conf määratud parool ja lubage seejärel konfiguratsioon:
enable configure terminal
Sisestage iga võrguühenduse IP-aadress ja võrgumask:
inter eth0 ip addr 192.168.0.15 inter eth1 ip addr 10.0.0.15 exit exit write
Nüüd peame ühenduse looma deemoniterminaliga RIP (port 2602):
# telnet localhost 2602
Sisestage failis /etc/quagga/ripd.conf konfigureeritud kasutajanimi ja parool ning tippige seejärel rasvases kirjas järgmised käsud (selguse huvides lisatakse kommentaarid):
enable turns on privileged mode command. configure terminal changes to configuration mode. This command is the first step to configuration router rip enables RIP. network 10.0.0.0/24 sets the RIP enable interface for the 10.0.0.0/24 network. exit exit write writes current configuration to configuration file.
Märkus. Mõlemal juhul lisatakse konfiguratsioon varem lisatud ridadele ( /etc/quagga/zebra.conf ja /etc/quagga/ripd.conf ) .
Lõpuks looge uuesti ühendus mõlema ruuteri sebra-teenusega ja märkige, kuidas kumbki neist on\" õppinud " marsruudi teise taga olevasse võrku ja mis on järgmine hüpata selles võrgus käivitades käsu näita ip marsruuti :
# show ip route
Kui soovite proovida erinevaid protokolle või seadistusi, võiksite lisateabe saamiseks pöörduda Quagga projekti saidi poole.
Järeldus
Selles artiklis oleme selgitanud, kuidas seadistada staatiline ja dünaamiline marsruutimine, kasutades Linuxi ruuterite ruutereid. Lisage julgelt nii palju ruutereid kui soovite ja katsetage nii palju kui soovite. Kui teil on kommentaare või küsimusi, pöörduge tagasi meie poole, kasutades allolevat kontaktivormi.