ubuntuusers.de

Iptables/Route - Routing hinter einem Router

Status: Gelöst | Ubuntu-Version: Server 15.04 (Vivid Vervet)
Antworten |

DaViAC

Anmeldungsdatum:
1. Oktober 2015

Beiträge: Zähle...

Hallo zusammen,

Vorweg noch der Kommentar, dass ich mich erst seit ca. 5 Wochen mit Linux beschäftige - komme eher aus dem Microsoft-Umfeld und habe da meine Erfahrungen gesammelt. Jetzt bin ich dabei, mich privat in Linux einzuarbeiten. Ziel soll sein, dass ich in absehbarer Zeit vielleicht das eine oder andere Linux-Zertifikat angehe. Egal, genug zum Smalltalk...

Zu Übungszwecken virtualisiere ich auf meinem Laptop in Ubuntu 15.04 Desktop und VirtualBox, Version 5.0.4. In meiner VirtualBox soll ein 15.04 Server als Router für die dahinterliegende Infrastruktur dienen. Es sieht also zunächst wie folgt aus:

Internet --- Router --- Laptop mit VirtualBox --- Ubuntu 15.04 Server --- Rest

Da ich eine Netzwerkbrücke nutze, bezieht der virtuelle Router seine IP direkt von meiner FritzBox. Es ergibt sich also folgendes Bild:

Internet --- Router --- 192.168.x.0/24 --- Virtueller Router --- 192.168.y.0/24 --- Rest

Wenn ich jetzt von einer beliebigen virtuellen Maschine einen Ping sende, geschieht folgendes:

Ping zum virtuellen Router:

ubuntu@server02:~$ ping -c 5 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.355 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=0.287 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=0.282 ms
64 bytes from 192.168.100.1: icmp_seq=4 ttl=64 time=0.291 ms
64 bytes from 192.168.100.1: icmp_seq=5 ttl=64 time=0.284 ms

--- 192.168.100.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.282/0.299/0.355/0.035 ms
ubuntu@server02:~$

Ping zur "Außenseite" des virtuellen Routers:

ubuntu@server02:~$ ping -c 5 192.168.3.124
PING 192.168.3.124 (192.168.3.124) 56(84) bytes of data.
64 bytes from 192.168.3.124: icmp_seq=1 ttl=64 time=0.264 ms
64 bytes from 192.168.3.124: icmp_seq=2 ttl=64 time=0.266 ms
64 bytes from 192.168.3.124: icmp_seq=3 ttl=64 time=0.280 ms
64 bytes from 192.168.3.124: icmp_seq=4 ttl=64 time=0.270 ms
64 bytes from 192.168.3.124: icmp_seq=5 ttl=64 time=0.279 ms

--- 192.168.3.124 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.264/0.271/0.280/0.021 ms
ubuntu@server02:~$ 

Ping zur FritzBox:

ubuntu@server02:~$ ping -c 5 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.

--- 192.168.3.1 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 3999ms

ubuntu@server02:~$ 

Das interne Routing auf dem Router scheint zu funktionieren, da ich die zweite Netzwerkarte problemlos anpingen kann. Ich kann von meinem virtuellen Router problemlos meine FritzBox und externe Adressen anpingen. Die Frage ist jetzt, wo der "Fehler" liegt bzw. was ich vergessen habe zu konfigurieren.

Als Routen sind nur die Standard-Routen gesetzt:

ubuntu@server01:~$ route
Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
default         192.168.3.1     0.0.0.0         UG    0      0        0 eth0
192.168.3.0     *               255.255.255.0   U     0      0        0 eth0
192.168.100.0   *               255.255.255.0   U     0      0        0 eth1
ubuntu@server01:~$ 

In Iptables habe ich bereits folgendes konfiguriert:

ubuntu@server01:~$ sudo iptables -t filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ubuntu@server01:~$
ubuntu@server01:~$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  anywhere             anywhere            
ubuntu@server01:~$

Die einzelnen Befehle lassen sich sicherlich noch über die History aufrufen. Bei Bedarf also einfach anfordern.

Irgendwo passt das Routing noch nicht und ich weiß derzeit nicht, wo ich ansetzen soll. Bin also für jede Hilfe dankbar. ☺ Bitte dran denken, dass ich noch nicht mit allen Linux-Redewendungen auf sicherem Boden stehe. 😉

In diesem Sinne Da

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14345

DaViAC schrieb:

Die Frage ist jetzt, wo der "Fehler" liegt bzw. was ich vergessen habe zu konfigurieren.

In Iptables habe ich bereits folgendes konfiguriert:

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED

Wie sind die Ausgaben von:

sysctl net.ipv4.ip_forward
sudo iptables -nvx -L FORWARD

?

DaViAC

(Themenstarter)

Anmeldungsdatum:
1. Oktober 2015

