Hoe u een Linux-server kunt omzetten in een router om verkeer statisch en dynamisch te verwerken – Deel 10

Zoals we al hebben aangekondigd in eerdere tutorials van deze LFCE (Linux Foundation Certified Engineer) serie, zullen we in dit artikel het routeren van IP-verkeer statisch en dynamisch bespreken met specifieke toepassingen.

Linux Foundation Certified Engineer – Part 10
Introductie van het Linux Foundation-certificeringsprogramma

Allereerst, laten we wat definities duidelijk maken:

  1. In simpele bewoordingen is een pakket de basiseenheid die wordt gebruikt om informatie binnen een netwerk te verzenden. Netwerken die TCP/IP als netwerkprotocol gebruiken, volgen dezelfde regels voor de overdracht van gegevens: de daadwerkelijke informatie wordt opgesplitst in pakketten die bestaan uit zowel gegevens als het adres waarnaar ze moeten worden verzonden.
  2. Routering is het proces van “begeleiden” van de gegevens van de bron naar de bestemming binnen een netwerk.
  3. Statische routering vereist een handmatig geconfigureerde set regels gedefinieerd in een routeringstabel. Deze regels zijn vast en worden gebruikt om de route te definiëren die een pakket moet volgen terwijl het van de ene machine naar de andere reist.
  4. Dynamische routering, of slimme routering (als je wilt), betekent dat het systeem automatisch, indien nodig, de route kan wijzigen die een pakket volgt.

Geavanceerde IP- en netwerkapparaatconfiguratie

De iproute pakket biedt een set tools om netwerken en verkeersbeheer te beheren die we gedurende dit artikel zullen gebruiken, aangezien ze de vervanging vormen van legacy-tools zoals ifconfig en route.

De centrale utility in de iproute-suite heet eenvoudigweg ip. De basisopmaak is als volgt:

# ip object command

Waar object slechts een van de volgende kan zijn (alleen de meest voorkomende objecten worden getoond – u kunt verwijzen naar man ip voor een complete lijst):

  1. link: netwerkapparaat.
  2. addr: protocol (IP of IPv6) adres op een apparaat.
  3. route: routetabelvermelding.
  4. rule: regel in de databank van het routeprofiel.

Waar commando een specifieke actie voorstelt die op het object kan worden uitgevoerd. U kunt het volgende commando uitvoeren om de volledige lijst met commando’s te tonen die op een specifiek object kunnen worden toegepast:

# ip object help

Bijvoorbeeld,

# ip link help
IP Command Help

De bovenstaande afbeelding toont bijvoorbeeld dat u de status van een netwerkinterface kunt wijzigen met het volgende commando:

# ip link set interface {up | down}

Voor meer voorbeelden van het ‘ip’-commando, lees 10 Nuttige ‘ip’-commando’s om IP-adres te configureren

Voorbeeld 1: Een netwerkinterface uitschakelen en inschakelen

In dit voorbeeld zullen we eth1 uitschakelen en inschakelen:

# ip link show
# ip link set eth1 down
# ip link show
Disable eth0 Interface

Als u eth1 opnieuw wilt inschakelen,

# ip link set eth1 up

In plaats van alle netwerkinterfaces weer te geven, kunnen we er een specifiëren:

# ip link show eth1

Wat alle informatie voor eth1 zal retourneren.

Voorbeeld 2: De hoofdroutetabel weergeven

U kunt uw huidige hoofdroutetabel bekijken met een van de volgende 3 commando’s:

# ip route show
# route -n
# netstat -rn
Check Linux Route Table

De eerste kolom in de output van de drie commando’s geeft het doelnetwerk aan. De output van ip route show (na het trefwoord dev) geeft ook de netwerkapparaten weer die dienen als fysieke gateway naar die netwerken.

Hoewel tegenwoordig de ip-opdracht de voorkeur heeft boven route, kunt u nog steeds verwijzen naar man ip-route en man route voor een gedetailleerde uitleg van de rest van de kolommen.

Voorbeeld 3: Het gebruik van een Linux-server om pakketten te routeren tussen twee privénetwerken

