Weboldal keresés

Hogyan lehet egy Linux szervert routerré alakítani a forgalom statikus és dinamikus kezelésére - 10. rész


Amint arra az LFCE (Linux Foundation Certified Engineer) sorozat korábbi oktatóanyagaiban már számítottunk, ebben a cikkben az IP-forgalom statikus és dinamikus irányításáról fogunk beszélni konkrét alkalmazásokkal.

Bemutatkozik a Linux Foundation Certification Program

Először is tisztázzunk néhány definíciót:

  1. Egyszerűen fogalmazva, a csomag az az alapegység, amelyet a hálózaton belüli információtovábbításra használnak. A TCP/IP-t hálózati protokollként használó hálózatok ugyanazokat az adatátviteli szabályokat követik: a tényleges információ csomagokra van felosztva, amelyek mind adatokból, mind címből állnak, ahová küldeni kell.
  2. Az útválasztás az adatok „vezetése” folyamata a hálózaton belül a forrástól a célig.
  3. A statikus útválasztás egy útválasztási táblázatban meghatározott, kézzel konfigurált szabálykészletet igényel. Ezek a szabályok rögzítettek, és annak meghatározására szolgálnak, hogyan kell átmennie egy csomagnak, amikor az egyik gépről a másikra halad.
  4. A dinamikus útválasztás vagy az intelligens útválasztás (ha kívánja) azt jelenti, hogy a rendszer szükség szerint automatikusan módosíthatja a csomag által követett útvonalat.

Speciális IP- és hálózati eszközkonfiguráció

Az iproute csomag eszközkészletet biztosít a hálózatkezelés és a forgalomirányítás kezelésére, amelyeket ebben a cikkben fogunk használni, mivel ezek a régi eszközök, például az ifconfig és az route helyettesítését jelentik.

Az iproute programcsomag központi segédprogramját egyszerűen ip-nek hívják. Alapszintaxisa a következő:

ip object command

Ahol az objektum csak az alábbiak egyike lehet (csak a leggyakrabban előforduló objektumok jelennek meg – a teljes listáért tekintse meg az ip embert):

  1. link: hálózati eszköz.
  2. addr: protokoll (IP vagy IPv6) cím az eszközön.
  3. útvonal: az útválasztási táblázat bejegyzése.
  4. szabály: szabály az útválasztási szabályzat adatbázisában.

Míg a parancs egy adott műveletet jelöl, amely végrehajtható az objektumon. A következő parancs futtatásával megjelenítheti az adott objektumra alkalmazható parancsok teljes listáját:

ip object help

Például,

ip link help

A fenti képen látható például, hogy a következő paranccsal módosíthatja a hálózati interfész állapotát:

ip link set interface {up | down}

Az „ip” parancs további példáiért olvassa el a 10 hasznos „ip” parancsot az IP-cím konfigurálásához.

1. példa: Hálózati interfész letiltása és engedélyezése

Ebben a példában letiltjuk és engedélyezzük az eth1 szolgáltatást:

ip link show
ip link set eth1 down
ip link show

Ha újra szeretné engedélyezni az eth1-et,

ip link set eth1 up

Az összes hálózati interfész megjelenítése helyett megadhatunk közülük egyet:

ip link show eth1

Ez visszaadja az eth1 összes információt.

2. példa: A fő útválasztási tábla megjelenítése

Az aktuális fő útválasztási táblázatot a következő 3 parancs valamelyikével tekintheti meg:

ip route show
route -n
netstat -rn

A három parancs kimenetének első oszlopa a célhálózatot jelöli. Az ip route show kimenete (a dev kulcsszót követve) azokat a hálózati eszközöket is bemutatja, amelyek fizikai átjáróként szolgálnak ezekhez a hálózatokhoz.

Bár manapság az ip parancsot részesítik előnyben az útvonallal szemben, továbbra is hivatkozhat az ember ip-route és man route parancsra a többi részletes magyarázatához. az oszlopok közül.

3. példa: Linux szerver használata csomagok továbbítására két magánhálózat között

Az icmp (ping) csomagokat szeretnénk átirányítani a dev2-ről a dev4-re és fordítva is (vegye figyelembe, hogy mindkét kliensgép más-más hálózaton van). Az egyes hálózati kártyák neve a megfelelő IPv4-címmel együtt szögletes zárójelben található.

