场景:我有 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,以阻止任何流量。