IP-Weiterleitung von einem Server über die Standardroute

IP-Weiterleitung von einem Server über die Standardroute

Ich habe ein Gerät (IP 10.110.1.3) mit der folgenden Regel eingerichtet:

$ ip route
default via 10.110.1.4 dev wlan0 onlink

Ich habe auf beiden Rechnern die IPv4-Weiterleitung aktiviert. Beide Rechner können miteinander kommunizieren.

Hier sind meine iptables. Ich möchte von der Schnittstelle wlp0s20u1 zu wlp3s0 routen:

$ iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

$ iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o wlp3s0 -j MASQUERADE

Routen auf dem „Routing“-Gerät 10.110.1.4:

$ ip route
default via 192.168.1.1 dev wlp3s0  proto static 
10.110.1.0/24 dev wlp0s20u1  proto kernel  scope link  src 10.110.1.4 
192.168.1.0/24 dev wlp3s0  proto kernel  scope link  src 192.168.1.110  metric 600 

Wenn Sie die Route „if interface“ abrufen, ist klar, dass dies nie funktionieren wird:

$ ip route get to 192.168.1.1 from 10.110.1.3 iif wlp0s20u1
RTNETLINK answers: No route to host

$ ip route get to 8.8.8.8 from 10.110.1.3 iif wlp0s20u1
RTNETLINK answers: No route to host

Mir ist das src 192.168.1.110auf der 192.168.1.0Route aufgefallen und ich habe versucht, die folgende Route hinzuzufügen, um das Problem zu beheben:

$ sudo ip route add 192.168.1.1/32 dev wlp3s0

Aber auch das hat nichts geholfen.

Ich habe TCPdump zur ICMP-Analyse verwendet, damit ich sehen kann, wohin meine Pings gehen.

$ tcpdump -i wlp0s20u1 -n icmp
listening on wlp0s20u1, link-type EN10MB (Ethernet), capture size 262144 bytes
18:13:19.355166 IP 10.110.1.3 > 8.8.8.8: ICMP echo request, id 32366, seq 1, length 64
18:13:20.359770 IP 10.110.1.3 > 8.8.8.8: ICMP echo request, id 32366, seq 2, length 64

Und

tcpdump -i wlp3s0 -n icmp                                             
listening on wlp3s0, link-type EN10MB (Ethernet), capture size 262144 bytes

Auf der wlp3s0-Schnittstelle passiert nichts, sofern ich nicht vom „Router“-Computer aus pinge.

Das Problem hier ist also eindeutig, dass der Kernel nicht weiß, wie er Pakete von wlp0s20u1 an wlp3s0 weiterleiten soll. Aber ich bin nicht sicher, wie ich ihn dazu bringen kann. Ich habe versucht, explizit Routen hinzuzufügen, um ihm dies mitzuteilen, aber es scheint nicht zu funktionieren.

Wenn ich Folgendes spamme, steigen nur die Prerouting-Paketzähler (während ein Ping-Versuch unternommen wird);

$ iptables -t nat -v -L -n

Chain PREROUTING (policy ACCEPT 775 packets, 50740 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 24 packets, 1920 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 95 packets, 23073 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 5 packets, 1000 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   90 22073 MASQUERADE  all  --  *      wlp3s0  0.0.0.0/0            0.0.0.0/0 

Jede Hilfe wird sehr geschätzt!

EDIT: Vereinfachte Erklärung

Ich habe drei Geräte:

  • A: WLAN-Router unter 192.168.1.1
  • B: Computer mit zwei WLAN-Karten: wlp3s0 im Netzwerk 192.168.1.1 und wlp0s20u1 im Netzwerk 10.110.1.0/24.
  • C: Computer ausschließlich im WLAN-Netzwerk 10.110.1.0/24.

Ich versuche, C die Kommunikation mit dem Internet (0.0.0.0/0) über zwei Hops zu ermöglichen, zuerst mit B, dann mit A und dann mit dem Internet.

Das Problem besteht darin, B dazu zu bringen, Pakete von wlp3s20u1 an wlp3s0 weiterzuleiten.

Antwort1

Die Lösung bestand darin, die Weiterleitung auf der entsprechenden Schnittstelle zu aktivieren. Aus irgendeinem Grund war sie nicht aktiviert.

sudo sysctl net.ipv4.conf.wlp3s0.forwarding=1
sudo sysctl net.ipv4.conf.wlp0s20u1.forwarding=1

verwandte Informationen