如何使用基于 Debian 的路由器和前缀委派在 LAN 内部署 IPv6?

Oli*_* M. 8 networking linux router debian ipv6

我的 ISP 开始使用 DHCPv6,这意味着使用此/etc/network/interfaces ...

auto lo eth0 eth1

iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
    address 192.168.0.1
    netmask 255.255.255.0

allow-hotplug eth1
iface eth1 inet dhcp
iface eth1 inet6 dhcp
Run Code Online (Sandbox Code Playgroud)

...我的 Debian Wheezy 路由器终于获得了分配的 IPv6 地址(是的!)。

但是接下来我需要做什么才能让我的路由器为 LAN 中的所有工作站分配 IPv6 地址?

使用 IPv4,我所要做的就是在 WAN 接口上启用 DHCP 客户端,为路由器和工作站分配静态 IPv4 地址,最后设置 NAT(我使用iptables -t nat -a POSTROUTING -s 192.168.0.0/32 ! -d 192.168.0.0/32 -j MASQUERADE过)。

IPv6 没有 NAT。我研究了radvdisc-dhcp-server,但两者似乎都需要在其配置文件中设置前缀(即不变的前缀)。然而,每次我重新连接时,我的 ISP 似乎都会为我提供一个新的前缀。

我真的很失落。

小智 13

您没有说您的 ISP 是谁,但以下内容适用于 Comcast 在他们推出 IPv6 的地区。

我不得不使用宽 dhcpv6-client,因为其他 DHCPv6 客户端都无法同时处理为面向 ISP 的接口获取地址、前缀委派和 Comcast 的最大 /60 网络掩码。

安装 Wide-dhcpv6-client 后,编辑 /etc/network/interfaces 使您的 eth1 IPv6 设置如下所示:

iface eth1 inet6 auto
        post-up sysctl -w net.ipv6.conf.ext0.accept_ra=2
Run Code Online (Sandbox Code Playgroud)

编辑 /etc/wide-dhcpv6/dhcp6c.conf 使其看起来像这样:

profile default
{
  information-only;

  request domain-name-servers;
  request domain-name;

  script "/etc/wide-dhcpv6/dhcp6c-script";
};

interface eth1 {
    send rapid-commit;

    send ia-na 0;
    send ia-pd 0;
};

id-assoc na 0 {

};

id-assoc pd 0 {
    prefix ::/60 infinity;

    # Internal interface (LAN)
    prefix-interface eth0 {
        sla-len 4;
        sla-id 0;
        ifid 1;
    };
};
Run Code Online (Sandbox Code Playgroud)

“na”部分获取 eth1(面向您的 ISP)的 IPv6 地址。“pd”部分为您的内部网络获取前缀委托,并将 IPv6 地址“[prefix]::1”分配给 eth0(您的内部接口)。如果您有额外的内部网络,您可以为这些接口添加额外的“前缀接口”部分,并为每个接口增加“sla-id”。

然后,您需要在系统上为您的内部网络安装一个路由器广告守护程序。您可以使用 radvd 或 dnsmasq。

如果您使用的是 dnsmasq,则对 IPv6 的 /etc/dnsmasq.conf 的必要补充是

# Enable IPv6 Router Advertisement (RA) features.
enable-ra

# Advertise delegated prefix based on the IPv6 address of eth0.
dhcp-range = ::1,constructor:eth0,   ra-stateless, ra-names, 4h
Run Code Online (Sandbox Code Playgroud)

您需要从 Debian 测试安装 dnsmasq,因为 Debian wheezy 附带的版本不能正确执行路由器广告。

然后 ifdown 和 ifup 您的外部接口,确保 dhcp6c 正在运行,并查看您的外部和内部接口是否都有 IPv6 地址而不是链接本地地址(“fe80::...”地址)。如果所有这些都有效,请重新启动 dnsmasq,您 LAN 上的系统应该开始自动为自己配置 IPv6 地址。