Kako pretvoriti Linux poslužitelj u usmjerivač za statički i dinamički rukovanje prometom - 10. dio


Kao što smo predvidjeli u prethodnim vodičima ove serije LFCE (Linux Foundation Certified Engineer), u ovom ćemo članku raspravljati o statičnom i dinamičkom usmjeravanju IP prometa s određenim aplikacijama.

Predstavljamo certifikacijski program Linux Foundation

Kao prvo, 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 u pakete koji se sastoje od podataka i adrese na koju se trebaju poslati.
  2. Usmjeravanje je proces “usmjeravanja” podataka od izvora do odredišta unutar mreže.
  3. Statično usmjeravanje zahtijeva ručno konfiguriran skup pravila definiranih u tablici usmjeravanja. Ta su pravila 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 sustav može automatski mijenjati, prema potrebi, rutu koju paket slijedi.

Napredna IP i konfiguracija mrežnog uređaja

Paket iproute pruža skup alata za upravljanje umrežavanjem i kontrolu prometa koje ćemo koristiti u ovom članku budući da oni predstavljaju zamjenu naslijeđenih alata kao što su ifconfig i route.

Središnji pomoćni program u paketu iproute naziva se 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 pogledati man ip za potpuni popis):

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

Dok naredba predstavlja specifičnu radnju koja se može izvesti na objektu. Možete pokrenuti sljedeću naredbu za prikaz cjelovitog popisa 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 sljedećom naredbom:

ip link set interface {up | down}

Za još takvih primjera naredbe ‘ip’, pročitajte 10 korisnih naredbi ‘ip’ za konfiguriranje IP adrese

Primjer 1: Onemogućavanje i omogućavanje mrežnog sučelja

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

ip link show
ip link set eth1 down
ip link show

Ako želite ponovno 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

Što će vratiti sve informacije za eth1.

Primjer 2: Prikaz glavne tablice usmjeravanja

Svoju trenutnu glavnu tablicu usmjeravanja možete vidjeti pomoću bilo koje od sljedeće 3 naredbe:

ip route show
route -n
netstat -rn

Prvi stupac u izlazu triju naredbi označava ciljanu mrežu. Izlaz ip route show (nakon ključne riječi dev) također predstavlja mrežne uređaje koji služe kao fizički pristupnik tim mrežama.

Iako se danas preferira ip naredba u odnosu na route, još uvijek možete pogledati man ip-route i man route za detaljno objašnjenje ostatka od stupaca.

Primjer 3: Korištenje Linux poslužitelja za usmjeravanje paketa između dvije privatne mreže

Želimo usmjeriti icmp (ping) pakete od dev2 do dev4 i obrnuto (imajte na umu da su oba klijentska računala na različitim mrežama). Naziv svake mrežne kartice, zajedno s pripadajućom IPv4 adresom, dat je unutar uglatih zagrada.

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 tablicu usmjeravanja u dev1 (kutija CentOS):

ip route show

a zatim ga modificirajte kako biste koristili njegov 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 mreži 10.0.0.0/24 preko mrežnog sučelja enp0s3 koristeći 192.168.0.15 kao pristupnik”.

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

ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

Na kraju, moramo omogućiti prosljeđivanje u našem Debian usmjerivaču:

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

Sada pingajmo:

i,

Kako bi ove postavke bile postojane tijekom pokretanja, uredite /etc/sysctl.conf na usmjerivaču i provjerite je li 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 zove se ifcfg-enp0s3).

Evo konfiguracijske datoteke iz openSUSE okvira:

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: Korištenje Linux poslužitelja za usmjeravanje paketa između privatnih mreža i Interneta

Drugi scenarij u kojem se Linux stroj može koristiti kao usmjerivač je kada trebate dijeliti svoju internetsku vezu s 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

Osim postavljanja prosljeđivanja paketa i statičke tablice usmjeravanja u klijentu kao u prethodnom primjeru, trebamo dodati nekoliko iptables pravila u usmjerivaču:

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 naredba dodaje pravilo u lanac POSTROUTING u nat (prijevod mrežne adrese) tablici, pokazujući da se eth0 NIC treba koristiti za odlazne pakete.

