我(可以)在互联网上的(虚拟)服务器上有一堆 IPv6 地址,这些地址来自我的托管提供商在直接连接的网络中分配的地址(来自配置了 eth0 的 /64)。如果这些 IPv6 地址用于连接该服务器的 VPN (wireguard),我该如何使用?
通常,必须有一条通往 VPN 内部使用的 IPv6 地址的路由,该地址指向我的服务器,但没有这样的路由条目,因此邻居发现请求将不起作用。我是否可以将用于 VPN 的 IPv6 地址也定义为主接口 (eth0) 上的虚拟地址以响应邻居发现?对于 IPv4,我使用 NAT 没有问题,但将 NAT 与 IPv6 结合使用并不是一个解决方案,不是吗?
答案1
wg-quick
假设系统像往常一样配置为路由器,例如通过隧道到每个单独的 IPv6 地址的 /128 路由(如果需要,可提供帮助)。我无法在这部分提供帮助,因为 OP 中没有提供任何信息。
现在,由于上游路由器(在 上可到达的服务器路由器eth0
)没有设置知道它必须通过服务器专门路由此类地址,并且其配置无法更改,因此它将使用以下命令在 LAN 中搜索目标新民主党,但是服务器,路由但不拥有这个地址,即使收到:没有连接,也不会关心这个查询。
人们可以将服务器配置为回复此类地址,而无需实际拥有它们:充当代理并在通过 NDP 接收此类请求时进行回复,因此称为ND代理。最后,路由器将从(动态解析的)NDP 知道将流量发送到该地址的位置,而不是通过(静态)路由设置知道它。一旦在服务器上就位,这一切都由 Linux 内核处理。
必须完成以下两项设置(这可能与 Linux 的arp_proxy
IPv4 等效设置略有不同)。
使能够
proxy_ndp
需要进行ND代理的接口(eth0
):sysctl -w net.ipv6.conf.eth0.proxy_ndp=1
必须做一次。
对于服务器将路由的每个 IPv6 地址,添加一个 ND 代理条目。例如
2001:db8:1:2::4242
:ip neigh add proxy 2001:db8:1:2::4242 dev eth0
对于一些小细节,我们还可以检查加入与代理地址相关的多播地址(用于 NDP)的服务器。例如:
$ ip maddr show dev eth0 | grep '42:*42 *$' link 33:33:ff:00:42:42 inet6 ff02::1:ff00:4242
该关键字
proxy
对于处理此类地址是必需的(-6
也应该始终使用,或者至少在没有上下文表明它是关于 IPv6 NDP 而不是 IPv4 ARP 时)。例子:ip -6 neigh show proxy # display ND proxy entries configured whatever the interface ip neigh delete proxy 2001:db8:1:2::4242 dev eth0 # delete a single entry ip -6 neigh flush proxy all dev eth0 # delete all of them on eth0
尽管如此,它们可能非常脆弱,并且会自动消失,例如当接口关闭然后打开时:此设置应添加到网络工具配置中
eth0
。
注意:除了用ip neigh ... proxy ...
.如果整个 LAN 或子网必须以这种方式进行处理,则可以设置接口,ALLMULTI
这样它就不会丢弃此类流量,然后通过用户空间进行处理。一个工具已经可以完成这项工作:ndppd
。对于 OP 的情况,不建议使用此工具。