我正在尝试在 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.forwarding
为1
.
尽管如此,我仍无法从客户端通过 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 代理的事情也没有必要。