• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] tcp-Verbindung zwischen 2 VLANs: No route to host

gehrke

Administrator
Teammitglied
Moin *,

ich hatte ja schon mehrfach erwähnt, dass ich ein lausiger Netzwerk-Techniker bin. Hier ist ein weiteres Beispiel dafür:

Ich habe zwei VLANs: 172.16.11.0/24 und 172.16.21.0/24. Diese werden von einer pfsense aufgespannt.

Ich brauche eine TCP-Verbindung von 172.16.11.6 (j2) zu 172.16.21.10 (bacula)

Code:
j2:~ # telnet bacula 9103
Trying 172.16.21.10...
telnet: connect to address 172.16.21.10: No route to host
Oder auch mysqld:
Code:
j2:~ # telnet bacula 3306
Trying 172.16.21.10...
telnet: connect to address 172.16.21.10: No route to host

gehrke@j6:~> mysql -u root -p -h bacula
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on 'bacula' (113 "No route to host")

Auf 'bacula' sehe ich eingehende Pakete mit tcpdump:
Code:
j2.gehrke.local.57207 > bacula.gehrke.local.bacula-sd: Flags [S], cksum 0x3389 (correct), seq 97555397, win 29200, options [mss 1460,sackOK,TS val 75270429 ecr 0,nop,wscale 7], length 0
Scheinbar gibt es aber keinen Weg als Antwort zurück, zumindest deute ich 'No route to host' so. Eigentlich sollte alles Firewall-technisch frei sein, auch die andere Richtung funktioniert:
Code:
[root@bacula ~]# telnet j2 22
Trying 172.16.11.6...
Connected to j2.
Escape character is '^]'.
SSH-2.0-OpenSSH_6.2
Connection closed by foreign host.
Ich erinnere mich dunkel, dass ich so etwas schon mal hatte, stehe aber momentan auf dem Schlauch und komme nicht weiter. Kann jemand helfen?
TNX

cu, gehrke
 
OP
gehrke

gehrke

Administrator
Teammitglied
Ein kleines Detail dazu noch: bacula ist eine virtuelle Maschine, welche auf dem Host 'j4' ( 172.16.11.8 ) liegt. Dort gibt es eine entsprechende Bridge:
Code:
bond0.11  Link encap:Ethernet  Hardware Adresse 00:25:90:xx:xx:xx  
          inet Adresse:172.16.11.8  Bcast:172.16.11.255  Maske:255.255.255.0
          inet6 Adresse: fe80::225:90ff:fe27:afac/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:1277424 errors:0 dropped:0 overruns:0 frame:0
          TX packets:461268 errors:0 dropped:7 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:975728053 (930.5 MiB)  TX bytes:1107782281 (1.0 GiB)

bond0.21  Link encap:Ethernet  Hardware Adresse 00:25:90:xx:xx:xx  
          inet6 Adresse: fe80::225:90ff:fe27:afac/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:216812 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56934 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:82665389 (78.8 MiB)  TX bytes:5550313 (5.2 MiB)

bridge-21 Link encap:Ethernet  Hardware Adresse 00:25:90:xx:xx:xx  
          inet6 Adresse: fe80::225:90ff:fe27:afac/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:142304 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:7015410 (6.6 MiB)  TX bytes:578 (578.0 b)
Kann es sein, dass hier auf der Bridge noch eine Route fehlt?

