我(可以)在 Internet 的(虚拟化)服务器上有一堆 IPv6 地址,这些地址来自我的托管服务提供商,该地址是在直接连接的网络中分配的(来自 /64,其中配置了 eth0)。如果这些 IPv6 地址用于我的 VPN(wireguard)到该服务器,我该如何使用一些?
通常必须有一条指向我的服务器的 VPN 内部使用的 IPv6 地址的路由,但没有这样的路由条目,因此邻居发现请求将不起作用。我是否可以将用于 VPN 的 IPv6 地址也定义为主接口 (eth0) 上的虚拟地址以响应邻居发现?对于 IPv4,我使用 NAT 没有问题,但是将 NAT 与 IPv6 一起使用不是解决方案,不是吗?
假设系统像往常一样配置为路由器,例如通过隧道(在
wg-quick
需要的帮助下)到每个单独的 IPv6 地址的 /128 路由。这部分我帮不上忙,因为 OP 中没有提供任何信息。现在,因为上游路由器(可在 上访问服务器的路由器
eth0
)没有设置知道它必须专门通过服务器路由此类地址并且其配置无法更改,它将在 LAN 中搜索目标使用NDP,但服务器,路由但不拥有此地址,即使收到也不会关心此查询:无连接。可以将服务器配置为在不实际拥有这些地址的情况下回复此类地址:充当代理并在通过 NDP 接收此类请求时进行回复,因此称为ND 代理。最后,路由器将从(动态解析的)NDP 知道将流量发送到该地址的位置,而不是通过(静态)路由设置知道它。一旦在服务器上就位,这一切都由 Linux 内核处理。
必须完成以下两个设置(这可能与 Linux 的
arp_proxy
IPv4 等效设置略有不同)。proxy_ndp
在需要做ND代理的接口上启用(eth0
):必须做一次。
对于将由服务器路由的每个 IPv6 地址,添加一个 ND 代理条目。例如,
2001:db8:1:2::4242
那将是:对于小细节,还可以检查服务器是否加入了与代理地址相关的多播地址(用于 NDP)。例如:
关键字
proxy
是处理此类地址的强制性要求(-6
也应该一直使用,或者至少在没有上下文告诉它是关于 IPv6 NDP 而不是 IPv4 ARP 时使用)。例子:不过,它们可能非常脆弱,并且会自动消失,例如当界面设置为关闭然后打开时:此设置应添加到网络工具配置中
eth0
。注意:内核除了使用
ip neigh ... proxy ...
. 如果必须以这种方式处理整个 LAN 或子网,则可以改为设置接口,ALLMULTI
这样它就不会丢弃此类流量,然后通过用户空间处理。一个工具已经完成了这项工作:ndppd
. 对于 OP 的情况,不建议使用此工具。