We willen icmp (ping) pakketten routeren van dev2 naar dev4 en andersom (let op dat beide clientmachines zich in verschillende netwerken bevinden). De naam van elke NIC, samen met het overeenkomstige IPv4-adres, staat tussen vierkante haken.

Onze testomgeving is als volgt:

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

Laten we de routetabel bekijken in dev1 (CentOS-box):

# ip route show

en vervolgens aanpassen om de enp0s3 NIC en de verbinding met 192.168.0.15 te gebruiken om hosts in het 10.0.0.0/24-netwerk te benaderen:

# ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

Wat in feite betekent: “Voeg een route toe naar het 10.0.0.0/24-netwerk via de netwerkinterface enp0s3 met gebruik van 192.168.0.15 als gateway”.

Route Network in Linux

Hetzelfde geldt voor dev4 (openSUSE-box) om hosts in het 192.168.0.0/24-netwerk te pingen:

# ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3
Network Routing in Linux

Tenslotte moeten we doorsturen inschakelen in onze Debian-router:

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

Nu laten we pingen:

Check Network Routing

en,

Route Ping Status

Om deze instellingen persistent te maken bij het opstarten, bewerk /etc/sysctl.conf op de router en zorg ervoor dat de net.ipv4.ip_forward-variabele is ingesteld op true zoals hieronder:

net.ipv4.ip_forward = 1

Bovendien, configureer de NIC’s op beide clients (zoek het configuratiebestand binnen /etc/sysconfig/network op openSUSE en /etc/sysconfig/network-scripts op CentOS – in beide gevallen heet het ifcfg-enp0s3).

Hier is het configuratiebestand van de openSUSE-box:

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
Voorbeeld 4: Het gebruik van een Linux-server om pakketten te routeren tussen een privénetwerk en het internet

Nog een scenario waarin een Linux-machine als router kan worden gebruikt, is wanneer je je internetverbinding moet delen met een privé-LAN.

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

Naast het instellen van packet forwarding en de statische routingtabel in de client zoals in het vorige voorbeeld, moeten we een paar iptables-regels toevoegen in de router:

# 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

Met het eerste commando wordt een regel toegevoegd aan de POSTROUTING-keten in de nat (Network Address Translation) tabel, waarbij wordt aangegeven dat de eth0 NIC moet worden gebruikt voor uitgaande pakketten.

MASQUERADE geeft aan dat deze NIC een dynamisch IP heeft en dat voordat het pakket naar de “wilde wilde wereld” van het internet wordt gestuurd, het privé-bronadres van het pakket moet worden gewijzigd naar dat van het openbare IP van de router.

In een LAN met veel hosts houdt de router bij welke gevestigde verbindingen er zijn in /proc/net/ip_conntrack, zodat het weet waar het antwoord van het internet naartoe moet worden gestuurd.

Alleen een deel van de uitvoer van:

# cat /proc/net/ip_conntrack

wordt getoond in de volgende schermafbeelding.

Route Packages in Linux

Waar de oorsprong (privé-IP van de openSUSE-box) en bestemming (Google DNS) van pakketten zijn gemarkeerd. Dit was het resultaat van het uitvoeren van:

# curl www.tecmint.com

op de openSUSE-box.

Zoals je waarschijnlijk al kunt raden, gebruikt de router Google’s 8.8.8.8 als nameserver, wat verklaart waarom de bestemming van uitgaande pakketten naar dat adres wijst.