Beiträge: 4

Hallo lubux,

Hier die erbetenen Informationen:

ubuntu@server01:~$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

Hatte den Wert mit:

ubuntu@server01:~$ sudo sysctl -w net.ipv4.ip_forward=1

gesetzt. Allerdings geht die Einstellung mit einem Neustart verloren.

Ich vermute daher, dass es nicht weiter verwunderlich erscheint, wenn die zweite Ausgabe auffällig leer geblieben ist:

ubuntu@server01:~$ sudo iptables -nvx -L FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
ubuntu@server01:~$

Jetzt muss ich also dann doch fragen, wo ich das Forwarding permanent eintrage. Mit dem manuell gesetzten Forwarding erhalte ich folgende Ausgabe:

ubuntu@server01:~$ sudo iptables -nvx -L FORWARD
Chain FORWARD (policy ACCEPT 23 packets, 1724 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
ubuntu@server01:~$ 

Es werden in jedem Fall Pakete registriert, also noch einmal die Iptables nachgesehen - keine Einträge mehr vorhanden.

Schlussendlich liegt es also daran, dass das Forwarding und die Regeln nicht permanent gespeichert werden. Womit wir wieder bei meiner Frage sind, wo ich das permanent hinterlegen kann bzw. wo ein entsprechendes Skript abgelegt werden muss. /etc/network/if-up.d käme mir jetzt in den Sinn, bin dann aber doch zu sehr Neuling und würde daher eine eher professionelle Lösung vorziehen.

In diesem Sinne Da

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14345

DaViAC schrieb:

..., wo ich das permanent hinterlegen kann ...

Siehe die Ausgabe von:

cat /etc/sysctl.conf | grep -i net.ipv4.ip_forward

DaViAC

(Themenstarter)

Anmeldungsdatum:
1. Oktober 2015

Beiträge: 4

Guten Morgen lubux,

Vielen Dank schon einmal für deine Geduld. Ich fürchte, ich muss sie noch ein wenig mehr strapazieren. 😉

Die Ausgaben heute früh direkt nach dem Neustart des virtuellen Routers:

ubuntu@server01:~$ sudo iptables -t filter -L
[sudo] password for ubuntu: 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

ubuntu@server01:~$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

ubuntu@server01:~$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0


ubuntu@server01:~$ cat /etc/sysctl.conf | grep -i net.ipv4.ip_forward
#net.ipv4.ip_forward=1
ubuntu@server01:~$ 

Die Einträge in den iptables sind wieder komplett weg - sollten die nicht permanent gesetzt bleiben? IP-Forwarding ist leider auch immer noch ein Thema, denn ich habe da zwei - sich widersprechende - Ausgaben mal hervorgehoben.

Das Routing hat gestern bis zum normalen Herunterfahren der Server (via shutdown) quasi perfekt funktioniert, so wie ich es wollte.

In diesem Sinne Da

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14345

DaViAC schrieb:

Die Einträge in den iptables sind wieder komplett weg - sollten die nicht permanent gesetzt bleiben?

iptables-Regeln sind nach einem Neustart weg. Du kannst diese iptables-Regeln z. B. mit der Datei "/etc/rc.local" oder mit einem anderen Script, das beim booten ausgeführt wird, setzen.

Betr. "net.ipv4.ip_forward=1" musst Du in der "/etc/sysctl.conf", das Kommentarzeichen "#" vor der Zeile:

#net.ipv4.ip_forward=1

mit z. B.:

sudo nano /etc/sysctl.conf

entfernen und diese Datei speichern.

EDIT:

-p     Load in sysctl settings from the file specified or /etc/sysctl.conf if none given.  Specifying - as filename means  reading
              data from standard input.

Siehe auch die manpage für sysctl.

DaViAC

(Themenstarter)

Anmeldungsdatum:
1. Oktober 2015

Beiträge: 4

Ja, ich gebe zu: Es muss wohl noch zu früh gewesen sein. Im Normalfall hätte mir das #-Zeichen auffallen müssen - eigentlich. Vielleicht sehe ich aber vor lauter Befehlszeilen einfach gar nichts mehr...

In Sachen iptables hab ich dann auch wieder was dazu gelernt. ☺ Das Thema Scripting wird mich also noch etwas mehr beschäftigen, als es das ohnehin schon tut.

Nochmals vielen Dank für deine/eure Geduld. Ich denke, dieses Problem kann ich dann also als gelöst betrachten. Nicht dass sich inzwischen schon andere Fragen ergeben hätten, aber die passen nicht hier in diesen Thread und zunächst würd ich gern versuchen, es selbst zu lösen. 😉 Das kommt eben davon, wenn man versucht, eine Infrastruktur, die man von MS-Seite her kennt, unter Linux abzubilden. 🙄

In diesem Sinne Da

Antworten |