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
quelle
Antworten:
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.
Erstellen Sie eine neue Routing-Tabelle (muss nur einmal durchgeführt werden):
Fügen Sie dieser neuen Tabelle eine Standardroute hinzu, die eth3 ausgeht:
Fügen Sie eine Richtlinienregel hinzu, um diese neue Tabelle für Pakete mit der Quelladresse der IP von eth3 zu verwenden:
quelle
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
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