Multihomed-Linux-Computer kann nicht auf nicht standardmäßige Schnittstelle gepingt werden

7

Ich habe einen Multihomed-Ubuntu-Server mit einer Reihe von Schnittstellen, die Folgendes umfassen:

eth2: 10.10.0.131/24
eth3: 10.20.0.2/24

Die Standardschnittstelle ist eth2 mit einem Gateway von 10.10.0.1. So sieht die Routing-Tabelle aus:

root@c220-1:~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.10.0.1       0.0.0.0         UG        0 0          0 eth2
10.10.0.0       0.0.0.0         255.255.255.0   U         0 0          0 eth2
10.20.0.0       0.0.0.0         255.255.255.0   U         0 0          0 eth3
10.30.0.0       0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.40.0.0       0.0.0.0         255.255.0.0     U         0 0          0 eth1

Über ein separates Netzwerk ( 192.168.3.5/24) kann ich diesen Computer über die eth2-Schnittstelle (die mit dem Standard-Gateway) erreichen, nicht jedoch über die eth3-Schnittstelle. Ich kann die eth3-Schnittstelle problemlos von einem Router im selben Netzwerk (10.20.0.1) aus anpingen.

Wenn ich 10.10.0.131 von 192.168.3.5 anpinge, erreichen die Pakete den Computer, senden jedoch keine Antworten:

c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 0, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 1, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 2, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 3, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 4, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 5, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 6, length 64
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 98: 192.168.3.5 > 10.20.0.2: ICMP echo request, id 5451, seq 7, length 64

Wenn ich vom Router (10.20.0.1) im selben Netzwerk pinge, antwortet der Server ordnungsgemäß:

c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80
c4:c8:80:90:22:eb > 73:10:73:e4:10:06, IPv4, length 114: 10.20.0.1 > 10.20.0.2: ICMP echo request, id 28899, seq 2932, length 80
73:10:73:e4:10:06 > c4:c8:80:90:22:eb, IPv4, length 114: 10.20.0.2 > 10.20.0.1: ICMP echo reply, id 28899, seq 2932, length 80

Beachten Sie, dass gemäß der Antwort in dieser ähnlichen Frage rp_filter auf allen Schnittstellen deaktiviert ist, das Problem jedoch nicht behoben wird:

$ for i in eth0 eth1 eth2 eth3 all default
> do
> cat /proc/sys/net/ipv4/conf/$i/rp_filter
> done
0
0
0
0
0
0
Lorin Hochstein
quelle
Mögliches Duplikat serverfault.com/q/481654/115189
mgorven

Antworten:

16

Das Problem ist, dass die Ping-Antworten über eth2 gesendet werden, da die Standardroute über eth2 verläuft, obwohl die Anforderungen auf eth3 empfangen wurden. (Wenn Sie eth2 tcpdump, sollten Sie die gesendeten Antworten sehen.) Es gibt dann wahrscheinlich ein Gerät, das die Pakete verwirft, weil sie eine ungültige Quell-IP für das Netzwerk haben, in dem sie sich befinden. Sie benötigen ein Routing für Quellrichtlinien, damit die Antworten über die Schnittstelle gesendet werden, auf der sie empfangen wurden.

  1. Erstellen Sie eine neue Routing-Tabelle (muss nur einmal durchgeführt werden):

    echo 13 eth3 >> /etc/iproute2/rt_tables
    
  2. Fügen Sie dieser neuen Tabelle eine Standardroute hinzu, die eth3 ausgeht:

    ip route add default via 10.20.0.1 table eth3
    
  3. Fügen Sie eine Richtlinienregel hinzu, um diese neue Tabelle für Pakete mit der Quelladresse der IP von eth3 zu verwenden:

    ip rule add from 10.20.0.2 lookup eth3
    
mgorven
quelle
D'oh, ich habe nicht daran gedacht, den tcpdump auf eth2 zu machen, ich sehe die Antworten. Das Routing der Quellrichtlinien hat funktioniert.
Lorin Hochstein
1
Kann die Tabellenbezeichnung "eth3" beliebig sein oder muss sie mit dem Schnittstellennamen übereinstimmen?
Lorin Hochstein
1
@ LorinHochstein Der Name ist beliebig.
mgorven
Um es dauerhaft zu machen, fügen Sie in meinem Fall Post-Up- und Pre-Down-Befehle zur Schnittstellendatei hinzu (zumindest bei Debian-basierten Distributionen): post-up /sbin/ip route add default via 192.168.0.1 table eth1 post-up /sbin/ip rule add from 192.168.0.100 lookup eth1 pre-down /sbin/ip route del default via 192.168.0.1 table eth1 pre-down /sbin/ip rule del from 192.168.0.100 lookup eth1
Cusco
1

Über ein separates Netzwerk (192.168.3.5/24) kann ich diesen Computer über die eth2-Schnittstelle (die mit dem Standard-Gateway) erreichen, nicht jedoch über die eth3-Schnittstelle. Ich kann die eth3-Schnittstelle problemlos von einem Router im selben Netzwerk (10.20.0.1) aus anpingen.

Es hört sich so an, als ob Ihnen eine Route für 192.168.3.5/24 aus dem 10.30.0 / 24-Subnetz fehlt. Sie sollten für jedes Netzwerk von jedem Gerät ein Netzwerkdiagramm und Traceroutes hinzufügen.


quelle