Ein einfaches IPIP-Weiterleitungsprogramm, das UDP-, TCP- und ICMP-Pakete unterstützt. Dieses Programm verwendet rohe AF_PACKET-Sockets. Wenn ein Client ein Paket mit der Ziel-IP als Abhör-IP des Programms an die Weiterleitungsmaschine sendet und der Port über 1024 liegt, erstellt er ein IPIP-Paket, indem er einen äußeren IP-Header hinzufügt, sendet es an die Ziel-IP und führt NAT durch der IPIP-Endpunkttunnel. Wenn das Programm IPIP-Pakete empfängt, sendet es diese an den Client zurück.
Hinweis – Derzeit werden nur Pakete gesendet, wenn der UDP/TCP-Port über 1024 liegt. Ich weiß, dass dies nicht praktisch ist, aber ich plane, in einem von mir geplanten zukünftigen Programm eine Funktion zu implementieren, die nur bestimmte Ports über eine Konfigurationsdatei ausschließt machen. Ich gebe den Code für dieses Programm frei, um einfach zu zeigen, wie die IPIP-Weiterleitung erfolgt.
Hinweis – Hierbei werden AF_PACKET-Sockets verwendet und der Kernel kopiert das Paket in den Benutzerbereich. Ich habe vor, irgendwann in der Zukunft die Verwendung von DPDK in Betracht zu ziehen, was zu einer besseren Leistung führen dürfte.
Hier ist die Verwendung des Programms:
./IPIPForward <Listen IP> <Listen Port> <Destination IP> <Nat IP> <Nat Port> <Interface> [<Thread Count>]
Hier ist ein Beispiel:
./IPIPForward 10.50.0.3 27015 10.50.0.4 10.2.0.5 27015 ens18 4
Ich habe dieses Programm mit GCC 7 kompiliert.
Folgendes habe ich zum Erstellen des Programms verwendet:
gcc-7 -g IPIPForward.c -g common.c -o IPIPForward -lpthread
Ich habe auch Warnungen eingefügt, um sicherzustellen, dass ich dort nichts übersehen habe. Dies ist jedoch der grundlegende Build-Befehl.