如何使用动态前缀委派绑定家庭路由器后面的 IPv6 服务器套接字?

如何使用动态前缀委派绑定家庭路由器后面的 IPv6 服务器套接字?

我正在尝试通过我的局域网在 IPv6 上运行个人 Web 服务。我希望它在公共互联网上可见,并位于 AAAA 记录之后。我需要在设置的简易性和 ISP 的 IPv6 前缀发生变化时的优雅重新配置之间取得平衡。

我应该绑定到哪个地址?本地 IPv6 地址 + NAT,还是应该通过前缀委派将全局可路由选项推送到主机?

我的主机位于 OpenWRT 路由器后面,IPv4 + IPv6。OpenWRT 获得/56由我的 ISP(加拿大的 Telus)委派的前缀。但是,此前缀不是静态的。它会按天数不时地发生变化。有时我可以通过重置来加快变化。

我愿意尝试在 IPv6 上使用无 NAT 技术。我同意在状态防火墙中打开端口/IP,但我想避免地址转换。

在我的无状态+有状态 IPv6 设置中,局域网上的主机会进行自动配置,还会使用 DHCPv6 来获取租用地址。在我的 ubuntu 机器上:

192.168.1.4
fd00:cafe::4/128                    # ULA local (by dhclient -6)
2001:2:3:4:a8a8:efcf:d96d:1315/64   # slaac+privacy global
2001:2:3:4:22f:bcff:fe12:1234/64    # slaac+EUI64 (macaddr)
fd00:cafe::a8a8:efcf:d96d:1315/64   # slaac+privacy local
fd00:cafe::22f:bcff:fe12:1234/64    # slaac+EUI64 (macaddr)
fe80::21f:bcff:fe08:c07a/64         # link local

这些2001:2:3:4:地址在公共互联网上是可路由的。fd00:cafe::在我的子网上只能本地路由。fd00:cafe::是我在 OpenWRT (ULA) 中为我的内部网络配置的前缀。 当然fe80:不可路由。OpenWRT 不会根据设计在此配置中出租2001:2:3:4::4(但我非常希望如此)。

我为我的服务选择的 v6 IP 最终必须出现在某个 AAAA DNS 记录中,因此最好不要每隔一小时左右就更改一次。

  • slaac+EUI 地址透露了一些有关我的 mac 地址的信息,我不喜欢这样。
  • slaac+privacy 地址更能保护隐私,但每隔几个小时就会轮换一次,这一点不太理想。如果地址仍在使用中,它们就会保留下来,但每次我启动服务时它们都会被释放(并且 DNS 需要更新——这至少需要 5 分钟)。
  • 另一种选择是仅静态地为我的服务选择一个我喜欢的后缀(例如::d00d),使用相同的全局可路由前缀,然后静态地将其分配给我的网卡,如下所示:
$ sudo ip -6 addr add 2001:2:3:4::d00d/64 dev eth0

然后在我的应用程序中,我只能绑定到该地址(或绑定到持有该 IP 的设备上的“::”)。

# ./myserver -l 2001:2:3:4::d00d/64 -p 8080

现在,一旦我将监听套接字绑定到主机上的可公开路由 IP,那么通知路由器让 SYN 数据包流入的最佳方法是什么?我需要在这里打个洞。UPnP、NAT-pmp?

我是不是想错了?IPv6 上的典型设置是什么?

更新

我尝试hostid在 OpenWRT 租约中使用 dhcp 设置/etc/config/dhcp。据说它允许指定 dhcpv6 预留的最后 32 位。我希望收到带有 wan 前缀和我选择的后缀的额外 IPv6,但没有成功。我主机上的 dhcp6 客户端仍然没有收到该额外 IP。可能与此有关odhcpd 问题 61

答案1

如果您打算配置AAAA记录,则请在需要静态 IP 地址的主机上将该地址配置为静态 IP 地址。DHCP 可用于提供静态 IP 地址,但它是一种糟糕的第二选择解决方案。

OpenWRT 已用于dnsmasqDHCP(v4 和 v6)和 DNS。dnsmasq如果客户端使用 DHCPv6,则可以配置为提供静态 IPv6 地址。将它们用作代理或 VIP(虚拟 IP)的目标可能是合适的。最新版本的 OpenWRT 似乎用于odhcpd部分(如果不是全部) DHCP 服务。

使用防火墙打开从 Internet 到服务器的端口。(您指定的地址将是 Internet 和 LAN 的地址。)您应该能够在本地连接到服务器,而无需打开防火墙上的任何端口。

odhcpd通过在其配置中添加一个host部分,它确实支持静态 IP 地址。我的路由器还没有升级到最新的 OpenWRT 版本,所以我正在使用dnsmasq它,它也可以提供 RA 和 DHCPv6 服务。您应该能够在 DHCP 和 DNS 配置页面的底部指定静态 IP 地址。

IPv6 不需要 NAT,尽管它们可能是代理或 VIP(虚拟 IP)后面的目的地。从委托给您的 /56 中构建一个 /64,并从该 /64 中为您的 Web 服务器分配一个地址。这是您应该使用的地址。您的 Web 服务器将需要一个动态 IP 客户端,它可以在地址更改时更新您的 DNS。在 DHCP 静态 IP 地址正常工作之前,基于 MAC 的地址将是您的稳定地址。

网络块中的地址fc00:/8不应用于与互联网通信。这些地址旨在用作唯一的本地地址,类似于 IPv4 私有地址。

您可能需要开发自己的动态 IP 地址脚本。在路由器上,您需要在 /56 更改时更新防火墙,并且可能需要进行其他一些更改。在 Web 服务器上,您需要更新 DNS,并可能分配一个新的静态 IP 地址。(我认为 IP 地址前缀更改的分配可能比 DHCP 静态 IPv6 地址分配更简单。)

相关内容