Benutzer-Werkzeuge

Webseiten-Werkzeuge


routing

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

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/22/debian-router-gateway-in-15-minutes/]]
-===== 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''-Befehl lassen sich viele Netzwerkeinstellungen manipulieren.
 +==== IP-Adressen ====
 +=== IP-Adressen anzeigen ===
 +<code|user@host:~#>
 +ip a # Abkürzung für ip addr
 +</code>
  
-==== netstat ==== +=== IP-Adresse hinzufügen === 
-Das Programm ''netstat'' kann mit dem Paket ''net-tools'' nachinstalliert +Bei der Vergabe von IP-Adressen muss die Subnetzmaske in der CIDR-Notation mit 
-werden:+angegeben werden, sonst wird angenommen, dass ein ''/32''-Netz mit nur einem 
 +einzigen Host verwendet wird. Falls nur eine Netzwerkkarte angeschlossen ist, 
 +muss das Interface nicht angegeben werden.
 <code|user@host:~#> <code|user@host:~#>
-apt-get install net-tools+ip a add 10.0.100.1/24 dev enp1s0
 </code> </code>
-Damit kann man sich die Routing-Tabelle anzeigen lassen:+=== IP-Adresse entfernen ===
 <code|user@host:~#> <code|user@host:~#>
-netstat -r +ip a del 10.0.100.1/24 dev enp1s0
-------------------------------------------------------------------- +
-Kernel-IP-Routentabelle +
-Ziel            Router          Genmask         Flags   MSS Fenster irtt Iface +
-default         10.0.2.2        0.0.0.0         UG        0 0          0 enp0s3 +
-10.0.2.0        0.0.0.0         255.255.255.0           0 0          0 enp0s3 +
-link-local      0.0.0.0         255.255.0.0             0 0          0 enp0s3+
 </code> </code>
  
-Einen ähnlichen Output liefert das ''route''-Kommando, welches bereits vorinstalliert sein sollte:+==== Routen ==== 
 +=== Routen anzeigen ===
 <code|user@host:~#> <code|user@host:~#>
-route +ip r # Abkürzung für ip route
-------------------------------------------------------------------- +
-Kernel-IP-Routentabelle +
-Ziel            Router          Genmask         Flags Metric Ref    Use Iface +
-default         10.0.2.2        0.0.0.0         UG    0      0        0 enp0s3 +
-10.0.2.0        0.0.0.0         255.255.255.0            0        0 enp0s3 +
-link-local      0.0.0.0         255.255.0.0         1000          0 enp0s3+
 </code> </code>
  
- +=== Route hinzufügen === 
-===== Routen hinzufügen ===== +So kann man eine Default-Route über das Gateway ''10.0.100.1'' hinzufügen:
-==== ip route ====+
 <code|user@host:~#> <code|user@host:~#>
 +ip r add default via 10.0.100.1 dev enp1s0
 </code> </code>
-===== Routen löschen ===== +So fügt man eine Route zu dem ''10.0.200.0/24''-Netzwerk über das Gateway 
-===== Routen anzeigen ===== +''10.0.200.1'' hinzu:
-==== ip route ====+
 <code|user@host:~#> <code|user@host:~#>
-ip route +ip r add 10.0.200.0/24 via 10.0.200.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/16 dev enp0s3 scope link metric 1000+
 </code> </code>
