Kuinka muuttaa Linux-palvelin reitittimeksi, joka käsittelee liikennettä staattisesti ja dynaamisesti - Osa 10


Kuten olemme odottaneet tämän LFCE (Linux Foundation Certified Engineer) -sarjan aiemmissa opetusohjelmissa, tässä artikkelissa käsittelemme IP-liikenteen reitittämistä staattisesti ja dynaamisesti tiettyjen sovellusten kanssa.

Esittelyssä Linux Foundation -sertifiointiohjelma

Ensinnäkin selvitetään joitakin määritelmiä:

  1. Yksinkertaisesti sanottuna paketti on perusyksikkö, jota käytetään tiedon siirtämiseen verkossa. TCP/IP:tä verkkoprotokollana käyttävät verkot noudattavat samoja tiedonsiirtosääntöjä: varsinainen tieto jaetaan paketeiksi, jotka koostuvat sekä tiedosta että osoitteesta, johon se lähetetään.
  2. Reititys on prosessi, jossa tiedot "ohjataan" lähteestä määränpäähän verkon sisällä.
  3. Staattinen reititys vaatii manuaalisesti määritetyn säännöstön, joka on määritetty reititystaulukossa. Nämä säännöt ovat kiinteitä, ja niitä käytetään määrittämään tapa, jolla paketin täytyy kulkea, kun se kulkee koneelta toiselle.
  4. Dynaaminen reititys tai älykäs reititys (jos haluat) tarkoittaa, että järjestelmä voi tarvittaessa muuttaa automaattisesti paketin noudattamaa reittiä.

IP- ja verkkolaitteiden lisäasetukset

iproute-paketti sisältää joukon työkaluja verkkojen ja liikenteen hallinnan hallintaan, joita käytämme tässä artikkelissa, koska ne korvaavat vanhat työkalut, kuten ifconfig ja route.

iproute -sarjan keskeistä apuohjelmaa kutsutaan yksinkertaisesti ip:ksi. Sen perussyntaksi on seuraava:

ip object command

Kun objekti voi olla vain yksi seuraavista (vain yleisimmät objektit näytetään – voit katsoa täydellisen luettelon osoitteesta ip):

  1. linkki: verkkolaite.
  2. addr: protokolla-osoite (IP tai IPv6) laitteessa.
  3. reitti: reititystaulukon merkintä.
  4. sääntö: sääntö reitityskäytäntötietokannassa.

Kun taas komento edustaa tiettyä toimintoa, joka voidaan suorittaa objektille. Voit suorittaa seuraavan komennon näyttääksesi täydellisen luettelon komennoista, joita voidaan käyttää tiettyyn objektiin:

ip object help

Esimerkiksi,

ip link help

Yllä oleva kuva näyttää esimerkiksi, että voit muuttaa verkkoliitännän tilaa seuraavalla komennolla:

ip link set interface {up | down}

Jos haluat lisää esimerkkejä ip-komennosta, lue 10 hyödyllistä ip-komentoa IP-osoitteen määrittämiseen

Esimerkki 1: Verkkoliitännän poistaminen käytöstä ja käyttöönotto

Tässä esimerkissä poistamme käytöstä ja otamme käyttöön eth1:

ip link show
ip link set eth1 down
ip link show

Jos haluat ottaa eth1:n uudelleen käyttöön,

ip link set eth1 up

Sen sijaan, että näyttäisimme kaikki verkkoliitännät, voimme määrittää yhden niistä:

ip link show eth1

Mikä palauttaa kaikki eth1:n tiedot.

Esimerkki 2: Pääreititystaulukon näyttäminen

Voit tarkastella nykyistä pääreititystaulukkoasi jommallakummalla seuraavista kolmesta komennosta:

ip route show
route -n
netstat -rn

Kolmen komennon tulosteen ensimmäinen sarake osoittaa kohdeverkon. ip route show (avainsanan dev jälkeen) tulos esittää myös verkkolaitteet, jotka toimivat fyysisenä yhdyskäytävänä näihin verkkoihin.

Vaikka nykyään ip-komento on suositeltavampi kuin reitin, voit silti viitata man ip-route ja man route yksityiskohtaisen selityksen saamiseksi. sarakkeista.

Esimerkki 3: Linux-palvelimen käyttäminen pakettien reitittämiseen kahden yksityisen verkon välillä

Haluamme reitittää icmp (ping) -paketit dev2:sta dev4:ään ja myös toisinpäin (huomaa, että molemmat asiakaskoneet ovat eri verkoissa). Kunkin verkkokortin nimi ja sitä vastaava IPv4-osoite on annettu hakasulkeissa.

