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

tak*_*mag 10 dhcp ipv6 isc-dhcp dhclient radvd

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

我的路由器

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

我的目标

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

我现在的配置

/etc/sysconfig/network

NETWORKING=yes
HOSTNAME=xxx.yyy.zzz

# Enable IPv6 routing and stop accept_ra/autoconf.
IPV6FORWARDING=yes
Run Code Online (Sandbox Code Playgroud)

/etc/sysconfig/network-scripts/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
Run Code Online (Sandbox Code Playgroud)

/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;
}
Run Code Online (Sandbox Code Playgroud)

结果

在“#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;
}
Run Code Online (Sandbox Code Playgroud)

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-servers-addresses)?

我猜

根据“$ man dhclient”和“$ man dhclient-script”,dhclient-script似乎用于配置此类设置,并且它提供了一些钩子。但是现在,它对 DHCPv6-PD 客户端没有任何作用。

是的,我可能需要编写一些适合我的 DHCPv6-PD 环境的脚本,尽管我不熟悉 IPv6 网络配置。有人让我知道 dhclient-script 中的上述设置吗?[编辑] 我想知道实用的 dhclient 脚本。

我担心,应该采取一些特殊的考虑。例如,因为每个 IPv6 地址都有首选/有效的生命周期,当我根据委托前缀为 LAN 接口分配全局 IPv6 地址时,我不仅要分配 IPv6 地址,还要分配必须从委托派生的生命周期前缀的首选/有效生命周期?

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

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

San*_*ann 5

我不知道您问题的答案,但我只是想警告您有关使用 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
Run Code Online (Sandbox Code Playgroud)

  • 实际上,您希望accept_ra为2(即使启用路由也接受)。否则内核会在路由器上忽略它。 (2认同)

wom*_*ble 2

  • 在使用 DHCPv6 PD 获取其他子网之前,应通过获得默认(上游)互联网连接的任何设备设置 IPv6 默认路由。您没有提到您实际上是如何连接上游的,所以我无法帮助您。
  • 我使用 WIDE DHCPv6 客户端,而不是 ISC,所以我不知道具体如何操作,但我希望 ISC 具有与此 WIDE 配置选项等效的功能:

    id-assoc pd {
        prefix-interface eth0 {
            sla-id 1;
            sla-len 4;
        };
    };
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  • 3,4。我也许可以编写一些糟糕的脚本来根据 DHCPv6 服务器的信息(前缀等)构建 radvd.conf 和 dhcpd6.conf 。但是当 DHCPv6 重新配置发生时,如何公告新的和过时的信息?radvd 自动宣布以前的前缀已过时?DHCPv6 服务器自动宣布以前的名称服务器已过时? (2认同)