EDIT 1: Netzwerk der VM:
Code:
[root@bacula ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.21.10  netmask 255.255.255.0  broadcast 172.16.21.255
        inet6 fe80::5054:ff:fe50:3bf2  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:50:3b:f2  txqueuelen 1000  (Ethernet)
        RX packets 344558  bytes 93480806 (89.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 54672  bytes 5437914 (5.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
OP
gehrke

gehrke

Administrator
Teammitglied
gehrke schrieb:
Ich erinnere mich dunkel, dass ich so etwas schon mal hatte
Scheiss Alzheimer: http://linux-club.de/forum/viewtopic.php?f=86&t=116916
Eigentlich habe mich aber hier an dem damals erarbeiteten Muster orientiert, irgendwas muss ich aber wohl vergessen haben...
Code:
[root@j4 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
bridge-21               8000.00259027afac       no              bond0.21
                                                        vnet0
Code:
[root@j4 ~]# route
Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
172.16.13.0     *               255.255.255.0   U     0      0        0 bond0.13
172.16.11.0     *               255.255.255.0   U     0      0        0 bond0.11
link-local      *               255.255.0.0     U     1004   0        0 bond0
link-local      *               255.255.0.0     U     1008   0        0 bridge-21
link-local      *               255.255.0.0     U     1014   0        0 bond0.11
link-local      *               255.255.0.0     U     1015   0        0 bond0.13
default         localhost       0.0.0.0         UG    0      0        0 bond0.11
Code:
[root@j4 ~]# virsh dumpxml bacula
[...]
    <interface type='bridge'>
      <mac address='52:54:00:50:3b:f2'/>
      <source bridge='bridge-21'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
[...]
EDIT 1:
Code:
[root@j4 kvm]# ifconfig vnet0
vnet0     Link encap:Ethernet  Hardware Adresse FE:54:00:50:3B:F2  
          inet6 Adresse: fe80::fc54:ff:fe50:3bf2/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:53470 errors:0 dropped:0 overruns:0 frame:0
          TX packets:266096 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:500 
          RX bytes:5360895 (5.1 MiB)  TX bytes:88740639 (84.6 MiB)
 

revealed

Guru
Also ideell hatte ich das so gesehen, dass eben der Port für SSH vom Gast auf einen anderen weitergeleitet wird und du diesen nutzt. ... quark.

Also am Host auf dem SSH port hockt schon jemand.
172.16.11.6 (j2) zu PORT 21
172.16.21.10 (bacula) PORT 222

Oder es fehlt die route in das andere Netz. Auf dem Host selber wird ja denk ich am SSH port schon was laufen, oder? Gast und host bekommen ja beide eine IP über den adapter vom Host. Und der Gast ist in einem ip Adressbereich.

Gruß,

R

(editiert)
 
OP
gehrke

gehrke

Administrator
Teammitglied
@revealed: Mein Problem ist nicht, dass ssh nicht funktioniert. Vielmehr brauche ich eine tcp-Verbindung von j2 zu bacula auf Port 9103.
 

revealed

Guru
Die route zurück müsste im gast über die bridge weitergeleitet werden. Also über diesen 10.0.xyz, wenn ich das richtig verstanden habe.

Gruß,

R
 
OP
gehrke

gehrke

Administrator
Teammitglied
revealed schrieb:
Die route zurück müsste im gast über die bridge weitergeleitet werden. Also über diesen 10.0.xyz, wenn ich das richtig verstanden habe.
TNX

Ein solches Netzwerk habe ich nicht. Hier laufen 172.16.11.0/24 bis 172.16.21.0/24

OK, also eine Route auf der VM? Die Routing-Tabelle für den Host (j4) hatte ich oben ja schon angegeben. Hier erst mal die bestehende Tabelle für die bacula-VM:
Code:
[root@bacula ~]# route
Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
default         localhost       0.0.0.0         UG    100    0        0 eth0
172.16.21.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.16.21.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
Im spontanen Anflug von Euphorie (hatte erst einen Kaffee) habe ich mal das hier ausprobiert:
Code:
[root@bacula ~]# route add -net 172.16.11.0 netmask 255.255.255.0 eth0
Damit habe ich mir wohl das Netzwerk des Systems zerschossen, jedenfalls ist die SSH-Session jetzt weg und ich kann die Büchse nicht mehr anpingen. Das wahr wohl nicht so gut... :???:

EDIT: Natürlich war die serielle Konsole der VM nicht konfiguriert, so dass ich auch lokal nicht mehr ran kam. Nach einem Reboot der VM komme ich jetzt aber wieder drauf.
 

revealed

Guru
Das wahr wohl nicht so gut..
Ich will dich nicht unnötig zu deinen Computern scheuchen. Ich hab hier gerade nochmal nachgelesen:
https://www.virtualbox.org/manual/ch06.html#network_bridged

Dieser Beschränkung die in diesem Abschnitt über VLAN ausgesprochen wird, dass jeder Gast einen eigenen physischen Adapter benötigt? Trifft das zu?

Ich könnte übrigens nur noch raten. Und würde ein *Schnautze* akzeptieren. ;)

Also das hier:
A VNIC cannot be shared between multiple guest network interfaces, i.e. each guest network interface must have its own, exclusive VNIC.
Also noch eine extra NIC erstellen und diese physisch machen?

Gruß,

R
 
OP
gehrke

gehrke

Administrator
Teammitglied
revealed schrieb:
Ich hab hier gerade nochmal nachgelesen:
https://www.virtualbox.org/manual/ch06.html#network_bridged
Das habe ich mir nicht durchgelesen, weil hier KVM/qemu und nicht Virtualbox läuft.
 
OP
gehrke

gehrke

Administrator
Teammitglied
revealed schrieb:
http://www.linux-kvm.org/page/Networking#iptables.2Frouting
Das könnte näher dran sein, aber Firewall-technisch habe ich alles auf Durchzug gestellt.
Hhmmm, da steht:
Clientside v2: If you host IP is not on the same subnet as <ip-of-client>, then you must manually add the route to host before you create default route:
route add -host <ip-of-host> dev <network-interface>
route add default gw <ip-of-host>
Das habe ich versucht:
Code:
[root@bacula ~]# route add -host 172.16.11.8 dev eth0
[root@bacula ~]# route add default gw 172.16.11.8
Damit scheint weiterhin unverändert die Netzwerk-Funktionalität gegeben zu sein (ping+ssh funktionieren weiterhin in beide Richtungen), aber mein Problem ist damit scheinbar auch nicht gelöst:
Code:
gehrke@j6:~> mysql -u root -p -h bacula
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on 'bacula' (113 "No route to host")
 

revealed

Guru
Das war clientside...

und hostside?
Hostside: Allow IPv4 forwarding and add route to client (could be put in a script - route has to be added after the client has started):

sysctl -w net.ipv4.ip_forward=1 # allow forwarding of IPv4
route add -host <ip-of-client> dev <tap-device> # add route to the client
 
OP
gehrke

gehrke

Administrator
Teammitglied
revealed schrieb:
Code:
[root@j4 ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
[root@j4 ~]# route add -host 172.16.21.10 dev vnet0
... leider keine Änderung ...
 

revealed

Guru
dass da noch irgendwie von iptables Pakete verworfen werden? Bin jetz irgendwie auf icmp gekommen und hab gesucht. Schau dir mal den an:
http://wiki.hetzner.de/index.php/KVM_mit_Nutzung_aller_IPs_-_the_easy_way

Auch das hier müsste deinem Schaubild in etwa entsprechen, oder?
http://wiki.hetzner.de/index.php/KVM_mit_Nutzung_aller_IPs_aus_Subnetz

Gruß,

R
 
OP
gehrke

gehrke

Administrator
Teammitglied
Ich habe soweit möglich alle Firewalls runtergefahren, ebenso selinux. Die Regeln der pfsense sind durchlässig.
 
Was erzählt dir denn ein "nmap bacula" ? Und ein "netstat -tulpen" auf bacula könnte auch noch aufschlußreich sein.
 

spoensche

Moderator
Teammitglied
Wie ist denn deine Pfsense konfiguriert? Hast du dort für jedes VLAN ein eigenes virtuelles Interface angelegt, z.B. vlan2 on re2?

Stimmen die Routen auf der Pfsense?
 
Oben