如何根据 DHCPv6-PD 服务器委托的前缀配置 radvd、dhcpd6、路由和 /64 子网?

如何根据 DHCPv6-PD 服务器委托的前缀配置 radvd、dhcpd6、路由和 /64 子网?

我的 ISP 刚刚启动了 IPv4/IPv6 双栈服务。为了连接 IPv4/IPv6 互联网,几乎所有用户通常都使用 ISP 租用的 CPE。但我想使用我的 Linux 路由器代替这种 CPE,因为我的路由器有很多角色(许多 iptables 规则和 3 个以太网接口、http 反向代理、http 缓存、memcached、smtp/pop 服务器和 DNS 代理)。我想让它成为 IPv4/IPv6 双栈路由器。

我的路由器

  • CentOS6.0 i686
  • eth0 为 WAN
  • eth1,2 为 LAN
  • ISC dhcp(版本 4.1.1)通过“# yum install dhcp”从 CentOS-updates repo 安装
  • radvd(版本 1.6)通过“# yum install radvd”从 CentOS-base repo 安装
  • [编辑] 我使用 ISC dhclient 的原因是我的路由器必须在其请求和请求消息中发送 DHCPv6 选项 16(供应商类别),以便获取包含一些 ISP 特定信息(SIP 电话号码、固件服务器地址)的供应商特定信息选项。我知道如何在 ISC dhclient 中设置选项 16,但不知道如何在 WIDE-dhcpv6 中设置。而且我在 ISC dhclient 中找不到“id-assoc”之类的设置。

我的目标

  • /48 前缀被委托给 eth0 上的 DHCPv6-PD(DHCPv6 前缀委托)客户端(dhclient)。
  • 设置了指向 ISP 的 IPv6 默认路由。我必须将 ISP 的 DHCPv6 服务器的链路本地地址视为默认路由。
  • 每个 LAN I/F(eth1/eth2)分配一个 /64 子网和一个全局地址(位于委派前缀中)。
  • eth1 和 eth2 上的 radvd 根据分配的 /64 子网宣布 RA。
  • eth1 和 eth2 上的 dhcpd6 宣布从 ISP 的 DHCPv6 服务器接收的附加网络信息(名称服务器、域搜索列表和 sip 服务器地址)。

我当前的配置

/etc/sysconfig/网络

NETWORKING=yes
HOSTNAME=xxx.yyy.zzz

# Enable IPv6 routing and stop accept_ra/autoconf.
IPV6FORWARDING=yes

/etc/sysconfig/网络脚本/ifcfg-eth0

DEVICE="eth0"
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none

# Enable DHCPv6-PD client.
DHCPV6C=yes
DHCPV6C_OPTIONS="-P -cf /etc/dhcp/dhclient6.conf"

# Disable make_resolv_conf function in /sbin/dhclient-script.
PEERDNS=no

/etc/dhcp/dhclient6.conf

script "/sbin/dhclient-script";
interface "eth0" {
        send dhcp6.reconf-accept;
        also request dhcp6.vendor-opts, dhcp6.sip-servers-names, dhcp6.sip-servers-addresses, dhcp6.sntp-servers;
}

结果

在“# service network restart”之后,DHCPv6-PD 客户端似乎成功完成。

lease6 {
  interface "eth0";
  ia-pd xx:xx:xx:xx {
    starts 1312464004;
    renew 7200;
    rebind 10800;
    iaprefix 24xx:xxxx:xxxx::/48 {
      starts 1312464004;
      preferred-life 12600;
      max-life 14400;
    }
  }
  option dhcp6.client-id xx:xx:xx:xx:xx:xx:xx:xx:xx:xx;
  option dhcp6.server-id xx:xx:xx:xx:xx:xx:xx:xx:xx:xx;
  option dhcp6.reconf-accept ;
  option dhcp6.sip-servers-addresses 24xx:xxxx:xxxx:xxxx::1;
  option dhcp6.name-servers 24xx:xxxx:xxxx:xxxx::3,24xx:xxxx:xxxx:b::3;
  option dhcp6.domain-search "xxx.jp.", "yyy.jp.";
  option dhcp6.sntp-servers 24xx:xxxx:xxxx:xxxx::a,24xx:xxxx:xxxx:b::b;
}

问题

