Wéi een Linux Server an e Router ëmwandelt fir de Traffic statesch an dynamesch ze behandelen - Deel 10


Wéi mir an de fréiere Tutorials vun dëser LFCE (Linux Foundation Certified Engineer) Serie virausgesot hunn, wäerte mir an dësem Artikel d'Routing vum IP-Traffic statesch an dynamesch mat spezifesche Applikatiounen diskutéieren.

Éischt Saache fir d'éischt, loosst eis e puer Definitiounen direkt kréien:

  1. An einfache Wierder, e Paket ass d'Basis Eenheet déi benotzt gëtt fir Informatioun an engem Netzwierk ze vermëttelen. Netzwierker, déi TCP/IP als Netzwierkprotokoll benotzen, verfollegen déiselwecht Reegele fir d'Transmissioun vun Daten: déi aktuell Informatioun gëtt a Päck opgedeelt, déi souwuel aus Daten wéi och vun der Adress gemaach ginn, wou se geschéckt ginn soll.
  2. Routing ass de Prozess vum \guidéieren d'Donnéeë vu Quell op Destinatioun an engem Netzwierk.
  3. Statesch Routing erfuerdert eng manuell konfiguréiert Rei vu Regelen, déi an enger Routing-Tabelle definéiert sinn. Dës Regele si fixéiert a gi benotzt fir de Wee ze definéieren wéi e Paket muss duerchgoe wéi et vun enger Maschinn op déi aner reest.
  4. Dynamic Routing, oder Smart Routing (wann Dir wëllt), bedeit datt de System automatesch, wéi néideg, d'Route kann änneren, déi e Paket verfollegt.

Fortgeschratt IP an Netzwierk Gerät Konfiguratioun

De Paket iproute bitt e Set vun Tools fir d'Vernetzung an d'Verkéierskontroll ze managen, déi mir an dësem Artikel benotze well se den Ersatz vun legacy Tools representéieren wéi ifconfig an route.

Den zentrale Utility an der iproute Suite gëtt einfach ip genannt. Seng Basis Syntax ass wéi follegt:

# ip object command

Wou Objet nëmmen ee vun de folgende ka sinn (nëmmen déi heefegst Objete ginn ugewisen - Dir kënnt op Mann ip fir eng komplett Lëscht referenzéieren):

  1. Link: Netzwierkapparat.
  2. addr: Protokoll (IP oder IPv6) Adress op engem Apparat.
  3. Route: Routing-Tabelle Entrée.
  4. Regel: Regel an der Routing Politik Datebank.

Wärend Kommando eng spezifesch Handlung duerstellt, déi um Objet ausgefouert ka ginn. Dir kënnt de folgende Kommando ausféieren fir déi komplett Lëscht vu Kommandoen ze weisen, déi op e bestëmmten Objet applizéiert kënne ginn:

# ip object help

Zum Beispill,

# ip link help

D'Bild hei uewen weist, zum Beispill, datt Dir de Status vun engem Netzwierk-Interface mat dem folgenden Kommando änneren kann:

# ip link set interface {up | down}

Fir sou méi Beispiller vum 'ip' Kommando, liesen 10 Nëtzlech 'ip' Kommandoen fir d'IP Adress ze konfiguréieren

An dësem Beispill wäerte mir eth1 deaktivéieren an aktivéieren:

# ip link show
# ip link set eth1 down
# ip link show

Wann Dir eth1 nei aktivéiere wëllt,

# ip link set eth1 up

Amplaz all d'Netzwierkschnëttplazen ze weisen, kënne mir ee vun hinnen spezifizéieren:

# ip link show eth1

Wat all d'Informatiounen fir eth1 zréckginn.

Dir kënnt Är aktuell Haaptroutingtabelle mat engem vun den folgenden 3 Kommandoen kucken:

# ip route show
# route -n
# netstat -rn

Déi éischt Kolonn am Ausgang vun den dräi Kommandoen weist d'Zilnetzwierk un. Den Output vun ip Route weist (no dem Schlësselwuert dev) präsentéiert och d'Netzgeräter, déi als physesch Paart fir dës Netzwierker déngen.

Obwuel hautdesdaags de ip Kommando iwwer d'Route bevorzugt ass, kënnt Dir nach ëmmer op Mann ip-route an man route bezéien fir eng detailléiert Erklärung vum Rescht vun de Sailen.

