我正在使用 Ubuntu 18.04 Server 并尝试制作路由器。当我执行以下 iptables 脚本(在 Ubuntu 16.04 上完美运行)时,命令行中的 DNS 查找停止工作。我 ping 了 IP 地址,但没有 DNS 名称。显然有些东西与 16.04 相比有所变化,但不知道是什么。
编辑:我开始逐行执行并确定罪魁祸首是这样的:
iptables -t nat -A POSTROUTING -j MASQUERADE
但还是不知道为什么(它适用于以前的 Ubuntu 版本 - 16.04、14.04、12.04)
ping 输出为:
# ping google.com
ping: google.com: Temporary failure in name resolution
如果我重新启动而不使用这个脚本,它就会起作用:
# ping google.com
PING google.com (172.217.169.142) 56(84) bytes of data.
64 bytes from sof02s32-in-f14.1e100.net (172.217.169.142): icmp_seq=1 ttl=57 time=2.92 ms
答案1
好的,我来回答我自己的问题。解决方法是在 iptables 行中添加一个外部接口,因此现在看起来像这样:
ExtIF=eno1 ##Change this to the name of your external (Internet) interface
iptables -t nat -A POSTROUTING -o $ExtIF -j MASQUERADE
也许一些 iptables 专家能够在评论中回答为什么 DNS 查找仅在 Ubuntu 18.04 中从本地主机失败。