
Wandelt UDP-Streams in (gefälschte) TCP-Streams um, die durch Layer 3 & Layer 4 (NAPT) Firewalls/NATs hindurchgehen können.
Ein leichter und schneller UDP-zu-TCP-Verschleierer.
Rust bietet für MIPS-basierte Plattformen nur Tier-3-Unterstützung seit 2023. Phantuns MIPS-Builds werden daher mit dem nächtlichen Rust-Toolchain erstellt und nur auf bestmöglicher Basis bereitgestellt.
Phantun ist ein Projekt, das UDP-Pakete in TCP-Verbindungen verschleiert. Es zielt darauf ab, maximale Leistung bei minimalem Verarbeitungs- und Kapselungsaufwand zu erreichen.
Es wird häufig in Umgebungen eingesetzt, in denen UDP blockiert/gedrosselt wird, TCP jedoch erlaubt ist.
Phantun wandelt einfach einen Strom von UDP-Paketen in verschleierte TCP-Stream-Pakete um. Der von Phantun verwendete TCP-Stack ist so konzipiert, dass er die meisten L3/L4-zustandsbehafteten/zustandslosen Firewalls/NAT-Geräte passieren kann. Er wird nicht in der Lage sein, L7-Proxys zu passieren. Der Vorteil dieses Ansatzes ist jedoch, dass keiner der üblichen Leistungskiller von UDP über TCP, wie Neuübertragungen und Flusskontrolle, auftritt. Die zugrunde liegenden UDP-Eigenschaften wie außerordentliche Zustellung bleiben vollständig erhalten, auch wenn die Verbindung aus der Perspektive von Firewalls/NAT-Geräten wie eine TCP-Verbindung aussieht.
Phantun bedeutet Phantom TUN, da es ein Verschleierer für UDP-Verkehr ist, der gerade genug Arbeit leistet, um ihn als TCP-Pakete durch zustandsbehaftete Firewalls/NATs zu bringen.
Phantun ist zu 100 % in sicherem Rust geschrieben. Es wurde umfassend optimiert, um auf Multi-Core-Systemen gut zu skalieren, und hat keine Probleme damit, alle verfügbaren CPU-Ressourcen bei einer schnellen Verbindung auszulasten. Siehe den Abschnitt Leistung für Benchmark-Ergebnisse.

Für das folgende Beispiel wird angenommen, dass der Phantun-Server auf eingehende Phantun-Client-Verbindungen auf
Port 4567 hört (die --local-Option für den Server) und UDP-Pakete an den UDP-Server unter 127.0.0.1:1234 weiterleitet
(die --remote-Option für den Server).
Es wird auch angenommen, dass der Phantun-Client auf eingehende UDP-Pakete unter
127.0.0.1:1234 hört (die --local-Option für den Client) und sich mit dem Phantun-Server unter 10.0.0.1:4567 verbindet
(die --remote-Option für den Client).
Phantun erstellt ein TUN-Interface sowohl für den Client als auch für den Server. Für den Client weist sich Phantun standardmäßig die IP-Adresse
192.168.200.2 und fcc8::2 zu.
Für den Server weist es standardmäßig 192.168.201.2 und fcc9::2 zu. Daher muss Ihr Kernel
IPv4/IPv6-Weiterleitung aktiviert haben und entsprechende iptables/nftables-Regeln für NAT zwischen Ihrer physischen
NIC-Adresse und der Adresse des Phantun-Tun-Interfaces eingerichtet sein.
Sie können den Namen des von Phantun erstellten Tun-Interfaces und die zugewiesenen Adressen anpassen. Bitte
führen Sie die ausführbare Datei mit der Option -h aus, um zu sehen, wie Sie diese ändern können.
Eine weitere Möglichkeit, diese Netzwerktopologie zu verstehen (siehe das obige Diagramm für eine Veranschaulichung dieser Topologie):
Der Phantun-Client ist wie eine Maschine mit privater IP-Adresse (192.168.200.2/fcc8::2) hinter einem Router.
Damit er das Internet erreichen kann, müssen Sie die private IP-Adresse SNAT-en, bevor ihr Verkehr
die NIC verlässt.
Der Phantun-Server ist wie ein Server mit privater IP-Adresse (192.168.201.2/fcc9::2) hinter einem Router.
Um ihn aus dem Internet zu erreichen, müssen Sie seinen listening Port auf dem Router DNAT-en
und die Ziel-IP-Adresse auf die Adresse ändern, auf der der Server auf eingehende Verbindungen hört.
In diesen Fällen fungiert die Maschine/die iptables, die Phantun ausführt, als der "Router", der es Phantun ermöglicht, mit der Außenwelt über seine privaten IP-Adressen zu kommunizieren.
Seit Phantun v0.4.1 wird IPv6 sowohl für die TCP- als auch für die UDP-Seite vollständig unterstützt.
Um eine IPv6-Adresse anzugeben, verwenden Sie das folgende Format: [::1]:1234 mit
den Befehlszeilenoptionen. Das Auflösen von AAAA-Einträgen wird ebenfalls unterstützt. Bitte führen Sie das Programm
mit -h aus, um detaillierte Optionen zur Steuerung des IPv6-Verhaltens zu sehen.
Bearbeiten Sie /etc/sysctl.conf, fügen Sie net.ipv4.ip_forward=1 hinzu und führen Sie sudo sysctl -p /etc/sysctl.conf aus.
net.ipv6.conf.all.forwarding=1 muss ebenfalls gesetzt werden.
Der Client benötigt lediglich SNAT auf dem physischen Interface, um Phantuns Adresse in eine zu übersetzen, die im physischen Netzwerk verwendet werden kann. Dies kann einfach mit Masquerade erfolgen.
Hinweis: Ändern Sie eth0 in den tatsächlichen Namen des physischen Interfaces.
table inet nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
iifname tun0 oif eth0 masquerade
}
}
Hinweis: Die obige Regel verwendet inet als Tabellenfamilientyp, daher ist sie sowohl mit
IPv4 als auch IPv6 kompatibel.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Der Server muss den TCP-Listening-Port auf die Adresse des Phantun-TUN-Interfaces DNAT-en.
Hinweis: Ändern Sie eth0 in den tatsächlichen Namen des physischen Interfaces und 4567 in
die tatsächliche TCP-Portnummer, die vom Phantun-Server verwendet wird.