我的 ISP 仍然不支持 IPv6,我目前使用 OpenVpn 或 OpenConnect VPN 来获取 IPv6 连接。
现在 OpenWRT 路由器下有一个运行 VPN 客户端的 Ubuntu 服务器。
是否可以(仅)共享从服务器到整个 LAN 网络的 IPv6 连接?
答案1
当然,如果您的 IPv6 连接为您提供了一个足以容纳 LAN 中所有设备的前缀(即小于 /128 的前缀号,最好是 /64 或更小)。
首先,通过添加以下行来启用 IPv6 转发/etc/sysctl.conf
:
net.ipv6.conf.all.forwarding=1
然后运行sudo sysctl -p
或者重启使其生效。
这将禁用 IPv6 自动配置作为副作用,因此您可能需要通过安排运行这些命令来在 VPN 接口上重新启用它后您的 VPN 界面已出现:
sysctl -w net.ipv6.conf.<your_VPN_interface_here>.accept_ra=2
sysctl -w net.ipv6.conf.<your_VPN_interface_here>.autoconf=1
如果您在 VPN 接口上获得 /128 前缀(= 仅单个主机),则需要联系您的 VPN 提供商并了解如何获得更广泛的前缀。它可能需要不同的 VPN 设置,或者可能需要设置 DHCPv6 客户端以在 VPN 端发出前缀请求。
如果您可以在 VPN 接口上获得比 /64 更宽的前缀(= 较小的数字),则您可以在 LAN 上使用 SLAAC,这可能是配置 IPv6 的最简单方法。
您还需要在这里考虑 IPv6 防火墙:提前设置一些 IPv6 防火墙规则,以阻止来自您不需要的 VPN 端的任何传入连接。在阻止任何 ICMPv6 类型或 IPv6 多播之前请三思;两者都是 IPv6 协议的重要组成部分,您不能完全阻止它们。
您的系统现在已准备好成为 IPv6 路由器。您现在应该考虑如何通过 VPN 接口上的前缀分割允许您使用的 IPv6 地址空间,并将其子前缀分配给您的 LAN 侧接口。由于您的前缀中的所有 IPv6 地址现在都可以根据您的需要使用,因此您只需为 LAN 端接口手动分配 IPv6 地址即可。
然后安装并配置radvd
以使您的系统向 LAN 宣告它是 IPv6 路由器。现代版本radvd
还能够宣布 IPv6 DNS 服务器和客户端应使用的域后缀。
radvd
配置还将包括一些设置,告诉客户端是否允许他们使用无状态地址自动配置 (SLAAC) 自行选择 IPv6 地址,或者是否应该使用 DHCPv6。此外,即使您选择允许 SLAAC,您仍然可以使用 DHCPv6 服务器来向您的客户端提供一些额外的配置信息。
一旦您正确设置了这些位并开始radvd
向您的 LAN 宣布 IPv6 路由器的存在,如果您的 LAN 端子前缀是 /64 或更宽并且您已允许 SLAAC,那么您的客户端现在应该会收到radvd
通知并自动获得基本的 IPv6 配置。
如果您最终在 LAN 端使用了比 /64 更严格的前缀(=更高的数字),或者您选择不使用 SLAAC,那么您现在需要为您的客户端设置 DHCPv6 服务器。
然后就可以开始测试了。如果您的客户端仅显示以 开头的链路本地 IPv6 地址fe80::
,您应首先验证它们是否看到 的路由器公告radvd
。这是 IPv6 自动配置的基本部分;没有这些公告,其他任何事情都不会发生。
答案2
如果 VPN 提供商仅提供比 /64 前缀更紧的 IPv6 地址(/128
在我的例子中),则执行 IPv6 NAT 也是可以接受的。
首先,添加net.ipv6.conf.all.forwarding=1
并/etc/sysctl.conf
启用它。
然后,启用 IPv6 NAT通过运行ip6tables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
然后,选择一个 ULA 地址(在这种特殊情况下比 IANA 保留的地址更好)并进行/etc/radvd.conf
如下编辑:
# /etc/radvd.conf
interface eth0 {
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
prefix fd12:3456:7980:abcd::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
最后,重新启动radvd
服务。
系统将自动执行 DHCPv6。