Das folgende Problem ist nur ein Teil der größeren Lösung, mit der ich ein Problem habe. Alle anderen Elemente scheinen bisher zu funktionieren, daher werde ich versuchen, ein sehr kleines Stück zu beschreiben, mit dem ich Probleme habe.
Ich habe eine Linux-Maschine mit tun0 (Tunneling-Schnittstelle) und eth0 (was mein Standard-Gateway zum Internet ist).
Ziel: Mein Ziel ist es, von tun0 eingehende Pakete zu empfangen und an das Standard-Gateway weiterzuleiten. Also eigentlich ganz einfacher NAT-Fall, bei dem ich das Internet mit tun0 "teilen" möchte, was die physische Schnittstelle vortäuscht.
Tun wurde erstellt mit
sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up
Ich habe es also zum Laufen gebracht, kann es anpingen usw. Außerdem habe ich eine C ++ - Anwendung, die an dieses TUN-Gerät angeschlossen ist und von diesem lesen und darauf schreiben kann. (fti: Hier ist ein Tutorial, dem ich gefolgt bin: http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )
Ich habe eine korrekte ICMP (Ping) -Anforderung für 8.8.8.8 in das Byte-Array in C ++ geschrieben. Jetzt schreibe ich es mit meinem Programm auf das tun0-Gerät. ICMP-Anfrage hat
- source (10.2.0.10) - Kernel kennt also die Route zurück (dasselbe Subnetz)
- Ziel (8.8.8.8) - DNS von Google
- korrekte Prüfsumme usw. (in Wireshark / TShark erscheint es korrekt auf tun0)
Dann habe ich folgende Routen:
iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT
Und hier stecke ich fest :( Das Paket wird nicht an das Standard-GW weitergeleitet (tshark sieht es nur auf tun0 als empfangen, was ich denke, dass es korrekt ist)
Was fehlt? Vielleicht ein alternativer Ansatz (aber es muss mit einem Tun-Gerät gemacht werden, und ich muss in der Lage sein, darauf zu r / w). Zusätzliche Information:
- Weiterleitung ist aktiviert (/ proc / sys / net / ipv4 / ip_forward)
- 8.8.8.8 ist über eth0 erreichbar (von lokal)
- Standard-Gateway ist korrekt (vom ISP über eth0)
- Ich habe versucht, rp_tables auszuschalten (echo 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter)
- und viele andere...
Vielen Dank im Voraus für Hinweise!