我在运行 Ubuntu 18.04、firewalld(UFW 不适合用作路由器)、/networks/interfaces(netplan 有一个错误使其不适合使用)和用于 DHCP 和 DNS 的 dnsmasq 的 x86 机器上运行我的网络。
我有一个使用 PD 运行 ipv6 的 ISP,我使用了这里的设置。我当前的 ISP 不支持 IPV6,所以我已经通过飓风电力为我的路由器设置了一条隧道 - 这已经设置好,并且大概可以正常工作,因为我可以 ping 通。
我将 enp1s0 作为外部接口,所有其他接口桥接在一起作为 br0 为网络的其余部分提供服务。也有 he-ipv6 作为隧道,没有桥接任何东西
目前路由器位于 ISP 路由器后面,有两个不同的网段 - 192.168.1.x 用于其他人,我自己的测试网络在 192.168.2.x,路由器位于 DMZ 中。这应该不是问题。
问题是我想坚持使用 dnsmasq,但我无法提供有关如何设置它的文档。
这就是我现在拥有的
- 我已经按照 hurricane electric 网页上的说明为我的路由器设置了 ipv6,包括我 /etc/networks/interfaces 上的以下内容
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address 2001:470:YY:YYYY::2
netmask 64
endpoint 216.218.221.6
local xxx.xxx.x.xxx
ttl 255
gateway 2001:470:YY:YYYY::1
这行得通。我可以 ping ipv6.google.com 和其他已知的 ipv6 站点。我只是似乎无法获得其他任何东西的 IP 。
我试过了
##For HE
enable-ra
dhcp-range = 2001:470:YY:YYYY::
dhcp-option=option6:dns-server,[2001:470:20::2],[2001:4860:4860::8888]
但显然语法是错误的。
如何为从路由器获取 IP 的客户端以及 br0 获取 IPv6 地址?
在一切之前:
就像在 IPv4 中一样,每个链接都需要自己的子网前缀。“
2001:470:YY:YYYY::/64
隧道端点”专门用于您和 Hurricane 之间的链接(即,它用于 IPv4 术语中的“WAN 地址”)——它不能再用于您的任何 LAN。对于后者,您需要在隧道设置页面中找到“路由 IPv6 前缀”之一——这相当于 DHCPv6-PD 委托前缀。通常每个 LAN 都有一个 /64 大小的子网前缀,以允许基于标准 SLAAC 的地址分配工作(许多客户端,尤其是 Android,不支持基于 DHCPv6 的地址分配)。因此,如果您计划使用多个子网,请选择“分配 /48”以获得具有相当数量 (64ki) /64 的前缀。
(如果您已经分配了 /48,则不需要使用“分配 /64”。如果您确实使用了“分配 /64”,请注意该前缀与“隧道端点”前缀略有不同;它们是经常混淆。)
一旦你有了自己的范围,比如 2001:470:ZZ::/48,从中选择一个 /64(范围从 0 到 ffff,例如 2001:470:ZZ: 1 ::/64)并将其用于您的
br0
界面以及 dnsmasq 配置。如前所述,许多客户端(尤其是 Android)不支持通过 DHCPv6 分配地址。它们需要 SLAAC,因此您至少需要“dhcp-range”配置中的一个
slaac
或一个。ra-stateless
(“ra-stateless”模式还告诉 SLAAC 客户端他们仍然可以从 DHCPv6 获取 DNS 设置,这对 Windows 很有用。无论选择什么,dnsmasq 也会通过 SLAAC-RDNSS 自动为 Android 提供 DNS 服务器。)但是,对于br0(或任何 LAN 接口),您应该静态分配一个 IP 地址——我不确定内核是否接收到它自己的多播,也不确定它是否关注它们。无论如何,我怀疑dnsmasq 本身可能拒绝在缺少匹配地址的接口上运行(就像它已经为 IPv4 所做的那样)...
运行 dnsmasq 后,
rdisc6 eth0
从另一个 Linux 系统使用它来请求和显示路由器通告的内容。确保它有一个非零的“路由器生命周期”;至少一个“前缀”(需要是 /64、在线、自主、非零有效时间);并且它来自链接本地fe80::*
地址而不是全局地址。