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
routing [2018/02/18 19:20]
admin
routing [2018/02/19 22:19]
admin [Welche Netzwerkkarte ist physisch verbunden?]
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> 
 +So fügt man eine Route zu dem ''10.0.200.0/24''-Netzwerk über das Gateway 
 +''10.0.200.1'' hinzu: 
 +<code|user@host:~#> 
 +ip r add 10.0.200.0/24 via 10.0.200.1 dev enp1s0 
 +</code> 
 +=== Route löschen === 
 +So kann man eine ''default''-Route löschen. Da es nur eine default-Route geben 
 +kann, braucht man kein Interface anzugeben. 
 +<code|user@host:~#> 
 +ip r del default
 </code> </code>
-===== Routen löschen ===== +So kann man die Route zu dem Netzwerk ''10.0.200.0/24'' über das Gateway 
-===== Routen anzeigen ===== +''10.0.200.1'' löschen:
-==== ip route ====+
 <code|user@host:~#> <code|user@host:~#>
-ip route +ip r del 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>
  
-==== ip route ==== +===== nft Befehl ===== 
-===== NETLAB Test-Setup ===== +''nft'' steht für ''nftables'', das wiederum für ''netfilter tables'', und das 
-==== line-Topologie ==== +ist der Nachfolger von ''iptables''. Dieses Programm wird für [[https://en.wikipedia.org/wiki/Firewall_computing|Firewall]], bzw. Packet 
-Um eine line-Topologie zwischen Routern einzurichtendie nur eine +filtering verwendet. 
-Netzwerkkarte besitzen und alle an einem switch angeschlossen sind, benötigt +  * [[https://wiki.debian.org/nftables|Debian Wiki nftables]] 
-man ein paar Dinge: +  * [[https://wiki.archlinux.org/index.php/Nftables|Arch Wiki nftables]] 
-  * /31-Verbindungsnetze zwischen den Routern +Wir benötigen diesen Befehl hauptsächlich um 
-    * zwei IP-Adressen pro Interface +[[https://de.wikipedia.org/wiki/Netzwerkadressübersetzung|NAT]] auf unseren 
-  * NAT muss eingerichtet sein +Routern zu betreiben. 
-    * nftables +==== NAT einrichten ==== 
- +Zunächst wird eine neue Tabelle ''nat'' mit den ''pre''- und ''postrouting'' Chains eingerichtet: 
-==== NAT mit nftables ==== +<code|user@host:~#
-  * [[http://computer-outlines.over-blog.com/article-nftables-6-a-nftables-linux-internet-gateway-123294152.html|Anleitung]] +nft add table nat 
- +nft add chain nat prerouting { type nat hook prerouting priority \; } 
-==== mehrere IP-Adressen auf einem Interface ==== +nft add chain nat postrouting { type nat hook postrouting priority \; }
-  * [[https://wiki.debian.org/NetworkConfiguration#Legacy_method|Debian-Wiki]] +
- +
-==== router ==== +
-<code> +
-ip a +
-------------------------------------------------------------------- +
-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> +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 
-default via 134.99.246.1 dev enp0s7 onlink +folgende ''rule'', die hinzugefügt werden soll besser erklären kann: 
-10.0.100.0/24 dev enp1s6 proto kernel scope link src 10.0.100.1 +<code|user@host:~#
-134.99.246.0/24 dev enp0s7 proto kernel scope link src 134.99.246.151+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.0/31 dev enp1s6+man die chain ''postrouting'' so wieder zurücksetzen: 
 +<code|user@host:~#
 +nft flush chain ip nat postrouting
 </code> </code>
- +Dann kann man sich das entstandene ''ruleset'' ansehen: 
-==== host1 ==== +<code|user@host:~#
-<code> +nft list ruleset
-ip a +
-------------------------------------------------------------------- +
-10.0.101.0/24 dev enp1s0 proto kernel scope link src 10.0.101.1+
 </code> </code>
-<code> +Und für die Ewigkeit in Datei schreiben, damit es auch einen Reboot überlebt: 
-ip r +<code|user@host:~#
-------------------------------------------------------------------- +nft list ruleset > /etc/nftables.conf
-10.0.101.0/24 dev enp1s0 proto kernel scope link src 10.0.101.1+
 </code> </code>
-<code> +Falls man Veränderungen in der Datei ''/etc/nftables'' vornehmen möchte und diese 
-ip a add 10.0.1.1/31 dev enp1s0 +dann wirksam werden, muss der ''nftables''-Dienst neu gestartet werden: 
-ip a add 10.0.2.0/31 dev enp1s0+<code|user@host:~#
 +systemctl restart nftables
 </code> </code>
-<code> + 
-ip route add default via 10.0.1.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> </code>
  
-==== host2 ==== +===== Packet forwarding einschalten ===== 
-<code> +Damit ein Router überhaupt als solcher funktionieren kann, muss packet 
-ip a +forwarding eingeschaltet werden. Das kann man indem man die Datei 
-------------------------------------------------------------------- +''/etc/sysctl.conf'' bearbeitet und die Zeile ''net.ipv4.ip_forward=1'' 
-10.0.102.0/24 dev enp1s0 proto kernel scope link src 10.0.102.1+auskommentiert oder indem man diesen Einzeiler ausführt: 
 +<code|user@host:~#
 +sed -i '/^.*ip_forward=1/s/^#//' /etc/sysctl.conf
 </code> </code>
-<code> +So kann man es ausschalten: 
-ip a add 10.0.2.1/31 dev enp1s0 +<code|user@host:~#
-</code> +sed -i '/^.*ip_forward=1/s/^/#/' /etc/sysctl.conf
-<code> +
-ip route add default via 10.0.2.1 dev enp1s0+
 </code> </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