我很难弄清楚这个问题。
我有以下网络:
(互联网)--(防火墙)--(PC1(Ubuntu 20.04))--(PC2(Fedora,192.168.0.2))
PC1有两个网卡,(enp4s0)面向防火墙,(eno0)面向PC2
显示的防火墙正在阻止所有传出 DNS 请求,我无法更改这一点。 PC2 需要访问 8.8.8.8,我也无法更改它。但是,只要 PC1 使用内部 DNS 服务器(我们将其称为 192.169.100.100)并且运行以下 UFW 配置,它就可以访问互联网。注意
# Nat table rules
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Forward traffic from eno1 through enp4s0
-A PREROUTING -i enp4s0 -p udp --dport 53 -j DNAT --to-destination 192.169.100.100
-A POSTROUTING -s 192.168.0.0/24 -o enp4s0 -j MASQUERADE
# process the nat table rules
COMMIT
正如您所看到的,所有流量都是从 PC2 通过 PC1 转发的。效果很好。 PC2 可以 ping 通 8.8.8.8,没有问题。但是,由于 PC2 尝试使用 8.8.8.8 解析地址,并且这些地址被防火墙阻止,因此我无法按要求使用 PC2。我想做的是将 8.8.8.8 的任何 DNS 请求路由到 192.169.100.100,以便它们解析。
那可能吗?如果是这样,请告诉我我做错了什么,因为我很困惑。我已经盯着wireshark看数据包尝试到达8.8.8.8有一段时间了。
谢谢!
答案1
安装bind9或其他可以在Ubuntu机器上转发请求的dns服务器,并将Fedora的名称服务器条目指向Ubuntu机器的IP。
Debian 及其衍生版本(如 Ubuntu)上默认安装的 bind9 是充当查询根服务器的缓存名称服务器。如果您采用此路线并且 Ubuntu 盒子无法访问它们,请考虑使用forwarders
中的选项/etc/bind/named.conf.options
请注意,由于 systemd“需要”工作的方式,您已经有了一个内部代理 dns 服务器,但我不知道是否可以将其作为 LAN 上的服务公开。