Mir wëllen icmp (ping) Pakete vun dev2 op dev4 routen an och ëmgedréint (Notéiert datt béid Clientmaschinnen op verschiddene Netzwierker sinn). Den Numm vun all NIC, zesumme mat senger entspriechender IPv4 Adress, gëtt bannent véiereckege Klammeren uginn.

Eis Testëmfeld ass wéi follegt:

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

Loosst eis d'Routing-Tabelle an dev1 (CentOS Këscht) kucken:

# ip route show

a ännert se dann fir säin enp0s3 NIC an d'Verbindung op 192.168.0.15 ze benotzen fir Zougang zu Hosten am 10.0.0.0/24 Netz ze kréien:

# ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

Wat am Wesentlechen liest, Füügt e Wee an den 10.0.0.0/24 Netzwierk duerch d'enp0s3 Netzwierk Interface mat 192.168.0.15 als Paart.

Ähnlech an dev4 (openSUSE Box) fir Ping Hosten am 192.168.0.0/24 Netzwierk:

# ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

Schlussendlech musse mir d'Forwarding an eisem Debian Router aktivéieren:

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

Loosst eis elo pingelen:

an,

Fir dës Astellungen iwwer Stiwwelen persistent ze maachen, editéiert /etc/sysctl.conf um Router a vergewëssert Iech datt d'net.ipv4.ip_forward Variabel op richteg ass wéi follegt:

net.ipv4.ip_forward = 1

Zousätzlech konfiguréieren d'NICs op béide Clienten (kuckt no der Konfiguratiounsdatei bannent /etc/sysconfig/network op openSUSE an /etc/sysconfig/network-scripts op CentOS - a béide Fäll gëtt et ifcfg-enp0s3 genannt).

Hei ass d'Konfiguratiounsdatei aus der openSUSE Këscht:

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

En anere Szenario wou eng Linux Maschinn als Router benotzt ka ginn ass wann Dir Är Internetverbindung mat engem privaten LAN deele musst.

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

Zousätzlech fir d'Packet Forwarding an d'statesch Routingtabel am Client opzestellen wéi am virege Beispill, musse mir e puer iptables Regelen am Router addéieren:

# 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

Den éischte Kommando füügt eng Regel un d'Kette POSTROUTING an der nat (Network Address Translation) Tabelle, wat beweist datt den eth0 NIC soll fir erausginn Packagen benotzt ginn.

MASQUERADE weist datt dësen NIC eng dynamesch IP huet an datt ier de Package un d'wëll Wild Welt vum Internet geschéckt gëtt, muss déi privat Quelladress vum Paket geännert ginn op déi vun der ëffentlecher IP vum Router.

An engem LAN mat villen Hosten hält de Router op etabléiert Verbindungen an /proc/net/ip_conntrack, sou datt et weess wou d'Äntwert vum Internet zréckgeet.

Nëmmen en Deel vun der Ausgab vun:

# cat /proc/net/ip_conntrack

gëtt am folgenden Screenshot gewisen.

Wou d'Origine (privat IP vun openSUSE Box) an Destinatioun (Google DNS) vu Pakete markéiert ass. Dëst war d'Resultat vum Lafen:

# curl linux-console.net

op der openSUSE Këscht.

Wéi ech sécher sinn, kënnt Dir scho roden, benotzt de Router Google's 8.8.8.8 als Nummserver, wat erkläert firwat d'Destinatioun vun erausginn Paketen op dës Adress weist.

