我有一个 OpenVPN 服务器,它只有 IPv4。我有一个 OpenVPN 客户端,它有 IPv6 和 IPv4。
连接到 VPN 时,客户端会面临“IPv6 泄漏”的风险。当客户端访问启用 IPv6 的网站时,互联网流量不会通过 VPN 隧道,其真实 IP 地址会暴露给相关的 IPv6 网站。
我如何通过 OpenVPN 服务器推送参数,以便关闭/阻止 IPv6 流量,或者将其路由到无处,以便他的互联网将故障转移到 IPv4,目的是在连接到仅 IPv4 的 VPN 服务器时阻止 IPv6 泄漏。
注意:我知道如何在 Windows 和 Mac 中手动阻止 IPv6 流量,有很多关于此的文章。我想通过 OpenVPN 服务器配置来实现这一点,或者如果前者不可行,则通过 OpenVPN 客户端配置来实现这一点。
(您可以在 ipv6leak dot com 测试是否存在 IPv6 泄漏)
谢谢
答案1
虽然最正确的答案是 Michael Hampton 的评论,即您应该将 IPv6 引入 OpenVPN 服务器,但您可以让 OpenVPN 服务器推送 2000::/3 的路由,然后拒绝任何到达的 IPv6 流量。您可能需要仔细考虑您发送的拒绝类型,以使客户端回退到 IPv4,而不是仅仅说“lolidunno”并放弃,但这将提供比将所有 IPv6 流量丢弃在地板上更好的用户体验(除非您的所有客户端都实施 Happy Eyeballs,在这种情况下,请使用DROP
)。
答案2
我遇到了同样的问题,看来 OpenVPN 现在有办法解决这个问题。这是一个OpenVPN 文档中的片段。
--block-ipv6
On the client, instead of sending IPv6 packets over the VPN tunnel, all IPv6 packets are
answered with an ICMPv6 no route host message. On the server, all IPv6 packets from
clients are answered with an ICMPv6 no route to host message. This options is intended for
cases when IPv6 should be blocked and other options are not available. --block-ipv6 will
use the remote IPv6 as source address of the ICMPv6 packets if set, otherwise will use
fe80::7 as source address.
For this option to make sense you actually have to route traffic to the tun interface. The
following example config block would send all IPv6 traffic to OpenVPN and answer all requests
with no route to host, effectively blocking IPv6 (to avoid IPv6 connections from
dual-stacked clients leaking around IPv4-only VPN services).
Client config
--ifconfig-ipv6 fd15:53b6:dead::2/64 fd15:53b6:dead::1
--redirect-gateway ipv6
--block-ipv6
Server config
Push a "valid" ipv6 config to the client and block on the server
--push "ifconfig-ipv6 fd15:53b6:dead::2/64 fd15:53b6:dead::1"
--push "redirect-gateway ipv6"
--block-ipv6