Kā pārvērst Linux serveri par maršrutētāju, lai statistiski un dinamiski apstrādātu trafiku - 10. daļa
Kā jau iepriekš paredzējām šīs LFCE ( Linux Foundation Certified Engineer ) sērijas iepriekšējās apmācības, šajā rakstā mēs statiski un dinamiski apspriedīsim IP trafika maršrutēšanu ar konkrētām lietojumprogrammām.
Pirmkārt, iegūstiet dažas definīcijas:
- Vienkārši sakot, pakete ir pamata vienība, ko izmanto informācijas pārsūtīšanai tīklā. Tīkli, kas TCP/IP izmanto kā tīkla protokolu, ievēro tos pašus datu pārsūtīšanas noteikumus: faktiskā informācija tiek sadalīta paketēs, kuras veido gan dati, gan adrese, uz kuru tā jānosūta.
- Maršrutēšana ir datu virzīšanas process no avota līdz galamērķim tīklā.
- Statiskai maršrutēšanai ir nepieciešama manuāli konfigurēta kārtulu kopa, kas definēta maršrutēšanas tabulā. Šie noteikumi ir fiksēti un tiek izmantoti, lai noteiktu paketes iziešanas veidu, pārvietojoties no vienas mašīnas uz otru.
- Dinamiskā maršrutēšana vai viedā maršrutēšana (ja vēlaties) nozīmē, ka sistēma pēc vajadzības var automātiski mainīt maršrutu, kuru ievēro pakete.
Uzlabota IP un tīkla ierīces konfigurācija
Pakotne iproute nodrošina tīkla un satiksmes vadības rīku kopu, ko izmantosim šajā rakstā, jo tie aizstāj mantotos rīkus, piemēram, ifconfig un route .
iproute komplekta centrālo utilītu sauc vienkārši par ip. Tās sintakse ir šāda:
# ip object command
Kur objekts var būt tikai viens no šiem (tiek parādīti tikai visbiežāk sastopamie objekti - pilnu sarakstu varat norādīt uz cilvēku ip ):
- saite : tīkla ierīce.
- addr : protokola (IP vai IPv6) adrese ierīcē.
- maršruts : maršrutēšanas tabulas ieraksts.
- noteikums : noteikums maršrutēšanas politikas datu bāzē.
Tā kā komanda apzīmē noteiktu darbību, ko var veikt ar objektu. Varat palaist šo komandu, lai parādītu pilnu komandu sarakstu, ko var piemērot konkrētam objektam:
# ip object help
Piemēram,
# ip link help
Iepriekš redzamajā attēlā parādīts, piemēram, ka varat mainīt tīkla saskarnes statusu ar šādu komandu:
# ip link set interface {up | down}
Šādus citus ‘ ip ’ komandas piemērus lasiet 10 noderīgās ‘ip’ komandas, lai konfigurētu IP adresi
Šajā piemērā mēs atspējosim un iespējosim eth1 :
# ip link show # ip link set eth1 down # ip link show
Ja vēlaties atkārtoti iespējot eth1,
# ip link set eth1 up
Tā vietā, lai parādītu visas tīkla saskarnes, mēs varam norādīt vienu no tām:
# ip link show eth1
Kas atgriezīs visu informāciju par eth1.
Pašreizējo galveno maršrutēšanas tabulu var apskatīt, izmantojot kādu no šīm 3 komandām:
# ip route show # route -n # netstat -rn
Triju komandu izvades pirmā kolonna norāda mērķa tīklu. Programmas ip route izeja (pēc atslēgvārda dev ) parāda arī tīkla ierīces, kas kalpo kā fiziska vārteja uz šiem tīkliem.
Lai gan mūsdienās priekšroka tiek dota ip komandai nevis maršrutam, detalizētu pārējo skaidrojumu jūs joprojām varat norādīt uz cilvēka ip-maršrutu un cilvēka maršrutu . no kolonnām.
Mēs vēlamies maršrutēt icmp (ping) paketes no dev2 uz dev4 un otrādi (ņemiet vērā, ka abas klientu mašīnas atrodas dažādos tīklos). Katras NIC nosaukums kopā ar atbilstošo IPv4 adresi ir norādīts kvadrātiekavās.
Mūsu testa vide ir šāda:
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
Apskatīsim maršrutēšanas tabulu dev1 (lodziņā CentOS):
# ip route show
un pēc tam modificējiet to, lai izmantotu savu enp0s3 NIC un savienojumu ar 192.168.0.15, lai piekļūtu resursdatoriem tīklā 10.0.0.0/24:
# ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3
Kas būtībā skan: “Pievienojiet maršrutu 10.0.0.0/24 tīklam caur enp0s3 tīkla saskarni, izmantojot vārteju 192.168.0.15”.
Tāpat dev4 (openSUSE lodziņā), lai pingētu resursdatorus tīklā 192.168.0.0/24:
# ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3
Visbeidzot, mums ir jāiespējo pārsūtīšana mūsu Debian maršrutētājā:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Tagad pingēsim:
un,
Lai šie iestatījumi būtu nemainīgi bootos, maršrutētājā rediģējiet /etc/sysctl.conf un pārliecinieties, vai mainīgais net.ipv4.ip_forward ir iestatīts uz true šādi:
net.ipv4.ip_forward = 1
Turklāt konfigurējiet NIC abos klientos (meklējiet konfigurācijas failu /etc/sysconfig/network vietnē openSUSE un /etc/sysconfig/network-scripts CentOS - abos gadījumos to sauc par ifcfg-enp0s3 ).
Šeit ir konfigurācijas fails no lodziņa 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
Vēl viens scenārijs, kurā Linux mašīnu var izmantot kā maršrutētāju, ir tas, kad jums ir nepieciešams koplietot interneta savienojumu ar privātu LAN.
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
Papildus pakešu pārsūtīšanas un statiskās maršrutēšanas tabulas iestatīšanai klientā, kā norādīts iepriekšējā piemērā, mums maršrutētājā jāpievieno daži iptables noteikumi:
# 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
Pirmā komanda tabulas nat (tīkla adrešu tulkošana) ķēdei POSTROUTING pievieno kārtulu, norādot, ka izejošajām paketēm jāizmanto eth0 NIC.
MASQUERADE norāda, ka šim NIC ir dinamisks IP un ka pirms paketes nosūtīšanas uz interneta “ savvaļas savvaļas pasauli ” ir jānorāda paketes privātā avota adrese. mainīts uz maršrutētāja publiskā IP.
Vietējā tīklā ar daudziem resursdatoriem maršrutētājs seko izveidotajiem savienojumiem vietnē /proc/net/ip_conntrack , lai zinātu, kur atgriezt atbildi no interneta.
Tikai daļa no produkcijas:
# cat /proc/net/ip_conntrack
ir parādīts nākamajā ekrānuzņēmumā.
Kur ir izcelta pakešu izcelsme (openSUSE lodziņa privātais IP) un galamērķis (Google DNS). Tas bija skriešanas rezultāts:
# curl linux-console.net
lodziņā openSUSE.
Kā esmu pārliecināts, ka jūs jau varat uzminēt, maršrutētājs kā nosaukuma serveri izmanto Google 8.8.8.8, kas izskaidro, kāpēc izejošo pakešu galamērķis norāda uz šo adresi.
Piezīme. Ienākošās paketes no interneta tiek pieņemtas tikai tad, ja tās ir daļa no jau izveidota savienojuma (komanda Nr. 2), bet izejošajām pakotnēm ir atļauts izmantot “ bezmaksas iziešanu ” (komanda Nr. 3).
Neaizmirstiet padarīt savus iptables noteikumus nemainīgus, veicot 8. sērijā - Šīs sērijas Iptables ugunsmūra konfigurēšana.
Dinamisks maršruts ar Quagga
Mūsdienās rīks, ko visvairāk izmanto dinamiskajā maršrutēšanā Linux, ir quagga . Tas ļauj sistēmas administratoriem ar salīdzinoši zemu cenu Linux serveri ieviest to pašu funkcionalitāti, ko nodrošina jaudīgi (un dārgi) Cisco maršrutētāji.
Šis rīks pats neapstrādā maršrutēšanu, bet drīzāk modificē kodola maršrutēšanas tabulu, jo tas iemācās jaunus labākos maršrutus, kā rīkoties ar paketēm.
Tā kā tā ir zebras dakša, programma, kuras izstrāde tika pārtraukta pirms kāda laika, vēsturisku iemeslu dēļ tā saglabā tādas pašas komandas un struktūru kā zebra. Tāpēc no šī brīža jūs redzēsiet daudz atsauču uz zebru.
Lūdzu, ņemiet vērā, ka dinamisko maršrutēšanu un visus saistītos protokolus nav iespējams aplūkot vienā rakstā, taču esmu pārliecināts, ka šeit sniegtais saturs kalpos par sākumpunktu, uz kura balstīties.
Lai instalētu quagga izvēlētajā izplatītājā:
# aptitude update && aptitude install quagga [On Ubuntu] # yum update && yum install quagga [CentOS/RHEL] # zypper refresh && zypper install quagga [openSUSE]
Mēs izmantosim to pašu vidi kā ar 3. piemēru, ar vienīgo atšķirību, ka eth0 ir savienots ar galveno vārtejas maršrutētāju ar IP 192.168.0.1.
Pēc tam rediģējiet /etc/quagga/daemons ar
zebra=1 ripd=1
Tagad izveidojiet šādus konfigurācijas failus.
# /etc/quagga/zebra.conf # /etc/quagga/ripd.conf
un pievienojiet šīs rindas (aizstājiet ar izvēlēto resursdatora nosaukumu un paroli):
service quagga restart hostname dev2 password quagga
# service quagga restart
Piezīme. Šis ripd.conf ir maršrutēšanas informācijas protokola konfigurācijas fails, kas maršrutētājam sniedz informāciju par tīkliem, kurus var sasniegt un cik tālu (apiņu apjoma ziņā) tie atrodas.
Ņemiet vērā, ka tas ir tikai viens no protokoliem, ko var izmantot kopā ar quagga, un es to izvēlējos šai apmācībai izmantošanas viegluma dēļ un tāpēc, ka lielākā daļa tīkla ierīču to atbalsta, lai gan tam ir trūkums, ka akreditācijas datus nodod vienkāršā tekstā. Šī iemesla dēļ konfigurācijas failam jāpiešķir atbilstošas atļaujas:
# chown quagga:quaggavty /etc/quagga/*.conf # chmod 640 /etc/quagga/*.conf
Šajā piemērā mēs izmantosim šādu iestatīšanu ar diviem maršrutētājiem (pārliecinieties, vai esat izveidojis konfigurācijas failus maršrutētājam # 2 , kā paskaidrots iepriekš):
Svarīgi: neaizmirstiet atkārtot šo iestatīšanu abiem maršrutētājiem.
Izveidojiet savienojumu ar zebru (klausīšanās portā 2601 ), kas ir loģisks starpnieks starp maršrutētāju un kodolu:
# telnet localhost 2601
Ievadiet paroli, kas tika iestatīta failā /etc/quagga/zebra.conf , un pēc tam iespējojiet konfigurāciju:
enable configure terminal
Ievadiet katra NIC IP adresi un tīkla masku:
inter eth0 ip addr 192.168.0.15 inter eth1 ip addr 10.0.0.15 exit exit write
Tagad mums ir jāizveido savienojums ar dēmonu terminālu RIP (ports 2602):
# telnet localhost 2602
Ievadiet lietotājvārdu un paroli, kā konfigurēts failā /etc/quagga/ripd.conf , un pēc tam treknrakstā ierakstiet šīs komandas (skaidrības labad tiek pievienoti komentāri):
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.
Piezīme. Ka abos gadījumos konfigurācija tiek pievienota iepriekš pievienotajām rindām ( /etc/quagga/zebra.conf un /etc/quagga/ripd.conf ) .
Visbeidzot, vēlreiz izveidojiet savienojumu ar zebras pakalpojumu abos maršrutētājos un atzīmējiet, kā katrs no viņiem ir “iemācījies” maršrutu uz tīklu, kas atrodas aiz otra, un kurš ir nākamais lēciens, lai nokļūtu tajā. tīklā, izpildot komandu rādīt ip maršrutu :
# show ip route
Ja vēlaties izmēģināt dažādus protokolus vai iestatījumus, varat meklēt Quagga projekta vietni, lai iegūtu papildu dokumentāciju.
Secinājums
Šajā rakstā mēs esam paskaidrojuši, kā iestatīt statisko un dinamisko maršrutēšanu, izmantojot Linux kastes maršrutētāju (-us). Jūtieties brīvi pievienot tik daudz maršrutētāju, cik vēlaties, un eksperimentēt, cik vēlaties. Ja jums ir kādi komentāri vai jautājumi, nevilcinieties sazināties ar mums, izmantojot zemāk esošo saziņas veidlapu.