MASQUERADE označava da ovaj NIC ima dinamički IP i da prije slanja paketa u “divlji divlji svijet” interneta, privatna izvorna adresa paketa mora biti promijenio u javni IP usmjerivača.

U LAN-u s mnogo hostova, usmjerivač prati uspostavljene veze u /proc/net/ip_conntrack tako da zna kamo vratiti odgovor s Interneta.

Samo dio rezultata:

cat /proc/net/ip_conntrack

prikazan je na sljedećoj snimci zaslona.

Gdje je istaknuto porijeklo (privatni IP openSUSE okvira) i odredište (Google DNS) paketa. Ovo je bio rezultat trčanja:

curl linux-console.net

na openSUSE kutiji.

Siguran sam da već možete pogoditi, usmjerivač koristi Googleov 8.8.8.8 kao poslužitelj imena, što objašnjava zašto odredište odlaznih paketa upućuje na tu adresu.

Napomena: Dolazni paketi s Interneta prihvaćaju se samo ako su dio već uspostavljene veze (naredba #2), dok su odlazni paketi dopušteni “slobodan izlaz ” (naredba #3).

Ne zaboravite učiniti svoja iptables pravila postojanima slijedeći korake navedene u 8. dijelu – Konfiguracija Iptables vatrozida iz ove serije.

Dinamičko usmjeravanje s Quaggom

Alat koji se danas najviše koristi za dinamičko usmjeravanje u Linuxu je quagga. Omogućuje administratorima sustava implementaciju, s relativno jeftinim Linux poslužiteljem, iste funkcionalnosti koju pružaju snažni (i skupi) Cisco usmjerivači.

Sam alat ne upravlja usmjeravanjem, već modificira tablicu usmjeravanja kernela dok uči nove najbolje rute za rukovanje paketima.

Budući da je to fork of zebra, program čiji je razvoj davno prestao, iz povijesnih razloga održava iste naredbe i strukturu kao i zebra. Zato ćete od ovog trenutka vidjeti puno referenci na zebru.

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

Instaliranje Quagge u Linuxu

Za instaliranje quagge na odabranu distribuciju:

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

Koristit ćemo isto okruženje kao u primjeru #3, s jedinom razlikom da je eth0 spojen na glavni gateway usmjerivač s IP-om 192.168.0.1.

Zatim uredite /etc/quagga/daemons s,

zebra=1
ripd=1

Sada izradite sljedeće konfiguracijske datoteke.

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

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

service quagga restart
hostname    	dev2
password    	quagga
service quagga restart

Napomena: ripd.conf je konfiguracijska datoteka za Routing Information Protocol, koja usmjerivaču pruža informacije o tome koje mreže mogu biti dosegnuti i koliko su daleko (u smislu količine hmelja).

Imajte na umu da je ovo samo jedan od protokola koji se može koristiti zajedno s quaggom, a odabrao sam ga za ovaj vodič 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ća dopuštenja konfiguracijskoj datoteci:

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

U ovom primjeru koristit ćemo sljedeće postavke s dva usmjerivača (svakako izradite konfiguracijske datoteke za usmjerivač #2 kao što je prethodno objašnjeno):

Važno: Ne zaboravite ponoviti sljedeće postavke za oba usmjerivača.

Spojite se na zebru (osluškuje port 2601), koji je logičan 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 mrežne kartice:

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

Sada se moramo spojiti na RIP daemon terminal (port 2602):

telnet localhost 2602

Unesite korisničko ime i lozinku kako su konfigurirani u datoteci /etc/quagga/ripd.conf, a zatim upišite sljedeće naredbe podebljano (komentari su dodani 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 redovima koje smo prethodno dodali (/etc/quagga/zebra.conf i < b>/etc/quagga/ripd.conf).

Konačno, ponovno se povežite na zebra uslugu na oba usmjerivača i zabilježite kako je svaki od njih “naučio” rutu do mreže koja je iza drugoga 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 daljnju dokumentaciju.

Zaključak

U ovom smo članku objasnili kako postaviti statičko i dinamičko usmjeravanje, koristeći usmjerivač(e) za Linux okvir. Slobodno dodajte onoliko rutera koliko želite i eksperimentirajte koliko god želite. Ne ustručavajte se javiti nam se putem obrasca za kontakt u nastavku ako imate bilo kakvih komentara ili pitanja.