OpenWRT Chaos Calmer Linux 3.18.27 mips 运行 ss-tunnel,监听 0.0.0.0:5301,转发至 8.8.8.8:53 先尝试添加这个 iptables 规则: iptables -t nat -A OUTPUT \! -o lo -p udp --dport 53 -j REDIRECT --to-port 5301 结果居然不能用,nslookup 提示超时。 这个时候,tcpdump -i lo 保存 pcap 文件,用 wireshark 打开,发现 DNS 请求包的目的 IP 和端口已经被改为 127.0.0.1:5301,但是 DNS 响应包的源 IP 和端口却还是[本机 WAN 口 IP]:5301(应该被修改为[程序使用的 DNS 服务器 IP]:53 才对吧?),紧跟着的下一个包就是拒绝掉这个 UDP 响应包的 ICMP port unreachable。
然后删掉这个 iptables 规则,换用这一条: iptables -t nat -A OUTPUT \! -o lo -p udp --dport 53 -j DNAT --to-destination [本机 WAN 口 IP]:5301 这下正常了。tcpdump 抓包,可以看到 DNS 请求包和响应包的目的 IP 端口 /源 IP 端口都被正确修改了。 但是 WAN 口 IP 不固定啊……况且我的另一台 Debian VPS 上也在用这种 REDIRECT,没发现有这种怪毛病啊。
@BOYPT man iptables: .... nat: This table is consulted when a packet that creates a new connection is encountered. It consists of four built-ins:
PREROUTING (for altering packets as soon as they come in), INPUT (for altering packets destined for local sockets), OUTPUT (for altering **locally-generated** packets before routing), and POSTROUTING (for altering packets as they are about to go out).