![如何禁止局域网内的电脑进行DNS查询? (在PC -> VPN网关场景中)](https://linux22.com/image/143177/%E5%A6%82%E4%BD%95%E7%A6%81%E6%AD%A2%E5%B1%80%E5%9F%9F%E7%BD%91%E5%86%85%E7%9A%84%E7%94%B5%E8%84%91%E8%BF%9B%E8%A1%8CDNS%E6%9F%A5%E8%AF%A2%EF%BC%9F%20%EF%BC%88%E5%9C%A8PC%20-%3E%20VPN%E7%BD%91%E5%85%B3%E5%9C%BA%E6%99%AF%E4%B8%AD%EF%BC%89.png)
场景:我有 2 台电脑,它们在 LAN 中通过以太网相互连接,其中一台电脑配置为网关,将另一台电脑的流量通过隧道传输到 VPN 服务。一切似乎都有效。流量通过 VPN 服务进行隧道传输,当网关连接到 VPN 时,我也没有 DNS 泄漏。但是,如果我断开 VPN,那么本地网络上的另一台电脑仍然可以以某种方式进行 dns 查询,即使无法通过它建立其他与互联网的连接。
我怎样才能避免这种情况发生?仅当建立 VPN 连接时才允许 dns 查询。编辑:(并且只能通过VPN的dns服务器。我相信一旦我断开VPN连接,dns请求就会通过我的isp的dns服务器发出,即使我在网关上配置了bind9服务器。但我可能是错的。)
我在网关上所做的如下:我设置了 ipv4 转发和一些 iptables 规则
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
我还安装了一个bind9服务器并将其配置为将dns查询转发到vpns dns(因为我有dns泄漏)
我的猜测是我必须丢弃所有不遵循上述规则的网络流量
例如
sudo iptables -P FORWARD DROP
sudo iptables -P INPUT DROP
但这完全破坏了我的联系。有任何想法吗?
答案1
删除所有不发送至 VPN 的 DNS 查询。 DNS 可以使用 UDP 端口 53 或 TCP 端口 53。
iptables -A FORWARD -i eth0 ! -o tun0 -p udp --dport 53 -j DROP
iptables -A FORWARD -i eth0 ! -o tun0 -p tcp --dport 53 -j DROP
所有来自且想要通过目标端口 53 以外eth0
的接口离开的数据包都将被丢弃。tun0
您可能需要在丢弃数据包之前记录它们以进行分析。
您可能想使用REJECT
而不是DROP
让客户知道不要等待答案。
您可能想要丢弃或拒绝所有数据包,而不仅仅是端口 53,以阻止任何流量。