Tesztkörnyezetünk a következő:

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

Nézzük meg az útválasztási táblát a dev1-ben (CentOS doboz):

ip route show

majd módosítsa annak érdekében, hogy az enp0s3 hálózati kártyáját és a 192.168.0.15-ös kapcsolatot használja a 10.0.0.0/24 hálózat gazdagépeinek eléréséhez:

ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

Ez lényegében így szól: „Útvonal hozzáadása a 10.0.0.0/24 hálózathoz az enp0s3 hálózati interfészen keresztül a 192.168.0.15 átjáróként használva”.

Hasonlóképpen a dev4-ben (openSUSE box) a 192.168.0.0/24 hálózaton lévő gazdagépek pingeléséhez:

ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

Végül engedélyeznünk kell a továbbítást a Debian útválasztónkban:

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

Most pingeljünk:

és,

Ha azt szeretné, hogy ezek a beállítások a rendszerindítások között megmaradjanak, szerkessze az /etc/sysctl.conf fájlt az útválasztón, és győződjön meg arról, hogy a net.ipv4.ip_forward változó igaz értékre van állítva az alábbiak szerint:

net.ipv4.ip_forward = 1

Ezenkívül mindkét kliensen konfigurálja a hálózati kártyákat (keresse a konfigurációs fájlt az /etc/sysconfig/network mappában az openSUSE rendszeren és az /etc/sysconfig/network-scripts mappában CentOS rendszeren – mindkét esetben ifcfg-enp0s3).

Íme a konfigurációs fájl az openSUSE dobozból:

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
4. példa: Linux szerver használata csomagok továbbítására magánhálózatok és az internet között

Egy másik forgatókönyv, amikor egy Linux gép használható útválasztóként, az, amikor meg kell osztania internetkapcsolatát egy privát LAN-nal.

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

Amellett, hogy be kell állítani a csomagtovábbítást és a statikus útválasztási táblát a kliensben, mint az előző példában, hozzá kell adnunk néhány iptables szabályt az útválasztóhoz:

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

Az első parancs egy szabályt ad a nat (Network Address Translation) táblában a POSTROUTING lánchoz, jelezve, hogy az eth0 hálózati kártyát kell használni a kimenő csomagokhoz.

A MASQUERADE azt jelzi, hogy ennek a hálózati kártyának dinamikus IP-címe van, és mielőtt elküldené a csomagot az internet „vad világába”, a csomag privát forráscímét meg kell adni. az útválasztó nyilvános IP-címére változott.

A sok gazdagépet tartalmazó LAN-ban az útválasztó nyomon követi a létrejött kapcsolatokat a /proc/net/ip_conntrack helyen, így tudja, hová küldje vissza az internetről érkező választ.

A kimenetnek csak egy része:

cat /proc/net/ip_conntrack

látható a következő képernyőképen.

Ahol kiemelve van a csomagok eredete (az openSUSE doboz privát IP-címe) és a rendeltetési helye (Google DNS). Ez lett a futás eredménye:

curl linux-console.net

az openSUSE dobozon.

Amint azt már biztosan sejti, a router a Google 8.8.8.8-as verzióját használja névszerverként, ami megmagyarázza, hogy a kimenő csomagok célpontja miért pont erre a címre mutat.

Megjegyzés: Az internetről bejövő csomagokat csak akkor fogadjuk el, ha azok egy már létrehozott kapcsolat részét képezik (2. parancs), míg a kimenő csomagok engedélyezettek „szabad kilépés ” (3. parancs).

Ne felejtse el állandósítani az iptables-szabályokat a sorozat 8. részében – Az Iptables tűzfal konfigurálása című részben leírt lépéseket követve.

Dinamikus útválasztás Quaggával

Manapság a Linuxban a dinamikus útválasztáshoz leggyakrabban használt eszköz a quagga. Lehetővé teszi a rendszergazdák számára, hogy egy viszonylag alacsony költségű Linux-kiszolgálóval ugyanazokat a funkciókat valósítsák meg, amelyeket a nagy teljesítményű (és költséges) Cisco útválasztók biztosítanak.

Az eszköz maga nem kezeli az útválasztást, hanem módosítja a kernel útválasztási tábláját, mivel új, legjobb útvonalakat tanul meg a csomagok kezelésére.

