我的网络设置有点复杂(*),其中 WAN 路由器连接到上游提供商并提供“外部 LAN”(实际上我有一些服务),另一个本地路由器在“外部 LAN”上有其外部分支并提供“内部 LAN”(大多数节点都连接到该 LAN,还有一个 DMZ 主机)。“内部 LAN”上的 IPv4 客户端是双重 NAT,它足以满足我的需求(此外,DMZ 设置与内部路由器一起设置为 WAN 路由器的“DMZ 主机”)。
否,WAN 路由器已升级并连接了 IPv6,并且“外部 LAN”配备了 56 位网络 - 我们称之为2001:db8:2:300::
。“外部 LAN”上的主机可以使用 DHCPv6 并获取分配给它们的 64 位网络地址,并且它可以正常工作。
我希望内部路由器(运行 dnsmasq 进行网络管理)能够为内部客户端提供 IPv6。我在“外部 LAN”56 位网络内选择了一个有效的 64 位网络(我们称之为),2001:db8:2:333::
并已将内部路由器的“内部 LAN”支路与该网络的支路设置在一起::1
。然后,我使用以下命令设置 dnsmasq 以在“内部 LAN”上提供 DHCPv6:
enable-ra
dhcp-range=::2, ::FFFF:FFFF, constructor:vlan4, ra-names, 64, 12h
(在内部路由器上,vlan2
是“外部局域网”,vlan4
是“内部局域网”)
我现在可以跟踪连接“内部 LAN”客户端并获取 IPv6 地址,然后 ping 内部路由器。当我 ping 其外部的任何内容(例如 WAN 路由器的内部 IPv6 网关端口)时,我没有收到回复。来自内部路由器本身的 ping 和连接运行良好。我可以在内部路由器上跟踪 ICMP 数据包并看到它从正确的接口发出,但没有收到回复。
据我所知,WAN 路由器不知道将回复发送到主机的位置,2001:db8:2:333::
因为它认为主机应该直接连接在其 LAN 上,但实际上它们并不在那里。
我认为我应该让内部路由器向2001:db8:2:333::
WAN 路由器发送路由器通告?我尝试通过添加以下内容让 dnsmasq 执行此操作:
interface=vlan2
dhcp-range=2001:db8:2:300:1234:5678:abcd:100,2001:db8:2:300:1234:5678:abcd:400,ra-only,infinite
但这不起作用,因为我显然不知道自己在做什么。
答案1
关键是让上游 DHCP 服务器知道您将把这些地址交给未直接连接到 WAN 路由器的设备。
配置您的 LAN 路由器:
PD
在 dhcpv6 客户端已执行的操作基础上启用该标志,并且- 在 dnsmasq 中,启用路由器公告、
constructor:
自动化和代理 dns&ntp。
如果你不关心哪个使用了特定的前缀,dnsmasq 也没有:
enable-ra
dhcp-range=::,constructor:wanside,1h
dhcp-option=option6:dns-server,::
dhcp-option=option6:ntp-server,::
真的吗?嗯……
几年前,我用过一个(字面意思)黑盒子WAN,但该机制——虽然是为这种用例而设计的并且大多定义明确——在所有相关软件中都存在并且仍然充满错误。
Internet
|
| /----- directly attached machines
WAN router
| v announces itself as router *AND* leases a /64 *AND* larger PD prefix
|
| ^ requests its own /64 *AND* larger PD prefix *AND* a router address
my Router (and a firewall, but for once it did not interfere)
| v announces itself as router *AND* hands out /64s
|
| ^ request a /64 each *AND* a router address
internal boxes
委派是
- WAN 路由器不需要知道内部 LAN 使用的单个地址,并且
- 您的内部 LAN 同时使用本地链路地址和全局可路由地址,并且
- 一旦设置完成,它会根据需要重新配置新地址,即使 WAN 路由器被擦除/更换。
细节
- 您希望 LAN 路由器既拥有通过更常见的 DHCPv6 选项获取的地址,又拥有另外您希望它请求 WAN 盒知道要委托给非直接连接的盒式设备的前缀
- 没有明显的方法来告诉 dnsmasq“按原样转发 dns 和 ntp 地址”,但您可能无论如何都会代理它,这就是 dnsmasq 所做的,对吗?
- dnsmasq 对于使用时选择哪个地址空间很挑剔
constructor:
,这就是为什么不需要进一步配置 - dnsmasq 仅在 RA 中宣布仍然有效的地址,因此 dnsmasq 向其下游客户端宣布该地址为路由器不要紧只要接口在第 2 层上是分开的
- 我运行了一个单独的 dhclient,它当时已经支持该选项(宽的我相信),但是到目前为止,大多数客户端甚至
systemd-networkd
(尽管不是通过 netplan)都可以配置为这样做,并且仍然请求另一个直接租用的前缀。 - 请求
IA_PD
可以要求特定的前缀大小,甚至特定的前缀。开始没有这样做,并且只有在简单情况适用于更一致的网络地址后才启用它。 - WAN 路由器完全忘记了委托前缀及相关路线一旦委托到期。更有趣的是,dhcp 客户端没有将 dhcp 的到期日期放在 IP 地址到期日期中,而这本来是显而易见的。您需要确认您的 dhcp 客户端确实续订了包括委托前缀在内的租约 - 它们不一定同时到期。
答案2
据我所知,WAN 路由器不知道将回复发送到主机的位置,
2001:db8:2:333::
因为它认为主机应该直接连接在其 LAN 上,但实际上它们并不在那里。
第一个路由器不知道第二个路由器后面的网络存在,也不知道如何到达它。
路由器通过三种方式学习路由:
- 直连网络
- 静态配置的路由
- 通过路由协议动态
由于第二个路由器另一端的网络不直接连接到第一个路由器,因此第一个路由器需要配置一个指向第二个路由器的静态路由,以连接第二个路由器另一端的网络,或者您需要在两个路由器之间使用路由协议来交换路由信息。
静态配置的路由无法扩展,但对于不经常更改的小型网络来说可能还不错。路由协议对于大型网络很有用,但如果您不想费心配置静态路由,它们也适用于小型网络,并且它们可以用于防止配置静态路由时出错。
答案3
我有一个非常相似的设置,其中有一个 WAN 路由器,它管理一个 DMZ 和一个连接到它的 Raspberry Pi,运行 Raspbian(Pi 的 Debian 端口)。Raspberry Pi 再次管理两个子网,一个是我的家庭网络,另一个是我的访客网络。
WAN 路由器是一台故障机。它每天清晨从我的 ISP 接收一个新的 /56 前缀。从该 /56 前缀开始,它使用 /64 前缀来管理 DMZ,并且配置为允许网络中委派较小的前缀。
树莓派从 eth0 上的 fritz 盒子请求这样的前缀。结果它被分配了一个 /62 前缀,用于我的家庭 (eth1) 和访客 (eth2) 网络。
# cat /etc/network/interfaces.d/eth0
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
iface eth0 inet6 dhcp
accept_ra 2
request_prefix 1
autoconf 1
使用此处描述的脚本和步骤将前缀委托给我在 eth1 上的家庭网络和在 eth2 上的访客网络:https://wiki.debian.org/IPv6PrefixDelegation (我修改了脚本以支持我的家庭和访客网络的两个子网,但是原来的脚本仅适用于一个网络)。
一旦前缀被委托,fritz box 就知道将 /62 前缀的地址路由到哪里,因为它知道哪个主机请求了它。并且 pi 也知道如何处理它,因为路由是通过分配 /62 子网来设置的,这是由前缀委托脚本完成的。
最后,我告诉 dnsmasq 从 eth1 接口构建路由器通告(对于访客网络则从 eth2 接口构建,但是为了简单起见我将省略这一点),如下所示:
enable-ra
dhcp-range=tag:eth1,::,constructor:eth1,ra-names,ra-stateless,slaac,2h
您基本上可以按照 Debian wiki 上的说明操作。它几乎涵盖了整个过程。您可以省略 radvd 配置,因为您已将 dnsmasq 配置为执行路由器广告。如果您不使用 Debian,请根据发行版采用这些说明。它们应该都或多或少地以相同的方式工作 :-)
此外,我必须在 dnsmasq 中将 ipv6 租约的有效期设置为仅两个小时,因为它仅在早上那个时间宣布旧前缀,否则,当前缀发生变化时,我会注意到我的家庭和访客网络客户端出现问题。
遗憾的是,您提到 WAN 路由器不受您的控制。不幸的是,您可能必须配置 WAN 路由器以允许网络中的前缀委派(如果尚未配置)。
对于 fritz 盒,他们提供了一些文件:https://en.avm.de/service/fritzbox/fritzbox-7490/knowledge-base/publication/show/1239_Setting-up-an-IPv6-subnet-in-the-FRITZ-Box/
希望这有帮助,祝你好运!