
Transforma flujos UDP en flujos TCP (falsos) que pueden atravesar firewalls/NATs de Layer 3 & Layer 4 (NAPT).
Un ofuscador ligero y rápido de UDP a TCP.
Rust solo proporciona soporte de Nivel 3 para plataformas basadas en MIPS desde 2023. Por lo tanto, las compilaciones de Phantun para MIPS se construyen usando la cadena de herramientas nightly de Rust y se proporcionan solo con el mejor esfuerzo posible.
Phantun es un proyecto que ofusca paquetes UDP en conexiones TCP. Su objetivo es lograr el máximo rendimiento con un procesamiento y una sobrecarga de encapsulación mínimos.
Se usa comúnmente en entornos donde UDP está bloqueado o limitado pero TCP está permitido.
Phantun simplemente convierte un flujo de paquetes UDP en paquetes de flujo TCP ofuscados. La pila TCP utilizada por Phantun está diseñada para atravesar la mayoría de los dispositivos de firewall/NAT con y sin estado de capa 3/4. No podrá atravesar proxies de capa 7. Sin embargo, la ventaja de este enfoque es que no se producirán los problemas comunes de rendimiento de UDP sobre TCP, como las retransmisiones y el control de flujo. Las propiedades subyacentes de UDP, como la entrega fuera de orden, se conservan por completo incluso si la conexión termina viéndose como una conexión TCP desde la perspectiva de los firewalls/dispositivos NAT.
Phantun significa Phantom TUN, ya que es un ofuscador para tráfico UDP que realiza el trabajo suficiente para que este atraviese firewalls/NAT con estado como paquetes TCP.
Phantun está escrito en Rust 100% seguro. Se ha optimizado exhaustivamente para escalar bien en sistemas multinúcleo y no tiene problemas para saturar todos los recursos de CPU disponibles en una conexión rápida. Consulte la sección Rendimiento para ver los resultados de las pruebas comparativas.

En el siguiente ejemplo, se asume que el Servidor Phantun escucha las conexiones entrantes del Cliente Phantun en el
puerto 4567 (la opción --local para el servidor), y reenvía los paquetes UDP al servidor UDP en 127.0.0.1:1234
(la opción --remote para el servidor).
También se asume que el Cliente Phantun escucha los paquetes UDP entrantes en
127.0.0.1:1234 (la opción --local para el cliente) y se conecta al Servidor Phantun en 10.0.0.1:4567
(la opción --remote para el cliente).
Phantun crea una interfaz TUN tanto para el Cliente como para el Servidor. Para el Cliente, Phantun se asigna a sí mismo la dirección IP
192.168.200.2 y fcc8::2 por defecto.
Para el Servidor, asigna 192.168.201.2 y fcc9::2 por defecto. Por lo tanto, su kernel debe tener
el reenvío de IPv4/IPv6 habilitado y configurar las reglas apropiadas de iptables/nftables para NAT entre la dirección
de su NIC física y la dirección de la interfaz Tun de Phantun.
Puede personalizar el nombre de la interfaz Tun creada por Phantun y las direcciones asignadas. Ejecute
el ejecutable con la opción -h para ver cómo cambiarlos.
Otra forma de ayudar a entender esta topología de red (consulte el diagrama anterior para ver una ilustración de esta topología):
El Cliente Phantun es como una máquina con una dirección IP privada (192.168.200.2/fcc8::2) detrás de un enrutador.
Para que pueda llegar a Internet, necesitará aplicar SNAT a la dirección IP privada antes de que su tráfico
salga de la NIC.
El Servidor Phantun es como un servidor con una dirección IP privada (192.168.201.2/fcc9::2) detrás de un enrutador.
Para acceder a él desde Internet, necesita aplicar DNAT a su puerto de escucha en el enrutador
y cambiar la dirección IP de destino a donde el servidor está escuchando conexiones entrantes.
En esos casos, la máquina/iptables que ejecuta Phantun actúa como el "enrutador" que permite que Phantun se comunique con el exterior usando sus direcciones IP privadas.
A partir de Phantun v0.4.1, IPv6 es totalmente compatible tanto para el lado TCP como para el UDP.
Para especificar una dirección IPv6, use el siguiente formato: [::1]:1234 con
las opciones de línea de comandos. También se admite la resolución de registros AAAA. Ejecute el programa
con -h para ver las opciones detalladas sobre cómo controlar el comportamiento de IPv6.
Edite /etc/sysctl.conf, agregue net.ipv4.ip_forward=1 y ejecute sudo sysctl -p /etc/sysctl.conf.
También será necesario establecer net.ipv6.conf.all.forwarding=1.
El Cliente simplemente necesita tener SNAT habilitado en la interfaz física para traducir la dirección de Phantun a una que pueda usarse en la red física. Esto se puede hacer simplemente con masquerade.
Nota: cambie eth0 por el nombre real de la interfaz física
table inet nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
iifname tun0 oif eth0 masquerade
}
}
Nota: La regla anterior usa inet como tipo de familia de tabla, por lo que es compatible tanto con
IPv4 como con IPv6.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
El Servidor necesita aplicar DNAT al puerto de escucha TCP hacia la dirección de la interfaz TUN de Phantun.
Nota: cambie eth0 por el nombre real de la interfaz física y 4567 por
el número de puerto TCP real utilizado por el servidor Phantun
table inet nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
iif eth0 tcp dport 4567 dnat ip to 192.168.201.2
iif eth0 tcp dport 4567 dnat ip6 to fcc9::2
}
}