在 VPS 上使用 IPv6 的 OpenVPN

在 VPS 上使用 IPv6 的 OpenVPN

我正在尝试在 Debian Sid 上使用 OpenVPN 创建 IPv6 隧道。 IPv4 工作正常,但我无法让 IPv6 工作。我可以使用 IPv6 对服务器和其他客户端执行 ping 操作,但无法从客户端访问互联网。

我研究了好几个小时,但还是没有完全理解 IPv6,所以这个问题可能很容易解决。如果能给出一些解释就好了!

问题是我使用的是 VPS,并且我只有一个 /64 子网来处理所有内容:

2a00:a123:4:b5::/64

所以我想我可以将其添加到我的 OpenVPN 配置中(/112为 OpenVPN 创建一个较小的子网):

server-ipv6 2a00:a123:4:b5:80::/112
push "route-ipv6 2000::/3"

现在,当我跑步时,ifconfig tun0我得到:

inet6 addr: 2a00:d880:6:f2:80::1/112 Scope:Global

我的客户得到:

client1,10.8.0.2,2a00:d880:6:f2:80::1000
client2,10.8.0.3,2a00:d880:6:f2:80::1001

我在 SolusVM CP 中添加了所有这 4 个 IP(我不知道这是否有必要,我认为这是为了路由回 VPS)。我也设置net.ipv6.conf.all.forwarding1.

尽管如此,我仍无法从客户端通过 IPv6 访问互联网。如果我traceroute6 google.com在客户端上运行,我会获得服务器 IP,但此后只会超时。

我也发现了这个类似的问题,但是使用以下命令 NDP 代理似乎对我不起作用:

ip neigh add proxy 2a00:d880:6:f2:80::1000 dev tun0
ip neigh add proxy 2a00:d880:6:f2:80::1001 dev tun0

答案1

我也不认为 SNAT 是正确的选择。我有一个类似的问题,发现我只需要正确的转发规则并进行一些调整。本质上,您只需将 IPv6 流量从 OpenVPN 接口转发到已设置 IPv6 的外部 WAN 接口。

ip6tables 允许来自 OpenVPN 的 IPv6 流量通过我的 VPS

对于你的情况,我认为这应该效果更好:

ip6tables -A FORWARD -m state --state NEW -i tun+ -o $WAN -s 2a00:a123:4:b5::/64 -j ACCEPT
ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

我假设您使用路由(tun)而不是以太网桥接(tap)

似乎您只有一个 /64 块,这应该是您需要的唯一 FORWARD 规则。

$WAN 是具有 IPv6 连接的外部接口的占位符。我的 VPS 上没有本机 IPv6,所以在我的例子中它是隧道接口 sat1 (CentOS)。看来您已经获得了 IPv6 块,那么它将是任何外部 WAN 接口。

一旦正确的转发规则到位,IPv6 流量就可以流过而不会被防火墙阻止。在大多数情况下,NAT 不需要与 IPv6 相关。

答案2

首先你需要启用proxy_ndp:

 sysctl -w net.ipv6.conf.all.proxy_ndp=1

(并在 中添加相应的行/etc/sysctl.conf)。

那么正确的命令是:

ip neigh add proxy 2a00:d880:6:f2:80::1000 dev eth0
ip neigh add proxy 2a00:d880:6:f2:80::1001 dev eth0

假设这eth0是您的非 OpenVPN 网络设备的名称。

这意味着该主机应在设备上提供 NDP 代理服务eth0

  • 当有人在 dev0 链接上请求“2a00:d880:6:f2:80::1000”时,它应该说“是的,是我”;

  • 这意味着该主机将接收来自 eth0 链路的 2a00:d880:6:f2:80::1000 数据包;

  • 您不需要告诉他哪个接口是真正的 2a00:d880:6:f2:80::1000,IPv6 路由表会注意将正确的路由路由到合适的目的地。

并且不要忘记启用 IPv6 IP 转发:

sysctl -w net.ipv6.conf.all.forwarding=1

答案3

好吧,经过几个小时的尝试,我只是忘记做一件简单的事情。添加防火墙规则。

ip6tables -t nat -A POSTROUTING -s 2a00:a123:4:b5:80::/112 -j SNAT --to 2a00:a123:4:b5::1234

无需在 SolusVM CP 中添加 IP。 NDP 代理的事情也没有必要。

相关内容