DHCPv6-PD 客户端已成功委派 /48 前缀。但此后,

  • 如何在路由器的路由表中设置 IPv6 默认路由?
  • 如何根据委派的前缀为每个 LAN I/F(eth1 和 eth2)分配全局 IPv6 地址和 /64 子网?
  • 如何触发 radvd 在每个 LAN I/F(eth1 和 eth2)上宣布 RA?
  • 如何触发每个 LAN I/F 上的 DHCPv6 服务器(dhcpd6)来宣布从 ISP 的 DHCPv6 服务器接收的附加网络信息(名称服务器、域搜索列表和 sip 服务器地址)?

我猜

根据“$ man dhclient”和“$ man dhclient-script”,dhclient 脚本似乎可用于配置此类设置,并且它提供一些钩子。但现在,它对 DHCPv6-PD 客户端不起作用。

是的,虽然我不熟悉 IPv6 网络配置,但我可能必须编写一些适合我的 DHCPv6-PD 环境的脚本。有人能告诉我 dhclient-script 中的上述设置吗?[编辑]我想知道实用的 dhclient-script。

我担心,应该考虑一些特殊因素。例如,由于每个 IPv6 地址都有首选/有效生存期,当我根据委托前缀将全局 IPv6 地址分配给 LAN 接口时,我不仅要分配 IPv6 地址,还要分配其生存期,而生存期必须从委托前缀的首选/有效生存期中得出?

此外,当 DHCPv6 重新配置发生时,可能必须重新配置 LAN 接口上的 radvd 和 DHCPv6 服务器?应该使用哪个钩子?

[编辑] 当 DHCPv6 重新配置发生时,如何宣布新信息和过时信息?radvd 是否自动宣布以前的前缀已过时?DHCPv6 服务器是否自动宣布以前的名称服务器已过时?

答案1

我不知道你的问题的答案,但我只是想提醒你不要使用 DHCP 服务器地址作为你的默认路由器。如果这有效,那只是偶然的......在 IPv6 中,默认路由由 RA 而不是 DHCP 传达。

您需要启用转发、接受 RA 和发送 RS。这里的一个问题是 Centos6 中包含的内核不允许您这样做。启用转发后,接受 RA 和发送 RS 将被禁用。不过应该有一个带有相关补丁的 CentosPlus 内核。请参阅邮件列表主题/消息http://lists.centos.org/pipermail/centos/2011-April/thread.html#109756

相关的 sysctl.conf 设置是:

net.ipv6.conf.all.forwarding=1
net.ipv6.conf.eth0.accept_ra=2
net.ipv6.conf.eth0.accept_ra_defrtr=1
net.ipv6.conf.eth0.router_solicitations=1

答案2

  • 在使用 DHCPv6 PD 获取附加子网之前,应由获得默认(上游)Internet 连接的任何人设置 IPv6 默认路由。您尚未提到您实际上是如何连接上游的,因此我无法帮助您。
  • 我使用 WIDE DHCPv6 客户端,而不是 ISC,所以我不知道具体该怎么做,但我希望 ISC 有与这个 WIDE 配置选项等效的东西:

    id-assoc pd {
        prefix-interface eth0 {
            sla-id 1;
            sla-len 4;
        };
    };
    

    基本上,您告诉 DHCP 客户端如何将子网分配给内部接口;上述配置表示“我将获得委托给我的 4 位前缀 ( sla-len 4),获取第一个可用子网 ( sla-id 1) 并将其分配给eth0( prefix-interface eth0)。

  • 使用适当的interface节设置 radvd(手册页中有很好的例子radvd.conf可以参考),它就可以工作了。
  • 我帮不了你;除了测试之外,我不使用 DHCPv6 服务(我从我的 DHCP 服务器获取所有 DHCP 信息)。

答案3

Wombie 给出的答案与我设置 radv 和路由时给出的答案相同。Inet6 旨在进行自我配置,无需 DHCP 服务器。

我不使用 DHCPv6,因为它可以由 radvd 和 zeroconf 处理。radvd 可以配置为提供名称服务器,并且可以从 /etc/resolv.conf 中发布服务器广告。radvd 的新版本还实现了分发搜索列表。

我配置了 avahi-daemon 来将名称服务和服务器分发给客户端。您将需要能够进行服务发现的客户端。由于我全面运行双栈网络,因此我没有对服务发现进行太多测试。

相关内容