- +=== Route löschen === 
-==== ip route ==== +So kann man eine ''default''-Route löschen. Da es nur eine default-Route geben 
-===== NETLAB Test-Setup ===== +kannbraucht man kein Interface anzugeben. 
-==== line-Topologie ==== +<code|user@host:~#> 
-Um eine line-Topologie zwischen Routern einzurichten, die nur eine +ip r del default
-Netzwerkkarte besitzen und alle an einem switch angeschlossen sindbenötigt +
-man ein paar Dinge: +
-  * /31-Verbindungsnetze zwischen den Routern +
-    * zwei IP-Adressen pro Interface +
-  * NAT muss eingerichtet sein +
-    * nftables +
-  * einen Gateway nach außen +
-Dabei  +
- +
-==== NAT mit nftables ==== +
-  * [[http://computer-outlines.over-blog.com/article-nftables-6-a-nftables-linux-internet-gateway-123294152.html|Anleitung]] +
- +
-==== mehrere IP-Adressen auf einem Interface ==== +
-  * [[https://wiki.debian.org/NetworkConfiguration#Legacy_method|Debian-Wiki]] +
- +
-==== router ==== +
-<code+
-ip +
-------------------------------------------------------------------- +
-default via 134.99.246.1 dev enp0s7 onlink +
-10.0.100.0/24 dev enp1s6 proto kernel scope link src 10.0.100.1 +
-134.99.246.0/24 dev enp1s6 proto kernel scope link src 134.99.246.151+
 </code> </code>
-<code> +So kann man die Route zu dem Netzwerk ''10.0.200.0/24'' über das Gateway 
-ip r +''10.0.200.1'' löschen: 
-------------------------------------------------------------------- +<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 dev enp1s0
-10.0.100.0/24 dev enp1s6 proto kernel scope link src 10.0.100.1 +
-134.99.246.0/24 dev enp0s7 proto kernel scope link src 134.99.246.151 +
-</code> +
-<code> +
-ip a add 10.0.1.0/31 dev enp1s6+
 </code> </code>
  
-==== host1 ==== +===== nft Befehl ===== 
-<code> +''nft'' steht für ''nftables'', das wiederum für ''netfilter tables'', und das 
-ip a +ist der Nachfolger von ''iptables''. Dieses Programm wird für [[https://en.wikipedia.org/wiki/Firewall_computing|Firewall]], bzw. Packet 
-------------------------------------------------------------------- +filtering verwendet. 
-10.0.101.0/24 dev enp1s0 proto kernel scope link src 10.0.101.1+  * [[https://wiki.debian.org/nftables|Debian Wiki nftables]] 
 +  * [[https://wiki.archlinux.org/index.php/Nftables|Arch Wiki nftables]] 
 +Wir benötigen diesen Befehl hauptsächlich um 
 +[[https://de.wikipedia.org/wiki/Netzwerkadressübersetzung|NAT]] auf unseren 
 +Routern zu betreiben. 
 +==== NAT einrichten ==== 
 +Zunächst wird eine neue Tabelle ''nat'' mit den ''pre''- und ''postrouting'' Chains eingerichtet: 
 +<code|user@host:~#> 
 +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 \; }
 </code> </code>
-<code> +Auf diese Weise soll nun ''source NAT'' eingerichtet werden, welches sich 
-ip r +liest: "source network address translation". Dies ist vielleicht leichter zu 
-------------------------------------------------------------------- +verdauen, wenn man dazu "Quelladressenübersetzung" sagt, was die 
-10.0.101.0/24 dev enp1s0 proto kernel scope link src 10.0.101.1+folgende ''rule'', die hinzugefügt werden soll besser erklären kann: 
 +<code|user@host:~#
 +nft add rule nat postrouting ip saddr 10.0.1.0/24 oif enp0s7 snat 134.99.246.151 
 +                                |_______________| |________| |_________________| 
 +                                        |              |             | 
 +  nimm diesen Source-Addressbereich-----+              |                  
 +                                                                     
 +  und übersetze ihn am ausgehenden interface-----------+             | 
 +                                                                       
 +  zu dieser Adresse, die dann als Source-Adresse stehen soll---------+
 </code> </code>
-<code> +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 ''postrouting'' so wieder zurücksetzen: 
-ip a add 10.0.2.0/31 dev enp1s0+<code|user@host:~#
 +nft flush chain ip nat postrouting
 </code> </code>
-<code> +Dann kann man sich das entstandene ''ruleset'' ansehen: 
-ip route add default via 10.0.1.1 dev enp1s0+<code|user@host:~#
 +nft list ruleset
 </code> </code>
- +Und für die Ewigkeit in Datei schreiben, damit es auch einen Reboot überlebt: 
-==== host2 ==== +<code|user@host:~#
-<code> +nft list ruleset > /etc/nftables.conf
-ip a +
-------------------------------------------------------------------- +
-10.0.102.0/24 dev enp1s0 proto kernel scope link src 10.0.102.1+
 </code> </code>
-<code> +Falls man Veränderungen in der Datei ''/etc/nftables'' vornehmen möchte und diese 
-ip a add 10.0.2.1/31 dev enp1s0+dann wirksam werden, muss der ''nftables''-Dienst neu gestartet werden: 
 +<code|user@host:~#
 +systemctl restart nftables
 </code> </code>
-<code> + 
-ip route add default via 10.0.2.1 dev enp1s0+===== Welche Netzwerkkarte ist physisch verbunden? ===== 
 +  * [[https://stackoverflow.com/questions/808560/how-to-detect-the-physical-connected-state-of-a-network-cable-connector]] 
 +Das geht leicht mit diesem befehl: 
 +<code|user@host:~#
 +grep "" /sys/class/net/*/* 2>/dev/null | grep operstate 
 +/code> 
 + 
 +===== Packet forwarding einschalten ===== 
 +Damit ein Router überhaupt als solcher funktionieren kann, muss packet 
 +forwarding eingeschaltet werdenDas kann man indem man die Datei 
 +''/etc/sysctl.conf'' bearbeitet und die Zeile ''net.ipv4.ip_forward=1'' 
 +auskommentiert oder indem man diesen Einzeiler ausführt: 
 +<code|user@host:~#> 
 +sed -i '/^.*ip_forward=1/s/^#//' /etc/sysctl.conf
 </code> </code>
 +So kann man es ausschalten:
 +<code|user@host:~#>
 +sed -i '/^.*ip_forward=1/s/^/#/' /etc/sysctl.conf
 +</code>
 +
 +===== NETLAB Test-Setup line-Topologie =====
 +  * [[http://computer-outlines.over-blog.com/article-nftables-6-a-nftables-linux-internet-gateway-123294152.html|NAT mit nftables]]
 +  * [[https://wiki.debian.org/NetworkConfiguration#Legacy_method|Mehrere IP-Adressen auf einem Interface]]
 +
 +==== router ====
 +<file|/etc/network/interfaces>
 +source /etc/network/interfaces.d/*
 +
 +# 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
 +</file>
 +
 +<file|/etc/nftables.conf>
 +table ip nat {
 + chain post {
 + type nat hook postrouting priority 0; policy accept;
 + ip saddr 10.0.1.1 oif "enp0s7" snat to 134.99.246.151
 + }
 +}
 +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;
 + }
 +}
 +</file>
 +
 +==== host1 ====
 +<file|/etc/network/interfaces>
 +source /etc/network/interfaces.d/*
 +
 +# 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
 +</file>
 +
 +<file|/etc/nftables.conf>
 +table ip nat {
 + chain post {
 + type nat hook postrouting priority 0; policy accept;
 + ip saddr 10.0.2.1 oif "enp1s0" snat to 10.0.1.1
 + }
 +}
 +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;
 + }
 +}
 +</file>
 +
 +==== host2 ====
 +<file|/etc/network/interfaces>
 +source /etc/network/interfaces.d/*
  
 +# 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
 +</file>
  
routing.txt · Zuletzt geändert: 2018/02/19 22:19 von admin