Kako pretvoriti Linux server u ruter koji će upravljati prometom statički i dinamički - 10. dio


Kao što smo i predvidjeli u prethodnim tutorijalima ove serije LFCE (Linux Foundation Certified Engineer), u ovom članku ćemo raspravljati o statičnom i dinamičkom rutiranju IP saobraćaja sa specifičnim aplikacijama.

Predstavljamo program sertifikacije Linux Foundation

Prvo, prvo da razjasnimo neke definicije:

  1. Jednostavnim riječima, paket je osnovna jedinica koja se koristi za prijenos informacija unutar mreže. Mreže koje koriste TCP/IP kao mrežni protokol slijede ista pravila za prijenos podataka: stvarne informacije se dijele na pakete koji se sastoje i od podataka i od adrese na koju se trebaju poslati.
  2. Rutiranje je proces “vođenja” podataka od izvora do odredišta unutar mreže.
  3. Statičko usmjeravanje zahtijeva ručno konfiguriran skup pravila definiranih u tablici usmjeravanja. Ova pravila su fiksna i koriste se za definiranje načina na koji paket mora proći dok putuje od jednog stroja do drugog.
  4. Dinamičko usmjeravanje, ili pametno usmjeravanje (ako želite), znači da sistem može automatski promijeniti, prema potrebi, rutu koju paket prati.

Napredna IP i mrežna konfiguracija uređaja

Paket iproute pruža skup alata za upravljanje umrežavanjem i kontrolom saobraćaja koje ćemo koristiti u ovom članku jer predstavljaju zamjenu zastarjelih alata kao što su ifconfig i route.

Centralni uslužni program u iproute paketu se zove jednostavno ip. Njegova osnovna sintaksa je sljedeća:

ip object command

Gdje objekt može biti samo jedno od sljedećeg (prikazani su samo najčešći objekti – možete se obratiti man ip za kompletnu listu):

  1. link: mrežni uređaj.
  2. addr: adresa protokola (IP ili IPv6) na uređaju.
  3. route: unos u tablicu rutiranja.
  4. pravilo: pravilo u bazi podataka politike usmjeravanja.

Dok komanda predstavlja specifičnu akciju koja se može izvesti na objektu. Možete pokrenuti sljedeću naredbu da prikažete kompletnu listu naredbi koje se mogu primijeniti na određeni objekt:

ip object help

Na primjer,

ip link help

Gornja slika pokazuje, na primjer, da možete promijeniti status mrežnog sučelja pomoću sljedeće naredbe:

ip link set interface {up | down}

Za više takvih primjera naredbe 'ip' pročitajte 10 korisnih 'ip' naredbi za konfiguraciju IP adrese

Primer 1: Onemogućavanje i omogućavanje mrežnog interfejsa

U ovom primjeru ćemo onemogućiti i omogućiti eth1:

ip link show
ip link set eth1 down
ip link show

Ako želite ponovo omogućiti eth1,

ip link set eth1 up

Umjesto prikaza svih mrežnih sučelja, možemo odrediti jedno od njih:

ip link show eth1

Koji će vratiti sve informacije za eth1.

Primjer 2: Prikaz glavne tablice rutiranja

Možete pogledati svoju trenutnu glavnu tabelu usmjeravanja pomoću jedne od sljedeće 3 naredbe:

ip route show
route -n
netstat -rn

Prva kolona u izlazu tri naredbe označava ciljnu mrežu. Izlaz ip route show (prateći ključnu riječ dev) također predstavlja mrežne uređaje koji služe kao fizički prolaz do tih mreža.

Iako je danas naredba ip preferirana nad rutom, još uvijek možete pogledati man ip-route i man route za detaljno objašnjenje ostatka kolona.

Primjer 3: Upotreba Linux servera za usmjeravanje paketa između dvije privatne mreže

Želimo da usmerimo icmp (ping) pakete sa dev2 na dev4 i obrnuto (imajte na umu da su obe klijentske mašine na različitim mrežama). Ime svake NIC, zajedno sa odgovarajućom IPv4 adresom, dato je u uglastim zagradama.

Naše testno okruženje je sljedeće:

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

Pogledajmo tabelu rutiranja u dev1 (CentOS kutija):

ip route show

a zatim ga modificirajte kako biste koristili svoj enp0s3 NIC i vezu na 192.168.0.15 za pristup hostovima u mreži 10.0.0.0/24:

ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

Što u suštini glasi: “Dodajte rutu do 10.0.0.0/24 mreže kroz enp0s3 mrežni interfejs koristeći 192.168.0.15 kao gateway”.

Isto tako u dev4 (openSUSE box) za ping hostove u mreži 192.168.0.0/24:

ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

Konačno, moramo omogućiti prosljeđivanje u našem Debian ruteru:

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

Sada pingujmo:

i,

Da ove postavke budu trajne tijekom pokretanja, uredite /etc/sysctl.conf na ruteru i uvjerite se da je varijabla net.ipv4.ip_forward postavljena na true kako slijedi:

net.ipv4.ip_forward = 1

Osim toga, konfigurirajte NIC-ove na oba klijenta (potražite konfiguracijsku datoteku unutar /etc/sysconfig/network na openSUSE i /etc/sysconfig/network-scripts na CentOS-u – u oba slučaja se zove ifcfg-enp0s3).

Evo konfiguracijske datoteke iz openSUSE kutije:

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
Primjer 4: Upotreba Linux servera za usmjeravanje paketa između privatnih mreža i Interneta

Drugi scenario u kojem se Linux mašina može koristiti kao ruter je kada trebate podijeliti svoju internetsku vezu sa privatnim LAN-om.

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

Pored podešavanja prosljeđivanja paketa i statičke tablice usmjeravanja u klijentu kao u prethodnom primjeru, moramo dodati nekoliko iptables pravila u ruter:

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

