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:

  1. 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.
  2. Maršrutēšana ir datu virzīšanas process no avota līdz galamērķim tīklā.
  3. 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.
  4. 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 ):

  1. saite : tīkla ierīce.
  2. addr : protokola (IP vai IPv6) adrese ierīcē.
  3. maršruts : maršrutēšanas tabulas ieraksts.
  4. 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.