Let op: Inkomende pakketten van internet worden alleen geaccepteerd als ze deel uitmaken van een reeds gevestigde verbinding (opdracht #2), terwijl uitgaande pakketten “vrij vertrek” hebben (opdracht #3).

Vergeet niet om je iptables-regels persistent te maken door de stappen te volgen zoals beschreven in Deel 8 – Iptables Firewall configureren van deze serie.

Dynamische routering met Quagga

Tegenwoordig is het meest gebruikte hulpmiddel voor dynamische routering in Linux quagga. Het stelt systeembeheerders in staat om met een relatief goedkope Linux-server dezelfde functionaliteit te implementeren die wordt geboden door krachtige (en dure) Cisco-routers.

Het hulpprogramma zelf handelt de routering niet af, maar past in plaats daarvan de kernelrouteringstabel aan terwijl het nieuwe beste routes leert om pakketten te verwerken.

Aangezien het een fork is van zebra, een programma waarvan de ontwikkeling een tijdje geleden is gestopt, behoudt het om historische redenen dezelfde opdrachten en structuur als zebra. Daarom zul je vanaf dit punt veel verwijzingen naar zebra zien.

Houd er rekening mee dat het niet mogelijk is om dynamische routering en alle gerelateerde protocollen in een enkel artikel te behandelen, maar ik ben ervan overtuigd dat de hier gepresenteerde inhoud zal dienen als startpunt voor verdere ontwikkeling.

Quagga installeren in Linux

Om Quagga te installeren op uw gekozen distributie:

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

We zullen dezelfde omgeving gebruiken als bij Voorbeeld #3, met als enige verschil dat eth0 is verbonden met een hoofdgatewayrouter met IP 192.168.0.1.

Bewerk vervolgens /etc/quagga/daemons met:

zebra=1
ripd=1

Maak nu de volgende configuratiebestanden aan.

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

en voeg deze regels toe (vervang voor een hostnaam en wachtwoord naar keuze):

service quagga restart
hostname    	dev2
password    	quagga
# service quagga restart
Start Quagga Service

Let op: Dat ripd.conf het configuratiebestand is voor het Routing Information Protocol, dat de router voorziet van informatie over welke netwerken kunnen worden bereikt en hoever ze zijn (in termen van aantal hops).

Merk op dat dit slechts een van de protocollen is die samen met Quagga kunnen worden gebruikt, en ik heb ervoor gekozen voor deze zelfstudie vanwege het gebruiksgemak en omdat de meeste netwerkapparaten het ondersteunen, hoewel het als nadeel heeft dat referenties in platte tekst worden doorgegeven. Om die reden moet u de juiste machtigingen toewijzen aan het configuratiebestand:

# chown quagga:quaggavty /etc/quagga/*.conf
# chmod 640 /etc/quagga/*.conf 
Voorbeeld 5: Het instellen van Quagga om IP-verkeer dynamisch te routeren

In dit voorbeeld zullen we de volgende opstelling gebruiken met twee routers (zorg ervoor dat u de configuratiebestanden voor router #2 aanmaakt zoals eerder uitgelegd):

Configure Quagga

Belangrijk: Vergeet niet de volgende opstelling te herhalen voor beide routers.

Verbind met zebra (luisterend op poort 2601), wat de logische tussenpersoon is tussen de router en de kernel:

# telnet localhost 2601

Voer het wachtwoord in dat is ingesteld in het bestand /etc/quagga/zebra.conf, en schakel vervolgens de configuratie in:

enable
configure terminal

Voer het IP-adres en het netwerkmasker van elke NIC in:

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

Nu moeten we verbinding maken met de RIP daemon-terminal (poort 2602):

# telnet localhost 2602

Voer de gebruikersnaam en het wachtwoord in zoals geconfigureerd in het bestand /etc/quagga/ripd.conf, en typ vervolgens de volgende commando’s vetgedrukt in (opmerkingen zijn toegevoegd ter verduidelijking):

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.
Enable Router

Let op: In beide gevallen wordt de configuratie toegevoegd aan de regels die we eerder hebben toegevoegd (/etc/quagga/zebra.conf en /etc/quagga/ripd.conf).

Verbind tot slot opnieuw met de zebra-service op beide routers en let op hoe elk van hen de route naar het netwerk achter de andere heeft “geleerd” en wat de volgende hop is om dat netwerk te bereiken, door het commando show ip route uit te voeren:

# show ip route
Check IP Routing

Als u verschillende protocollen of configuraties wilt proberen, kunt u voor verdere documentatie verwijzen naar de Quagga-projectwebsite.

Conclusie

In dit artikel hebben we uitgelegd hoe u statische en dynamische routing kunt opzetten met behulp van een Linuxboxrouter(s). Voel u vrij om zoveel routers toe te voegen als u wilt en zoveel te experimenteren als u wilt. Aarzel niet om contact met ons op te nemen via het onderstaande contactformulier als u opmerkingen of vragen heeft.

Source:
https://www.tecmint.com/setup-linux-as-router/