
Transforma fluxo UDP em fluxos TCP (falsos) que podem atravessar firewalls/NATs de Camada 3 e Camada 4 (NAPT).
Um ofuscador UDP para TCP leve e rápido.
O Rust fornece apenas suporte Tier 3 para plataformas baseadas em MIPS desde 2023. As compilações MIPS do Phantun são, portanto, construídas usando a toolchain nightly do Rust e fornecidas apenas com o melhor esforço.
Phantun é um projeto que ofusca pacotes UDP em conexões TCP. Ele visa alcançar o máximo desempenho com o mínimo de processamento e sobrecarga de encapsulamento.
É comumente usado em ambientes onde o UDP é bloqueado/limitado, mas o TCP é permitido.
Phantun simplesmente converte um fluxo de pacotes UDP em pacotes de fluxo TCP ofuscados. A pilha TCP usada pelo Phantun é projetada para atravessar a maioria dos firewalls/dispositivos NAT com estado/sem estado L3/L4. Ele não será capaz de atravessar proxies L7. No entanto, a vantagem dessa abordagem é que nenhum dos problemas comuns de desempenho do UDP sobre TCP, como retransmissões e controle de fluxo, ocorrerá. As propriedades subjacentes do UDP, como entrega fora de ordem, são totalmente preservadas, mesmo que a conexão acabe parecendo uma conexão TCP do ponto de vista de firewalls/dispositivos NAT.
Phantun significa Phantom TUN, pois é um ofuscador de tráfego UDP que faz apenas o trabalho necessário para fazê-lo passar por firewalls/NATs com estado como pacotes TCP.
Phantun é escrito em Rust 100% seguro. Ele foi extensivamente otimizado para escalar bem em sistemas multi-core e não tem problema em saturar todos os recursos de CPU disponíveis em uma conexão rápida. Veja a seção Desempenho para resultados de benchmarks.

Para o exemplo abaixo, assume-se que o Servidor Phantun escuta conexões de entrada do Cliente Phantun na porta 4567 (a opção --local para o servidor), e encaminha pacotes UDP para o servidor UDP em 127.0.0.1:1234 (a opção --remote para o servidor).
Assume-se também que o Cliente Phantun escuta pacotes UDP de entrada em 127.0.0.1:1234 (a opção --local para o cliente) e se conecta ao Servidor Phantun em 10.0.0.1:4567 (a opção --remote para o cliente).
Phantun cria uma interface TUN tanto para o Cliente quanto para o Servidor. Para o Cliente, o Phantun atribui a si mesmo os endereços IP 192.168.200.2 e fcc8::2 por padrão. Para o Servidor, atribui 192.168.201.2 e fcc9::2 por padrão. Portanto, seu kernel deve ter o encaminhamento IPv4/IPv6 habilitado e configurar regras apropriadas de iptables/nftables para NAT entre o endereço da sua placa de rede física e o endereço da interface Tun do Phantun.
Você pode personalizar o nome da interface Tun criada pelo Phantun e os endereços atribuídos. Execute o executável com a opção -h para ver como alterá-los.
Outra forma de ajudar a entender essa topologia de rede (veja o diagrama acima para uma ilustração desta topologia):
O Cliente Phantun é como uma máquina com endereço IP privado (192.168.200.2/fcc8::2) atrás de um roteador. Para que ele alcance a Internet, você precisará fazer SNAT do endereço IP privado antes que seu tráfego saia da placa de rede.
O Servidor Phantun é como um servidor com endereço IP privado (192.168.201.2/fcc9::2) atrás de um roteador. Para acessá-lo a partir da Internet, você precisa fazer DNAT da porta de escuta no roteador e alterar o endereço IP de destino para onde o servidor está escutando conexões de entrada.
Nesses casos, a máquina/iptables executando o Phantun atua como o 'roteador' que permite ao Phantun se comunicar com o exterior usando seus endereços IP privados.
A partir do Phantun v0.4.1, o IPv6 é totalmente suportado tanto para os lados TCP quanto UDP. Para especificar um endereço IPv6, use o seguinte formato: [::1]:1234 com as opções da linha de comando. A resolução de registros AAAA também é suportada. Execute o programa com -h para ver opções detalhadas sobre como controlar o comportamento IPv6.
Edite /etc/sysctl.conf, adicione net.ipv4.ip_forward=1 e execute sudo sysctl -p /etc/sysctl.conf.
net.ipv6.conf.all.forwarding=1 também precisará ser configurado.
O Cliente simplesmente precisa ter o SNAT habilitado na interface física para traduzir o endereço do Phantun em um que possa ser usado na rede física. Isso pode ser feito simplesmente com masquerade.
Nota: altere eth0 para o nome real da interface física
table inet nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
iifname tun0 oif eth0 masquerade
}
}
Nota: A regra acima usa inet como tipo de família de tabela, portanto é compatível com uso IPv4 e IPv6.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
O Servidor precisa fazer DNAT da porta de escuta TCP para o endereço da interface TUN do Phantun.
Nota: altere eth0 para o nome real da interface física e 4567 para o número real da porta TCP usada pelo 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
}
}
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination 192.168.201.2
ip6tables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination fcc9::2
Não é aconselhável executar aplicações voltadas para a rede como usuário root. O Phantun pode ser executado completamente como usuário não-root com a capacidade cap_net_admin.