Linux Tun-Schnittstelle Paket-Routing

Linux Tun-Schnittstelle Paket-Routing

Ich habe Fragen zum IP-Paketfluss für das folgende Szenario.

Das Szenario ist:

  1. Eine tun0 (10.0.0.2/8) Schnittstelle und eine physische Wireless LAN Karte wlan0 (IP Adresse nicht fix) auf der Clientseite, wlan0 könnte sich mit dem Internet verbinden,
  2. Eine weitere tun0-Schnittstelle (10.0.0.1/8) und eine physische Ethernet-Karte eth0 (192.168.1.38/24) auf der Serverseite (Ubuntu 12.04 amd64). eth0 befindet sich in einem privaten Netzwerk hinter einer NAT-Firewall und kann über die Firewall eine Verbindung zum Internet herstellen (Firewall als Gateway).
  3. echo 1 > /proc/sys/net/ipv4/ip_forwardhaben " " auf der Serverseite ausgeführt ,
  4. iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADEhaben " " auf der Serverseite ausgeführt ,

Hier ist das Diagramm des Szenarios:

---------------          ----------------
|             |          |              |
| client tun0 |----------| client wlan0 |
|  10.0.0.2   |          |  ip not fix  |
|             |          |              |
---------------          ----------------
                                |
                                |

                             internet

                                |
                                |
                         ----------------
                         |              |
                         |   firewall   |
                         |   (gateway)  |
                         | 192.168.1.1  |
                         |              |
                         ----------------
                                |
                                | private network
                                | 192.168.1.0/24
                                |
---------------          ----------------
|             |          |              |
| server tun0 |----------| server eth0  |
|  10.0.0.2   |          | 192.168.1.38 |
|             |          |              |
---------------          ----------------

Ich habe zwei sehr einfache VPN-ähnliche Client/Server-Programme verwendet, um IP-Pakete der beiden Tun0-Schnittstellen zu lesen/schreiben und einen Tunnel zwischen WLAN0 und ETH0 zu erstellen, sodass IP-Pakete von 10.0.0.2 10.0.0.1 erreichen können und umgekehrt (z. B. könnte FTP von 10.0.0.1 nach 10.0.0.2 ausgeführt werden).

Wenn ich jedoch den Client tun0 (10.0.0.2) zum Durchsuchen von Webseiten verwenden möchte, stammt die HTTP-Anforderung von 10.0.0.2 und hat das Ziel einer Internet-IP-Adresse (sicherlich nicht 10.0.0.1). Die HTTP-Anforderung (glaube ich) würde nach Erreichen des Servers tun0 (10.0.0.1) an den Server eth0 weitergeleitet (da ip_forward aktiviert ist und ich glaube, diese weitergeleitete HTTP-Anforderung hätte immer noch eine Quell-IP-Adresse von 10.0.0.2, korrigieren Sie mich, wenn ich falsch liege) und dort findet NAT statt, um die HTTP-Anforderung als von eth0 kommend neu zu verpacken (d. h. die Quell-IP-Adresse ändert sich zu 192.168.1.38, da ich den Befehl iptables ausgeführt habe) und dann geht die neu verpackte HTTP-Anforderung durch die Firewall (und dann das Internet) zu ihrem Ziel.

Wenn die HTTP-Antwort (von der Website) den Server eth0 erreicht, sollte dort ein Reverse-NAT stattfinden. Meine Frage ist:

  1. würde das Reverse NAT die Ziel-IP-Adresse der HTTP-Antwort auf 10.0.0.2 zurücksetzen,
  2. Woher weiß der Server eth0, wohin die Reverse-NAT-HTTP-Antwort weitergeleitet werden soll?
  3. Würde eth0 die HTTP-Antwort an den Server tun0 (10.0.0.1) weiterleiten, da die Ziel-IP-Adresse der Antwort per Reverse-NAT auf 10.0.0.2 gesetzt ist?
  4. muss ich serverseitig eine Route hinzufügen, um die Reverse-NATed-HTTP-Antwort richtig zu routen/weiterzuleiten? wenn ja, wie?
  5. muss ich serverseitig einige iptables-Regeln hinzufügen, um ein ordnungsgemäßes Routing/Weiterleiten der Reverse-NATed-HTTP-Antwort zu gewährleisten? Wenn ja, wie?

Antwort1

Angenommen, Ihr Client sendet den gesamten Datenverkehr über tun0, müssen Sie auf der Serverseite Folgendes hinzufügen (nachdem Sie /proc/sys/net/ipv4/ip_forward aktiviert haben):

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

Wenn Sie nach diesem Schritt von Ihrem Client aus Webseiten durchsuchen, sieht der Paketfluss folgendermaßen aus:

  1. Der Client sendet ein Paket an 10.0.0.1.
  2. Auf der Serverseite wird das auf tun0 empfangene Paket von 10.0.0.2 in 192.168.1.38 übersetzt.
  3. In der NAT-Tabelle wird ein Zuordnungseintrag erstellt.
  4. Das Paket wird über 192.168.1.1 (Gateway) an das Internet gesendet.
  5. Die Antwort wird unter 192.168.1.38 empfangen.
  6. Reverse NAT erfolgt gemäß dem in Schritt 3 erstellten Mapping-Eintrag.
  7. Das Antwortpaket wird zurück an 10.0.0.2 geleitet.

Ich hoffe, ich übersehe keinen wichtigen Schritt :)

verwandte Informationen