Testiympäristömme on seuraava:

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

Katsotaanpa reititystaulukkoa dev1:ssä (CentOS-laatikko):

ip route show

ja muokkaa sitä sitten käyttääksesi sen enp0s3 NIC:tä ja yhteyttä 192.168.0.15:een päästäkseen isänteihin 10.0.0.0/24-verkossa:

ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

Pohjimmiltaan se kuuluu seuraavasti: "Lisää reitti 10.0.0.0/24-verkkoon enp0s3-verkkoliitännän kautta käyttämällä yhdyskäytävänä 192.168.0.15".

Samoin dev4:ssä (openSUSE-laatikko) ping-isännille 192.168.0.0/24-verkossa:

ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

Lopuksi meidän on otettava käyttöön edelleenlähetys Debian-reitittimessämme:

echo 1 > /proc/sys/net/ipv4/ip_forward

Nyt pingoidaan:

ja,

Voit tehdä näistä asetuksista pysyviä kaikissa käynnistyksissä muokkaamalla tiedostoa /etc/sysctl.conf reitittimessä ja varmistamalla, että net.ipv4.ip_forward-muuttujan arvo on tosi seuraavasti:

net.ipv4.ip_forward = 1

Lisäksi määritä verkkokorttien asetukset molemmissa asiakaskoneissa (etsi määritystiedostoa hakemistosta /etc/sysconfig/network openSUSEssa ja /etc/sysconfig/network-scripts CentOS:ssä – molemmissa tapauksissa sen nimi on ifcfg-enp0s3).

Tässä on määritystiedosto openSUSE-laatikosta:

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
Esimerkki 4: Linux-palvelimen käyttäminen pakettien reitittämiseen yksityisen verkon ja Internetin välillä

Toinen skenaario, jossa Linux-konetta voidaan käyttää reitittimenä, on, kun sinun on jaettava Internet-yhteytesi yksityisen lähiverkon kanssa.

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

Sen lisäksi, että asetamme pakettien edelleenlähetyksen ja staattisen reititystaulukon asiakkaalle kuten edellisessä esimerkissä, meidän on lisättävä reitittimeen muutama iptables-sääntö:

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

Ensimmäinen komento lisää säännön POSTROUTING-ketjuun nat (Network Address Translation) -taulukossa, mikä osoittaa, että eth0 NIC:tä tulee käyttää lähteville paketeille.

MASQUERADE osoittaa, että tällä verkkokortilla on dynaaminen IP ja että paketin yksityinen lähdeosoite on oltava ennen paketin lähettämistä Internetin "villiin maailmaan". muutettu reitittimen julkiseksi IP-osoitteeksi.

Lähiverkossa, jossa on useita isäntiä, reititin pitää kirjaa muodostetuista yhteyksistä kohdassa /proc/net/ip_conntrack, jotta se tietää, minne se palauttaa vastauksen Internetistä.

Vain osa tuotosta:

cat /proc/net/ip_conntrack

näkyy seuraavassa kuvakaappauksessa.

Pakettien alkuperä (openSUSE-laatikon yksityinen IP) ja kohde (Google DNS) on korostettu. Tämä oli juoksemisen tulos:

curl linux-console.net

openSUSE-laatikossa.

Kuten varmasti jo arvaatte, reititin käyttää Googlen 8.8.8.8:aa nimipalvelimena, mikä selittää miksi lähtevien pakettien kohde osoittaa tähän osoitteeseen.

