作者介绍

Phantun 可以把 UDP 流量伪装成 TCP。伪装意味着并不遵从 TCP 的任何流量控制等,只是单纯地把 IP 头中的 UDP 和 TCP 转换了一下。因此,Phantun 并不能经过任何常规的 TCP 代理,因为他们基本上都通过内核 TCP 处理,因此会处理 TCP 的流控。而 Phantun 在常规模式下并不会有常规的 TCP 流控相关包,因此会直接断流(收不到 ACK 包)。在这方面 UDP2Raw 倒是模拟了更多的 TCP 特性,因此可以通过 TCP 代理,但是成为了纯纯的 udp over tcp,性能低下。
最典型的应用是当 ISP 有 UDP 歧视的时候,可以以此减少丢包率;但是不能透过任何代理和防火墙。

打开方式

Phantun 不像 udp2raw 能够自动配置,我们需要按照 官网 的说明,一步步手动配置。

# 变量
server_port=4567
server_address=example.com
# 第一步:开启内核转发
echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
echo net.ipv6.conf.all.forwarding=1 > /etc/sysctl.conf # v6
sysctl -p
# 第二步:NAT
## Client:需要把 Phantun 地址 NAT 为 eth0 地址
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
## Server:需要把来自特定端口的流量全部转发到 TUN 设备,默认为 192.168.201.0/24 和 fcc9::/64 两个地址。
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport $server_port -j DNAT --to-destination 192.168.201.2
ip6tables -t nat -A PREROUTING -p tcp -i eth0 --dport $server_port -j DNAT --to-destination fcc9::2
# 第三步:赋予网络权限
setcap cap_net_admin=+pe phantun_server
setcap cap_net_admin=+pe phantun_client
# 第四步:启动
phantun_server --local $server_port --remote <原本的udp服务器:端口>
phantun_client --local <本地udp监听地址> --remote $server_address:$server_port