使用飓风电隧道为带有 dnsmasq 的网络提供 IP

使用飓风电隧道为带有 dnsmasq 的网络提供 IP

我在运行 Ubuntu 18.04、firewalld(UFW 不适合用作路由器)、/networks/interfaces(netplan 有个 bug,不适合用做 DHCP 和 DNS)的 x86 机器上运行我的网络。

我有一个 ISP 使用 PD 运行 ipv6,我使用这里的设置。我当前的 ISP 不支持 IPV6,因此我通过 hurricane electric 设置了一条到我的路由器的隧道 - 设置完毕,并且应该可以工作,因为我可以 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 站点。但我似乎无法获取还要别的吗

我试过

##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 地址?

答案1

首先:

就像 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 配置。

enable-ra
dhcp-range = 2001:470:ZZ:1::, ra-stateless
dhcp-option = option6:dns-server, [2001:470:20::2], [2001:4860:4860::8888]

如前所述,许多客户端(尤其是 Android)不支持通过 DHCPv6 分配地址。它们需要 SLAAC,因此您至少需要以下之一slaac或者ra-stateless在“dhcp-range”配置中。(“ra-stateless”模式还告诉 SLAAC 客户端,他们仍然可以从 DHCPv6 获取 DNS 设置,这对 Windows 很有用。无论选择哪种方式,dnsmasq 还将通过 SLAAC-RDNSS 自动为 Android 提供 DNS 服务器。)

然而,对于br0(或任何 LAN 接口)你应该静态分配一个 IP 地址——我不确定内核是否接收自己的多播,也不确定它是否关注它们。无论如何,我怀疑dnsmasq 本身可能会拒绝在缺少匹配地址的接口上运行(就像 IPv4 中已经做的那样)...

iface br0 inet6 static
    address 2001:470:ZZ:1::1/64

iface br1 inet6 static
    address 2001:470:ZZ:2::1/64

运行 dnsmasq 后,使用rdisc6 eth0另一个 Linux 系统来请求并显示路由器广告的内容。确保它具有非零的“路由器生命周期”;至少一个“前缀”(必须是 /64、链路上、自主、非零有效时间);并且它来自链路本地fe80::*地址而不是全局地址。

相关内容