Huomaa: Internetistä saapuvat paketit hyväksytään vain, jos ne ovat osa jo muodostettua yhteyttä (komento #2), kun taas lähtevät paketit ovat sallittuja "vapaa poistuminen ” (komento 3).

Älä unohda tehdä iptables-säännöistäsi pysyviä noudattamalla tämän sarjan osassa 8 – Iptables-palomuurin määritys.

Dynaaminen reititys Quaggalla

Nykyään Linuxissa eniten käytetty työkalu dynaamiseen reititykseen on quagga. Sen avulla järjestelmänvalvojat voivat toteuttaa suhteellisen halvalla Linux-palvelimella samat toiminnot, joita tehokkaat (ja kalliit) Ciscon reitittimet tarjoavat.

Työkalu itse ei käsittele reititystä, vaan muokkaa ytimen reititystaulukkoa, kun se oppii uusia parhaita reittejä pakettien käsittelyyn.

Koska se on seepran haarukka, ohjelma, jonka kehitys pysähtyi jokin aika sitten, se säilyttää historiallisista syistä samat komennot ja rakenteen kuin seepra. Tästä syystä näet tästä lähtien paljon viittauksia seepraan.

Huomaa, että dynaamista reititystä ja kaikkia siihen liittyviä protokollia ei ole mahdollista käsitellä yhdessä artikkelissa, mutta olen varma, että tässä esitetty sisältö toimii lähtökohtana, jonka pohjalta voit jatkaa.

Quaggan asentaminen Linuxiin

Quaggan asentaminen valitsemaasi jakeluun:

aptitude update && aptitude install quagga 				[On Ubuntu]
yum update && yum install quagga 					[CentOS/RHEL]
zypper refresh && zypper install quagga 				[openSUSE]

Käytämme samaa ympäristöä kuin esimerkissä 3, sillä ainoalla erolla, että eth0 on kytketty pääyhdyskäytäväreitittimeen, jonka IP-osoite on 192.168.0.1.

Muokkaa seuraavaksi /etc/quagga/daemons:

zebra=1
ripd=1

Luo nyt seuraavat määritystiedostot.

/etc/quagga/zebra.conf
/etc/quagga/ripd.conf

ja lisää nämä rivit (korvaa valitsemasi isäntänimi ja salasana):

service quagga restart
hostname    	dev2
password    	quagga
service quagga restart

Huomaa: ripd.conf on reititystietoprotokollan määritystiedosto, joka antaa reitittimelle tiedot siitä, mitkä verkot voidaan saavutettu ja kuinka kaukana ne ovat (humaloiden määrässä mitattuna).

Huomaa, että tämä on vain yksi protokollista, joita voidaan käyttää quaggan kanssa, ja valitsin sen tähän opetusohjelmaan käytön helppouden vuoksi ja koska useimmat verkkolaitteet tukevat sitä, vaikka sen haittana onkin valtuustietojen välittäminen pelkkänä tekstinä. Tästä syystä sinun on määritettävä oikeat oikeudet määritystiedostolle:

chown quagga:quaggavty /etc/quagga/*.conf
chmod 640 /etc/quagga/*.conf 
Esimerkki 5: Quaggan asettaminen reitittämään IP-liikennettä dynaamisesti

Tässä esimerkissä käytämme seuraavaa asetusta kahdella reitittimellä (varmista, että olet luonut määritystiedostot reitittimelle #2, kuten aiemmin selitettiin):

Tärkeää: muista toistaa seuraavat asetukset molemmille reitittimille.

Yhdistä seepraan (kuuntelee portista 2601), joka on looginen välittäjä reitittimen ja ytimen välillä:

telnet localhost 2601

Kirjoita /etc/quagga/zebra.conf-tiedostossa asetettu salasana ja ota sitten määritys käyttöön:

enable
configure terminal

Anna kunkin NIC:n IP-osoite ja verkon peite:

inter eth0
ip addr 192.168.0.15
inter eth1
ip addr 10.0.0.15
exit
exit
write

Nyt meidän on muodostettava yhteys RIP-daemon-päätteeseen (portti 2602):

telnet localhost 2602

Anna käyttäjänimi ja salasana /etc/quagga/ripd.conf-tiedostossa määritettyjen mukaisesti ja kirjoita sitten seuraavat komennot lihavoituna (kommentit on lisätty selvennyksen vuoksi):

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.

Huomaa: molemmissa tapauksissa määritykset liitetään aiemmin lisäämiimme riveihin (/etc/quagga/zebra.conf ja < b>/etc/quagga/ripd.conf).

Yhdistä lopuksi uudelleen seeprapalveluun molemmissa reitittimissä ja pane merkille, kuinka kumpikin niistä on "oppinut" reitin toisen takana olevaan verkkoon ja mikä on seuraava hyppy siihen päästäksesi. verkkoon suorittamalla komennon näytä ip-reitti:

show ip route

Jos haluat kokeilla erilaisia protokollia tai asetuksia, saatat haluta katsoa Quagga-projektisivustolta lisädokumentaatiota.

Johtopäätös

Tässä artikkelissa olemme selittäneet, kuinka staattinen ja dynaaminen reititys määritetään Linux-reitittimien avulla. Voit vapaasti lisätä niin monta reititintä kuin haluat ja kokeilla niin paljon kuin haluat. Älä epäröi ottaa meihin yhteyttä alla olevan yhteydenottolomakkeen avulla, jos sinulla on kommentteja tai kysymyksiä.