使用 iptables 防止 dns 泄漏

使用 iptables 防止 dns 泄漏

我启动 openvpn 服务,当我连接到服务器时,我会执行以下命令:

sudo iptables -A INPUT -j DROP'
sudo iptables -A OUTPUT -j DROP
sudo iptables -A OUTPUT -o tun0 -j ACCEPT
read -p "PRESS ANY KEY TO STOP" VAR //just for easily reversing the drops when i want without bashing another file
sudo iptables -I INPUT -j ACCEPT
sudo iptables -I OUTPUT -j ACCEPT

当我测试VPN时https://ipleak.net/,没有泄漏。但是当我尝试这个时https://www.dnsleaktest.com/,有几处泄漏。

我使用 wireshark 捕获了所有请求和回复,我看到了对端口 53 的 dns 请求,然后是 dns 响应。我尝试使用 iptables 阻止对端口 53 的传出,但仍然发生 dns 查询。我还将安全脚本 2 添加到 vpn 文件中以更新 resolv conf 并禁用了 ip6。

我应该怎么做才能防止 iptables 甚至 ufw 的 dns 泄漏?

答案1

当使用 VPN 连接的系统使用本地 Internet 服务提供商的 DNS 服务器进行 DNS 查询,而不是通过 VPN 隧道将 DNS 请求传递到 VPN 提供商的 DNS 服务器(或您选择的任何其他 DNS 服务器)时,就会发生 DNS 泄漏。

如果您只是丢弃非 VPN 网络接口上的传出 DNS 请求,则使用主机名的网络访问可能会变得非常慢(因为每个新连接之前必要的 DNS 查询必须在备用 DNS 服务器之前超时,希望由VPN,已尝试)或有效地完全停止(如果您的本地 DNS 解析器尚未从 VPN 客户端收到新的 DNS 服务器,并且仅继续重试您已阻止的 ISP 服务器)。

您不应只是尝试“阻止泄漏”,而应该找出为什么在激活 VPN 连接时 VPN 提供商的 DNS 服务器未配置为独占使用。

您应该首先验证激活 VPN 连接后,引用 ISP 的 DNS 服务器的设置是否会被 VPN 客户端配置的其他 DNS 服务器所替换。

为了知道应该在哪里查看,首先运行grep hosts /etc/nsswitch.conf并查看输出。其格式如下:

hosts:  <some keywords>

这定义了用于解析主机名的机制。

<some keywords>应该用至少files(指/etc/hosts)和dns或来代替resolve。可能还有其他关键字。

dns表示标准 glibc DNS 解析器库,它将在/etc/resolv.conf.在 Debian 相关系统(包括 *Ubuntu、Mint 等)上,此配置文件通常由工具管理,resolvconf而不是直接应用更改/etc/resolv.conf。该resolvconf工具跟踪与每个网络接口关联的 DNS 设置,以便/etc/resolv.conf根据可配置的网络接口优先级生成整体,并确保在网络接口关闭时恢复适当的 DNS 设置。

如果您的系统使用resolvconf,请阅读man 5 interface-order并检查/etc/resolvconf/interface-order配置文件,以验证您的 VPN 接口的优先级是否高于运行 VPN 连接的物理接口。

resolve表示systemd-resolved使用新的;运行resolvectl status查看其配置。这通常意味着其中/etc/resolv.conf只有一行nameserver 127.0.0.53,将使用旧 glibc 解析器完成的任何 DNS 查询重定向回systemd-resolved.

resolvconf如果 VPN 客户端在使用其中一个或两个时不知道该工具或机制的存在systemd-resolved,结果将是一团糟。不幸的是,如果您的系统上使用了这些工具,您需要验证您的 openvpn 服务是否能够与这些工具完全集成。

该守护进程也有可能NetworkManager用于网络接口的整体控制。该守护进程可以使用resolvconf和/或,或者如果您的系统上未使用这些其他组件,则直接systemd-resolved更新。/etc/resolv.conf

如果不知道您的 Linux 发行版的名称和版本以及当前的配置,就很难提供更多建议。

如果您想要更好的答案,请编辑您的问题以包含尽可能多的以下信息:

  • 您的 Linux 发行版的名称和版本?
  • 是否是网络管理器?
  • hosts:你的那行说什么/etc/nsswitch.conf
  • 您的 OpenVPN 服务是否与NetworkManager和/或集成resolvconf,还是直接编辑/etc/resolv.conf

相关内容