openSUSE 的 NAT 有问题,导致无法设置 DNS 透明代理。


#1

这条iptables转发dns请求的设置:

sudo iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 5353

是我google许多之后,发现人人都是这样做的。

然而,我在opensuse试了是不成功的,dig和nslookup报

;; reply from unexpected source: 本机ip#5353, expected 系统设置的dns#53

其他程序也上不了网。

dns代理软件试过了tor和dnscrypt-proxy。调试许久无果。尝试用容器运行debian 9 ,还是这条iptables设置+tor,就成功了。
所以,这是什么问题?是opensuse的安全机制吗?


#2

抓包发现NAT没有成功。opensuse 对udp的NAT有问题。

设置dns透明代理后,在debian上,用一个假DNS dig @2.3.4.3 twitter.com也能成功。
而opensuse上,必须dig @127.0.0.1才可以。
先前以为是resolve工具对响应ip的筛选问题,抓包才发现,debian上响应包被SNAT了,opensuse上没有SNAT。

之前我发现过另一个tftp的问题,看来也有关


#3

你考虑下是不是 firewalld 或者 SUSEFirewall2 的问题。或者是 openSUSE 和 Debian 的内置 route 不同导致的。看一下 route -n 是否相同


#4

我刚刚发现,把tor DNS设置成监听127.0.0.1,就可以了。原本我是设置成监听0.0.0.0。
debian也一样,看来和opensuse无关。

tcp没有这个问题的,仅udp有。
那要怎么办?如何才可两者兼得?