Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung Letzte Überarbeitung Beide Seiten der Revision | ||
routing [2018/02/18 19:30] admin |
routing [2018/02/19 21:12] admin |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Routing ====== | ====== Routing ====== | ||
- | * [[https://de.wikipedia.org/wiki/Classless_Inter-Domain_Routing|CIDR]] | + | * [[http://blog.noviantech.com/2010/12/ |
- | ===== Nützliche Programme ===== | + | |
- | Man kann sich zahlreicher Tools bedienen, die teilweise die gleichen Funktionen | + | |
- | erfüllen können. Hier werden einige vorgestellt.\\ | + | |
- | + | ||
- | ===== Packet forwarding einschalten ===== | + | |
- | Damit ein Router überhaupt als solcher funktionieren kann, muss packet | + | |
- | forwarding eingeschaltet werden: | + | |
+ | ===== ip Befehl ===== | ||
+ | Mit dem '' | ||
+ | ==== IP-Adressen ==== | ||
+ | === IP-Adressen anzeigen === | ||
+ | < | ||
+ | ip a # Abkürzung für ip addr | ||
+ | </ | ||
- | ==== netstat ==== | + | === IP-Adresse hinzufügen |
- | Das Programm '' | + | Bei der Vergabe von IP-Adressen muss die Subnetzmaske in der CIDR-Notation |
- | werden: | + | angegeben werden, sonst wird angenommen, dass ein '' |
+ | einzigen Host verwendet wird. Falls nur eine Netzwerkkarte angeschlossen ist, | ||
+ | muss das Interface nicht angegeben | ||
< | < | ||
- | apt-get install net-tools | + | ip a add 10.0.100.1/ |
</ | </ | ||
- | Damit kann man sich die Routing-Tabelle anzeigen lassen: | + | === IP-Adresse entfernen === |
< | < | ||
- | netstat -r | + | ip a del 10.0.100.1/24 dev enp1s0 |
- | ------------------------------------------------------------------- | + | |
- | Kernel-IP-Routentabelle | + | |
- | Ziel Router | + | |
- | default | + | |
- | 10.0.2.0 | + | |
- | link-local | + | |
</ | </ | ||
- | Einen ähnlichen Output liefert das '' | + | ==== Routen ==== |
+ | === Routen anzeigen === | ||
< | < | ||
- | route | + | ip r # Abkürzung für ip route |
- | ------------------------------------------------------------------- | + | |
- | Kernel-IP-Routentabelle | + | |
- | Ziel Router | + | |
- | default | + | |
- | 10.0.2.0 | + | |
- | link-local | + | |
</ | </ | ||
- | + | === Route hinzufügen === | |
- | ===== Routen | + | So kann man eine Default-Route über das Gateway '' |
- | ==== ip route ==== | + | |
< | < | ||
+ | ip r add default via 10.0.100.1 dev enp1s0 | ||
</ | </ | ||
- | ===== Routen löschen ===== | + | So fügt man eine Route zu dem '' |
- | ===== Routen anzeigen ===== | + | '' |
- | ==== ip route ==== | + | |
< | < | ||
- | ip route | + | ip r add 10.0.200.0/24 via 10.0.200.1 dev enp1s0 |
- | ------------------------------------------------------------------- | + | |
- | default via 10.0.2.2 dev enp0s3 | + | |
- | 10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 | + | |
- | 169.254.0.0/ | + | |
</ | </ | ||
- | + | === Route löschen | |
- | ==== ip route ==== | + | So kann man eine '' |
- | ===== NETLAB Test-Setup ===== | + | kann, braucht |
- | ==== line-Topologie ==== | + | <code|user@host:~#> |
- | Um eine line-Topologie zwischen Routern einzurichten, | + | ip r del default |
- | Netzwerkkarte besitzen und alle an einem switch angeschlossen sind, benötigt | + | |
- | man ein paar Dinge: | + | |
- | * / | + | |
- | * zwei IP-Adressen pro Interface | + | |
- | * NAT muss eingerichtet sein | + | |
- | * nftables | + | |
- | * einen Gateway nach außen | + | |
- | Dabei | + | |
- | + | ||
- | ==== NAT mit nftables ==== | + | |
- | * [[http:// | + | |
- | + | ||
- | ==== mehrere IP-Adressen auf einem Interface ==== | + | |
- | * [[https:// | + | |
- | + | ||
- | ==== router ==== | + | |
- | <code> | + | |
- | ip a | + | |
- | ------------------------------------------------------------------- | + | |
- | default | + | |
- | 10.0.100.0/ | + | |
- | 134.99.246.0/ | + | |
</ | </ | ||
- | < | + | So kann man die Route zu dem Netzwerk '' |
- | ip r | + | '' |
- | ------------------------------------------------------------------- | + | <code|user@host: |
- | default via 134.99.246.1 dev enp0s7 onlink | + | ip r del 10.0.200.0/24 via 10.0.200.1 |
- | 10.0.100.0/24 dev enp1s6 proto kernel scope link src 10.0.100.1 | + | |
- | 134.99.246.0/ | + | |
- | </ | + | |
- | < | + | |
- | ip a add 10.0.1.0/31 dev enp1s6 | + | |
</ | </ | ||
- | ==== host1 ==== | + | ===== nft Befehl ===== |
- | < | + | '' |
- | ip a | + | ist der Nachfolger von '' |
- | ------------------------------------------------------------------- | + | filtering verwendet. |
- | 10.0.101.0/24 dev enp1s0 proto kernel scope link src 10.0.101.1 | + | * [[https:// |
+ | * [[https:// | ||
+ | Wir benötigen diesen Befehl hauptsächlich um | ||
+ | [[https:// | ||
+ | Routern zu betreiben. | ||
+ | ==== NAT einrichten ==== | ||
+ | Zunächst wird eine neue Tabelle '' | ||
+ | < | ||
+ | nft add table nat | ||
+ | nft add chain nat prerouting { type nat hook prerouting priority 0 \; } | ||
+ | nft add chain nat postrouting { type nat hook postrouting priority 0 \; } | ||
</ | </ | ||
- | < | + | Auf diese Weise soll nun '' |
- | ip r | + | liest: " |
- | ------------------------------------------------------------------- | + | verdauen, wenn man dazu " |
- | 10.0.101.0/ | + | folgende '' |
+ | <code|user@host: | ||
+ | nft add rule nat postrouting | ||
+ | |_______________| |________| |_________________| | ||
+ | | | | | ||
+ | nimm diesen Source-Addressbereich-----+ | | ||
+ | | ||
+ | und übersetze ihn am ausgehenden interface-----------+ | | ||
+ | | ||
+ | zu dieser Adresse, die dann als Source-Adresse stehen soll---------+ | ||
</ | </ | ||
- | < | + | Falls man nun doch die Adressen und Netzwerke durcheinander gebracht hat, kann |
- | ip a add 10.0.1.1/31 dev enp1s0 | + | man die chain '' |
- | ip a add 10.0.2.0/31 dev enp1s0 | + | <code|user@host: |
+ | nft flush chain ip nat postrouting | ||
</ | </ | ||
- | < | + | Dann kann man sich das entstandene '' |
- | ip route add default via 10.0.1.1 dev enp1s0 | + | <code|user@host: |
+ | nft list ruleset | ||
</ | </ | ||
- | + | Und für die Ewigkeit in Datei schreiben, damit es auch einen Reboot überlebt: | |
- | ==== host2 ==== | + | <code|user@host: |
- | < | + | nft list ruleset > /etc/ |
- | ip a | + | |
- | ------------------------------------------------------------------- | + | |
- | 10.0.102.0/24 dev enp1s0 proto kernel scope link src 10.0.102.1 | + | |
</ | </ | ||
- | < | + | Falls man Veränderungen in der Datei ''/ |
- | ip a add 10.0.2.1/31 dev enp1s0 | + | dann wirksam werden, muss der '' |
+ | <code|user@host: | ||
+ | systemctl restart nftables | ||
</ | </ | ||
- | < | + | |
- | ip route add default via 10.0.2.1 dev enp1s0 | + | ===== Welche Netzwerkkarte ist physisch verbunden? ===== |
+ | * [[https:// | ||
+ | Das geht leicht mit diesem befehl: | ||
+ | <code|user@host: | ||
+ | grep "" | ||
+ | /code> | ||
+ | |||
+ | ===== Packet forwarding einschalten ===== | ||
+ | Damit ein Router überhaupt als solcher funktionieren kann, muss packet | ||
+ | forwarding eingeschaltet werden. Das kann man indem man die Datei | ||
+ | ''/ | ||
+ | auskommentiert oder indem man diesen Einzeiler ausführt: | ||
+ | < | ||
+ | sed -i '/ | ||
</ | </ | ||
+ | So kann man es ausschalten: | ||
+ | < | ||
+ | sed -i '/ | ||
+ | </ | ||
+ | |||
+ | ===== NETLAB Test-Setup line-Topologie ===== | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== router ==== | ||
+ | < | ||
+ | source / | ||
+ | |||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | # The primary network interface | ||
+ | allow-hotplug enp0s7 | ||
+ | iface enp0s7 inet static | ||
+ | address 134.99.246.151 | ||
+ | netmask 255.255.255.0 | ||
+ | gateway 134.99.246.1 | ||
+ | |||
+ | # The secondary network interface | ||
+ | allow-hotplug enp1s6 | ||
+ | iface enp1s6 inet static | ||
+ | address 10.0.1.0 | ||
+ | netmask 255.255.255.254 | ||
+ | up ip route add 10.0.0.0/16 via 10.0.1.1 dev enp1s6 | ||
+ | down ip route del 10.0.0.0/16 via 10.0.1.1 dev enp1s6 | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | table ip nat { | ||
+ | chain post { | ||
+ | type nat hook postrouting priority 0; policy accept; | ||
+ | ip saddr 10.0.1.1 oif " | ||
+ | } | ||
+ | } | ||
+ | table inet filter { | ||
+ | chain input { | ||
+ | type filter hook input priority 0; policy accept; | ||
+ | } | ||
+ | chain forward { | ||
+ | type filter hook forward priority 0; policy accept; | ||
+ | } | ||
+ | chain output { | ||
+ | type filter hook output priority 0; policy accept; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== host1 ==== | ||
+ | < | ||
+ | source / | ||
+ | |||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | # The primary network interface | ||
+ | allow-hotplug enp1s0 | ||
+ | iface enp1s0 inet static | ||
+ | address 10.0.1.1 | ||
+ | netmask 255.255.255.254 | ||
+ | gateway 10.0.1.0 | ||
+ | |||
+ | allow-hotplug enp1s0 | ||
+ | iface enp1s0 inet static | ||
+ | address 10.0.2.0 | ||
+ | netmask 255.255.255.254 | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | table ip nat { | ||
+ | chain post { | ||
+ | type nat hook postrouting priority 0; policy accept; | ||
+ | ip saddr 10.0.2.1 oif " | ||
+ | } | ||
+ | } | ||
+ | table inet filter { | ||
+ | chain input { | ||
+ | type filter hook input priority 0; policy accept; | ||
+ | } | ||
+ | chain forward { | ||
+ | type filter hook forward priority 0; policy accept; | ||
+ | } | ||
+ | chain output { | ||
+ | type filter hook output priority 0; policy accept; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== host2 ==== | ||
+ | < | ||
+ | source / | ||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | # The primary network interface | ||
+ | allow-hotplug enp1s0 | ||
+ | iface enp1s0 inet static | ||
+ | address 10.0.2.1 | ||
+ | netmask 255.255.255.254 | ||
+ | gateway 10.0.2.0 | ||
+ | </ | ||