我在 iptables 添加了如下两条规则:
iptables -t nat -A OUTPUT -m owner --uid-owner {0} -j RETURN
iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 1111
将 DNS 转发到了我自己的程序(监听 1111 ),然后在我自己的程序里面从 UDP 包里拆出了域名,并且再调用 InetAddress.GetByName(domain).HostAddress 希望能再利用系统自己的 DNS 解析出 IP (我扮演了一个代理的角色),但是发现这个调用又被转发到了自己于是形成了无限递归,可是我第一条规则应该已经跳过了自己发出的任何数据包啊,代理 80 之类的都是没问题的,不知道为什么 DNS 会这样