Bemierkung: Dass erakommen Pakete vum Internet nëmmen akzeptéiert ginn ass wann se Deel vun enger scho etabléierter Verbindung sinn (Kommando #2), während erausginn Pakete \gratis Sortie erlaabt sinn (Kommando #3).

Vergiesst net Är iptables Regelen persistent ze maachen no de Schrëtt, déi am Deel 8 skizzéiert sinn - Iptables Firewall vun dëser Serie konfiguréieren.

Dynamesch Routing mat Quagga

Hautdesdaags ass dat Tool am meeschte benotzt fir dynamesch Routing am Linux quagga. Et erlaabt System Administrateuren ze realiséieren, mat engem relativ bëlleg Linux Server, déi selwecht Funktionalitéit datt duerch mächteg (an deier) Cisco Router gëtt.

D'Tool selwer handhabt net d'Routing, mee ännert éischter d'Kernel Routing Tabelle wéi et nei bescht routes léiert fir Päck ze handhaben.

Well et eng Gabel vun Zebra ass, e Programm deem seng Entwécklung virun enger Zäit opgehalen huet, hält et aus historesche Grënn déiselwecht Kommandoen a Struktur wéi Zebra. Dofir gesitt Dir vill Referenzen op Zebra vun dësem Punkt un.

Notéiert w.e.g. datt et net méiglech ass dynamesch Routing an all déi verbonne Protokoller an engem eenzegen Artikel ze decken, awer ech sinn zouversiichtlech datt den Inhalt deen hei presentéiert gëtt als Startpunkt fir Iech opzebauen.

Fir Quagga op Ärer gewielter Verdeelung z'installéieren:

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

Mir wäerten déi selwecht Ëmwelt benotzen wéi mat Beispill # 3, mat der eenzeg Differenz dass eth0 zu engem Haapt Paart Router mat IP verbonne ass 192.168.0.1.

Als nächst, editéiert /etc/quagga/daemons mat,

zebra=1
ripd=1

Erstellt elo déi folgend Konfiguratiounsdateien.

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

a füügt dës Zeilen derbäi (ersetzt fir e Hostnumm a Passwuert vun Ärer Wiel):

service quagga restart
hostname    	dev2
password    	quagga
# service quagga restart

Bemierkung: Dat ripd.conf ass d'Konfiguratiounsdatei fir de Routing-Informatiounsprotokoll, deen dem Router d'Informatioun liwwert, wéi eng Netzwierker erreecht kënne ginn a wéi wäit (a punkto Quantitéit vun Hopp) si sinn.

Bedenkt datt dëst nëmmen ee vun de Protokoller ass, déi zesumme mat Quagga benotzt kënne ginn, an ech hunn et fir dësen Tutorial gewielt wéinst der Einfachheet vun der Benotzung a well déi meescht Netzwierkapparater et ënnerstëtzen, obwuel et den Nodeel huet, Umeldungsinformatiounen am Kloertext ze passéieren. Aus deem Grond musst Dir déi richteg Permissiounen un d'Konfiguratiounsdatei zouginn:

# chown quagga:quaggavty /etc/quagga/*.conf
# chmod 640 /etc/quagga/*.conf 

An dësem Beispill benotze mir de folgende Setup mat zwee Router (vergewëssert Iech d'Konfiguratiounsdateien fir Router #2 ze kreéieren wéi virdru erkläert):

Wichteg: Vergiesst net déi folgend Konfiguratioun fir béid Router ze widderhuelen.

Connect to Zebra (lauschtert um Hafen 2601), wat de logesche Tëschestatioun tëscht dem Router an dem Kernel ass:

# telnet localhost 2601

Gitt d'Passwuert an dat an der /etc/quagga/zebra.conf Datei agestallt gouf an dann d'Konfiguratioun aktivéieren:

enable
configure terminal

Gitt d'IP Adress an d'Netzmaske vun all NIC an:

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

Elo musse mir mam RIP Daemon Terminal (Port 2602) verbannen:

# telnet localhost 2602

Gitt de Benotzernumm a Passwuert wéi an der /etc/quagga/ripd.conf Datei konfiguréiert a gitt dann déi folgend Befehle fett fett (Kommentaren gi fir d'Klärheet bäigefüügt):

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.

Bemierkung: datt a béide Fäll d'Konfiguratioun op d'Linnen bäigefüügt gëtt, déi mir virdru bäigefüügt hunn (/etc/quagga/zebra.conf an /etc/quagga/ripd.conf) .

Endlech, verbënnt nach eng Kéier mam Zebra Service op béide Router a notéiert wéi jidderee vun hinnen \geléiert de Wee zum Netz deen hannert deem aneren ass, an deen den nächsten Hop ass fir op ze kommen. dat Netzwierk, andeems Dir de Kommando IP Route weisen ausféiert:

# show ip route

Wann Dir verschidde Protokoller oder Astellunge wëllt probéieren, kënnt Dir op de Quagga Projet Site fir weider Dokumentatioun verweisen.

Conclusioun

An dësem Artikel hu mir erkläert wéi een statesch an dynamesch Routing opstellt, mat engem Linux Box Router(en). Fillt Iech gratis sou vill Router ze addéieren wéi Dir wëllt, an experimentéiert sou vill wéi Dir wëllt. Zéckt net fir bei eis zréck ze kommen andeems Dir de Kontaktformular hei drënner benotzt wann Dir Kommentarer oder Froen hutt.