Was ich gerne tun würde

Was ich gerne tun würde

Was ich gerne tun würde

Ich möchte meine Debian Stretch GNU/Linux-Maschine so einrichten, dass IP-Pakete zwischen ihren Netzwerkschnittstellen weitergeleitet werden.

Kontext

Dies sind die Netzwerkschnittstellen, die auf meiner Debian-Box und meinem zukünftigen Router verfügbar sind:

Index Schnittstellenname IP-Adresse
1 enp2s0 192.168.23.91/24
2 enx00e04c360e75 192.168.1.1/24
3 enx000ec667a74a 192.168.2.2/24
  • sysctl net.ipv4.ip_forwardgibt zurück 1, daher ist das Routing aktiviert.
  • cat /proc/sys/net/ipv4/conf/*/rp_filtergibt nichts außer 0s zurück. Daher ist die Rückpfadfilterung deaktiviert. (Dies war der Grund für die Besorgnis bei einigen anderen Fragen, die ich gefunden habe.)

Die Routingtabelle sieht wie folgt aus:

$ sudo route -nn
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.23.254  0.0.0.0         UG    100    0        0 enp2s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp2s0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U     101    0        0 enx00e04c360e75
192.168.2.0     0.0.0.0         255.255.255.0   U     102    0        0 enx000ec667a74a
192.168.23.0    0.0.0.0         255.255.255.0   U     100    0        0 enp2s0

Die folgenden Werke

Von meinem 192.168.1.111an NIC 2 angeschlossenen Gerät ( ) kann ich sowohl meine NIC 2 ( 192.168.1.1) als auch meine NIC 3 ( 192.168.2.2) anpingen.

tcpdumpDie Ausgabe auf meinem Debian-Router sieht wie erwartet aus:

$ sudo tcpdump -i enx00e04c360e75 icmp -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enx00e04c360e75, link-type EN10MB (Ethernet), capture size 262144 bytes
18:10:51.919808 IP 192.168.1.111 > 192.168.1.1: ICMP echo request, id 25404, seq 17, length 64
18:10:51.919863 IP 192.168.1.1 > 192.168.1.111: ICMP echo reply, id 25404, seq 17, length 64
18:10:52.920019 IP 192.168.1.111 > 192.168.1.1: ICMP echo request, id 25404, seq 18, length 64
18:10:52.920130 IP 192.168.1.1 > 192.168.1.111: ICMP echo reply, id 25404, seq 18, length 64
18:10:53.920808 IP 192.168.1.111 > 192.168.1.1: ICMP echo request, id 25404, seq 19, length 64
18:10:53.920895 IP 192.168.1.1 > 192.168.1.111: ICMP echo reply, id 25404, seq 19, length 64
[...]
18:11:03.408546 IP 192.168.1.111 > 192.168.2.2: ICMP echo request, id 25916, seq 0, length 64
18:11:03.408622 IP 192.168.2.2 > 192.168.1.111: ICMP echo reply, id 25916, seq 0, length 64
18:11:04.405006 IP 192.168.1.111 > 192.168.2.2: ICMP echo request, id 25916, seq 1, length 64
18:11:04.405061 IP 192.168.2.2 > 192.168.1.111: ICMP echo reply, id 25916, seq 1, length 64
18:11:05.405147 IP 192.168.1.111 > 192.168.2.2: ICMP echo request, id 25916, seq 2, length 64
18:11:05.405201 IP 192.168.2.2 > 192.168.1.111: ICMP echo reply, id 25916, seq 2, length 64

Folgendes funktioniert nicht

Von meinem über NIC 2 verbundenen Gerät kann ich keinen über NIC 1 erreichbaren Host anpingen.

tcpdumpläuft auf meiner Debian-Box und zeigt eingehende Pakete auf NIC 2 an:

$ sudo tcpdump -i enx00e04c360e75 icmp -n
listening on enx00e04c360e75, link-type EN10MB (Ethernet), capture size 262144 bytes
18:11:31.837778 IP 192.168.1.111 > 193.99.144.80: ICMP echo request, id 36668, seq 4, length 64
18:11:32.838830 IP 192.168.1.111 > 193.99.144.80: ICMP echo request, id 36668, seq 5, length 64
18:11:33.838249 IP 192.168.1.111 > 193.99.144.80: ICMP echo request, id 36668, seq 6, length 64
[...]

aber sie verlassen das Netzwerk nie über NIC 1:

$ sudo tcpdump -i enp2s0 icmp -n
listening on enp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
[nothing]

Wenn ich die Pings direkt von meiner Debian-Router-Box aussende, tcpdumpsieht es wie erwartet aus:

$ sudo tcpdump -i enp2s0 icmp -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:35:16.577795 IP 192.168.23.91 > 193.99.144.80: ICMP echo request, id 13146, seq 1, length 64
18:35:16.600861 IP 193.99.144.80 > 192.168.23.91: ICMP echo reply, id 13146, seq 1, length 64
18:35:17.578164 IP 192.168.23.91 > 193.99.144.80: ICMP echo request, id 13146, seq 2, length 64
18:35:17.599898 IP 193.99.144.80 > 192.168.23.91: ICMP echo reply, id 13146, seq 2, length 64

Frage

Was verhindert, dass die auf NIC 2 eingehenden Ping-Pakete über NIC 1 weitergeleitet werden? Was muss ich tun, um das Routing dieser Pakete zu ermöglichen?

Antwort1

Zusammenfassung des in den Kommentaren ausgetauschten Inhalts:

  • das System wurde nicht explizit als Router konfiguriert

    D. h. es gibt keine explizite Konfiguration, die etwas wie Folgendes anwendet:

    sysctl -w net.ipv4.ip_forward=1
    
  • Das System läuft mit Docker

    Das bedeutet, dass:

    • Docker macht das System zum Router

      Es legt fest:

      sysctl -w net.ipv4.ip_forward=1
      
    • Dockerverhindert das Routing in der Firewall-Richtlinie

      Docker auf einem Router

      Docker setzt auch die Richtlinie für die FORWARD-Kette auf DROP. Wenn Ihr Docker-Host auch als Router fungiert, führt dies dazu, dass dieser Router keinen Datenverkehr mehr weiterleitet. Wenn Ihr System weiterhin als Router fungieren soll, können Sie der DOCKER-USERKette explizite ACCEPT-Regeln hinzufügen, um dies zuzulassen:

      $ iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT
      

Also

  • Docker veranlasst, weitergeleitete Pakete zu verwerfen (außer für Container)
  • das Stoppen von Docker aktivierte die Weiterleitung nicht mehr (zumindest nicht beim nächsten Booten)

In beiden Fällen hat das System am Ende nicht die Weiterleitung durchgeführt.

Sie sollten wahrscheinlich die beiden folgenden Dinge tun:

  • Routing explizit aktivieren (irgendwo in /etc/sysctl.confoder /etc/sysctl.d/)
  • Folgen Sie der Docker-Anleitungim vorherigen Linkum gerouteten Verkehr zuzulassen

verwandte Informationen