我最近不得不将专用服务器主机从“ReliableSite”更改为“Psychz”。当我要求公布我的 ARIN IPv6 分配时,Psychz 将其作为“路由”块给出,假设我的服务器将用作“路由器”。
为了澄清,假设我有来自 ARIN 的 123::/48,而不是直接在“桥接”配置中在服务器接口上使用 123::/48,我通过 Psychz 提供的 234:: 路由了 123::/48。 567 IPv6 地址。
我尝试在 openSUSE 上创建一个虚拟接口并放入 123::/48 IPv6 设置,但我无法从外部访问它。 Rocky Linux 和 FreeBSD 也有类似的问题。
如果我只使用服务器本身的 IP 地址,是否有在 Linux 服务器上使用路由 IPv6 块的正确方法?
答案1
“路由”仅意味着上游会将整个前缀路由给您(使用您作为“下一跳”网关,而不是直接对地址进行 ARP)。一旦这些数据包被传递给你,你对它们做什么并不重要——上游并不关心你的服务器是否将它们作为自己的地址处理,或者是否将它们转发到其他地方,和您自己的服务器并不真正关心这些数据包是通过 ARP/ND 还是通过路由到达的。
换句话说,在 dummy0(甚至“lo”)上配置地址应该足够了。尽管在 Linux 上您很可能需要启用net.ipv6.conf.all.forwarding
通过 sysctl,即使你不是真的将数据包转发到任何地方,但事实上它们是在与入站接口不同的接口上发送的,这一事实似乎需要 IP 转发处于活动状态。
在物理以太网接口上将地址配置为 /128 也是一种选择,并且可能会避免上述问题。 (是的,/128,而不是/48。)
不过,在一切之前,请先tcpdump -n -i eth0 "net 123::/48"
确保您是事实上,像你应该的那样从上游接收数据包。 (如果您从 ARIN 获得自己的前缀,我假设您正在运行 BGP;确保会话已启动。)
(以防万一,还可以运行 tcpdump 来-i all
检查您是否可能意外路由你的数据包位于正确网关之外的其他地方。查看您的路由表;确保 BGP 守护程序能够解析下一跃点,而不仅仅是对所有内容显示“...via unreachable”。)
如果您只想使用单独的地址(而不设置与其他主机共享的子网),则将 dummy0 上的地址配置为 会更合适/128
,尽管这并不重要很多,但 /48 很奇怪。 (您有 /48 前缀,但这并不意味着您必须有 /48 子网。)
(或者,好吧,至少将其配置为 /64。直接在接口上配置整个 /48 是 1) 有点奇怪,2) 以后无论何时您都可能会导致问题做决定将一些较小的块路由到其他地方。)