Mivel ez egy zebravilla, egy olyan program, amelynek fejlesztése egy ideje leállt, történelmi okokból ugyanazokat a parancsokat és szerkezetet tartja fenn, mint a zebra. Ezért ettől kezdve sok utalást fog látni a zebrára.

Felhívjuk figyelmét, hogy a dinamikus útválasztást és az összes kapcsolódó protokollt nem lehet egyetlen cikkben lefedni, de biztos vagyok benne, hogy az itt bemutatott tartalom kiindulópontként szolgál majd az építkezéshez.

Quagga telepítése Linux alatt

A quagga telepítéséhez a választott disztribúcióra:

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

Ugyanazt a környezetet fogjuk használni, mint a 3. példában, azzal az egyetlen különbséggel, hogy az eth0 egy 192.168.0.1 IP-című főátjáró útválasztóhoz csatlakozik.

Ezután szerkessze a /etc/quagga/daemons fájlt a következővel:

zebra=1
ripd=1

Most hozza létre a következő konfigurációs fájlokat.

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

és adja hozzá ezeket a sorokat (cserélje ki az Ön által választott gazdagépnevet és jelszót):

service quagga restart
hostname    	dev2
password    	quagga
service quagga restart

Megjegyzés: A ripd.conf a Routing Information Protocol konfigurációs fájlja, amely az útválasztót tájékoztatja arról, hogy mely hálózatok használhatók. elérte és milyen messze vannak (a komló mennyiségét tekintve).

Vegye figyelembe, hogy ez csak egy a quaggával együtt használható protokollok közül, és ezt választottam ehhez az oktatóanyaghoz a könnyű használhatóság miatt, valamint azért, mert a legtöbb hálózati eszköz támogatja, bár hátránya, hogy a hitelesítő adatokat egyszerű szövegben adja át. Emiatt megfelelő engedélyeket kell hozzárendelnie a konfigurációs fájlhoz:

chown quagga:quaggavty /etc/quagga/*.conf
chmod 640 /etc/quagga/*.conf 
5. példa: A quagga beállítása az IP-forgalom dinamikus irányítására

Ebben a példában a következő beállítást fogjuk használni két útválasztóval (ügyeljen arra, hogy létrehozza a 2. útválasztó konfigurációs fájljait a korábban leírtak szerint):

Fontos: Ne felejtse el megismételni a következő beállítást mindkét útválasztónál.

Csatlakozzon a zebrához (a 2601 porton figyel), amely a logikai közvetítő az útválasztó és a kernel között:

telnet localhost 2601

Írja be a /etc/quagga/zebra.conf fájlban beállított jelszót, majd engedélyezze a konfigurációt:

enable
configure terminal

Adja meg az egyes hálózati kártyák IP-címét és hálózati maszkját:

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

Most csatlakoznunk kell a RIP démon terminálhoz (2602-es port):

telnet localhost 2602

Írja be az /etc/quagga/ripd.conf fájlban beállított felhasználónevet és jelszót, majd írja be félkövérrel a következő parancsokat (az egyértelműség kedvéért megjegyzések vannak hozzáadva):

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.

Megjegyzés: A konfiguráció mindkét esetben hozzá lesz fűzve azokhoz a sorokhoz, amelyeket korábban hozzáadtunk (/etc/quagga/zebra.conf és < b>/etc/quagga/ripd.conf).

Végül csatlakozzon ismét a zebra szolgáltatáshoz mindkét útválasztón, és figyelje meg, hogy mindegyikük hogyan „tanulta meg” az útvonalat a másik mögött lévő hálózathoz, és melyik a következő ugrás ahhoz, hogy odaérjen. hálózaton a show ip route parancs futtatásával:

show ip route

Ha különböző protokollokat vagy beállításokat szeretne kipróbálni, további dokumentációért keresse fel a Quagga projekt webhelyét.

Következtetés

Ebben a cikkben elmagyaráztuk, hogyan állíthat be statikus és dinamikus útválasztást egy Linux box router(ek) használatával. Nyugodtan adjon hozzá annyi útválasztót, amennyit csak szeretne, és kísérletezzen, amennyit csak akar. Ha bármilyen észrevétele vagy kérdése van, forduljon hozzánk bizalommal az alábbi kapcsolatfelvételi űrlap segítségével.