Prva komanda dodaje pravilo lancu POSTROUTING u tabeli nat (Prevođenje mrežnih adresa), ukazujući da eth0 NIC treba koristiti za odlazne pakete.

MASQUERADE označava da ova NIC ima dinamički IP i da prije slanja paketa u “divlji svijet” interneta, privatna izvorna adresa paketa mora biti promijenjen na javni IP rutera.

U LAN-u sa mnogo hostova, ruter prati uspostavljene veze u /proc/net/ip_conntrack tako da zna gdje da vrati odgovor sa Interneta.

Samo dio rezultata:

cat /proc/net/ip_conntrack

je prikazano na sljedećem snimku ekrana.

Gdje je označeno porijeklo (privatna IP kutija openSUSE) i odredište (Google DNS) paketa. Ovo je bio rezultat trčanja:

curl linux-console.net

na kutiji openSUSE.

Kao što sam siguran da već možete pretpostaviti, ruter koristi Googleov 8.8.8.8 kao server imena, što objašnjava zašto odredište odlaznih paketa ukazuje na tu adresu.

Napomena: Dolazni paketi sa Interneta se prihvataju samo ako su dio već uspostavljene veze (komanda #2), dok su odlazni paketi dozvoljeni “slobodan izlaz ” (komanda #3).

Nemojte zaboraviti da vaša iptables pravila budu postojana slijedeći korake navedene u 8. dijelu – Konfigurirajte Iptables zaštitni zid ove serije.

Dinamičko usmjeravanje s Quagga

Danas je alat koji se najčešće koristi za dinamičko rutiranje u Linuxu quagga. Omogućava administratorima sistema da implementiraju, uz relativno jeftin Linux server, istu funkcionalnost koju pružaju moćni (i skupi) Cisco ruteri.

Alat sam po sebi ne upravlja usmjeravanjem, već modificira tablicu usmjeravanja kernela jer uči nove najbolje rute za rukovanje paketima.

Pošto je to fork of zebra, program čiji je razvoj prestao davno, on iz istorijskih razloga održava iste komande i strukturu kao i zebra. Zato ćete od ovog trenutka vidjeti mnogo referenci na zebru.

Imajte na umu da dinamičko usmjeravanje i sve povezane protokole nije moguće pokriti u jednom članku, ali sam uvjeren da će vam ovdje predstavljeni sadržaj poslužiti kao polazna tačka za nadogradnju.

Instalacija Quagga u Linux

Da instalirate quagga na odabranu distribuciju:

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

Koristićemo isto okruženje kao u Primeru #3, sa jedinom razlikom što je eth0 povezan sa glavnim gateway ruterom sa IP 192.168.0.1.

Zatim uredite /etc/quagga/daemons sa,

zebra=1
ripd=1

Sada kreirajte sljedeće konfiguracijske datoteke.

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

i dodajte ove redove (zamijenite za ime hosta i lozinku po vašem izboru):

service quagga restart
hostname    	dev2
password    	quagga
service quagga restart

Napomena: Taj ripd.conf je konfiguracijska datoteka za Routing Information Protocol, koji ruteru daje informacije o tome koje mreže mogu biti dosegnuti i koliko su (u smislu količine hmelja) udaljeni.

Imajte na umu da je ovo samo jedan od protokola koji se može koristiti uz quagga, a ja sam ga odabrao za ovaj tutorijal zbog jednostavnosti korištenja i zato što ga većina mrežnih uređaja podržava, iako ima nedostatak prosljeđivanja vjerodajnica u običnom tekstu. Iz tog razloga, morate dodijeliti odgovarajuće dozvole konfiguracijskoj datoteci:

chown quagga:quaggavty /etc/quagga/*.conf
chmod 640 /etc/quagga/*.conf 
Primjer 5: Postavljanje quagga za dinamičko usmjeravanje IP prometa

U ovom primjeru koristit ćemo sljedeće podešavanje sa dva rutera (pobrinite se da kreirate konfiguracijske datoteke za ruter #2 kao što je prethodno objašnjeno):

Važno: Ne zaboravite ponoviti sljedeće podešavanje za oba rutera.

Povežite se na zebru (slušanje na portu 2601), koji je logički posrednik između rutera i kernela:

telnet localhost 2601

Unesite lozinku koja je postavljena u datoteci /etc/quagga/zebra.conf, a zatim omogućite konfiguraciju:

enable
configure terminal

Unesite IP adresu i mrežnu masku svake NIC:

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

Sada se moramo povezati na RIP demon terminal (port 2602):

telnet localhost 2602

Unesite korisničko ime i lozinku kako je konfigurisano u datoteci /etc/quagga/ripd.conf, a zatim ukucajte sledeće komande podebljanim (komentari su dodati radi pojašnjenja):

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.

Napomena: da je u oba slučaja konfiguracija dodana linijama koje smo prethodno dodali (/etc/quagga/zebra.conf i < b>/etc/quagga/ripd.conf).

Konačno, ponovo se povežite sa zebra uslugom na oba rutera i zabilježite kako je svaki od njih "naučio" rutu do mreže koja je iza drugog i koji je sljedeći skok do toga mreže, pokretanjem naredbe show ip route:

show ip route

Ako želite isprobati različite protokole ili postavke, možda ćete htjeti pogledati stranicu projekta Quagga za dalju dokumentaciju.

Zaključak

U ovom članku smo objasnili kako postaviti statičko i dinamičko usmjeravanje, koristeći Linux box ruter(e). Slobodno dodajte onoliko rutera koliko želite i eksperimentirajte koliko god želite. Ne ustručavajte se da nam se vratite koristeći kontakt formu ispod ako imate bilo kakvih komentara ili pitanja.