dhcpv6返回坏子网

时间:2014-10-28 18:20:06

标签: linux ipv6 router dhcp

我在Linux机器和我的网络上使用IPv6并且它可以工作。现在我想为它设置DHCP。我设置了isc-dhcp-server并配置了子网。

另一台linux机器(都是debian 7)充当测试客户端并获取IP,但不在配置的范围内,更糟糕的是,获得/ 64子网而不是/ 80。

由于路由器上可用的IP池已经是分配给另一台上游机器的/ 64的子集,因此我需要一个较小的子网。我不能允许它是/ 64。

dhcp服务器的配置:

subnet6 2a01:4f8:202:6106:acda::/80 {
    range6  2a01:4f8:202:6106:acda:f000::/84;
    option dhcp6.name-servers 2a01:4f8:202:6106::2;
    prefix6 2a01:4f8:202:6106:acda:c000:: 2a01:4f8:202:6106:acda:f000:: /84;
}

客户端上的ifconfig输出:

debian@arm:~$ sudo ifconfig
[sudo] password for debian:
eth0      Link encap:Ethernet  HWaddr c8:a0:30:ae:48:24
          inet addr:192.168.0.104  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::caa0:30ff:feae:4824/64 Scope:Link
          inet6 addr: 2a01:4f8:202:6106:acda:ff2f:452c:b7b5/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:185 errors:0 dropped:0 overruns:0 frame:0
          TX packets:201 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:18222 (17.7 KiB)  TX bytes:23159 (22.6 KiB)
          Interrupt:56

连接的Windows-7机器根本没有获得IPv6地址。

服务器上的radvd配置(如果重要)

interface eth0 {
    AdvSendAdvert on;
    prefix 2a01:4f8:202:6106:acda::/80 {
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr on;
    };
    route 2000::/3
    {
    };
};

出了什么问题?为什么这不起作用?坏子网大小是服务器中的错误吗?还是客户?

错误的子网大小的结果是,例如名称服务器,在64位范围内的2a01:4f8:202:6106 :: 2是不可访问的。客户端认为它应该在局域网段上,并尝试获取链路本地IPv6及其以太网MAC并失败。它需要通过路由器。当我手动将子网设置为/ 80时,一切正常。

1 个答案:

答案 0 :(得分:0)

首先当然是一般警告:使用非/64子网大小会破坏事情。您的ISP应该为您提供相当数量的地址空间,例如/48/56。然后,您可以将/64路由到您想要的任何地方。

然后你必须看看你的ISP如何为你提供当前的/64。如果他们将其路由到连接到服务器eth0接口的LAN,那么除了桥接或代理ND之外,您无能为力,因为您必须使其看起来像所有内容都直接连接到该LAN。这两种方法都有其自身的复杂性。

如果您正在桥接到由ISP管理的局域网,那么您不应该运行radvddhcpd之类的内容,因为您会干扰您的ISP。

如果您正在使用proxy-ND或您的ISP将/64路由到您的服务器(因此您在服务器的ISP接口上有不同的IPv6地址,并且ISP将/64路由到该服务器接口)然后你应该确实运行radvddhcpd,但只能在内部接口上运行,而不是你的ISP。

返回RA + DHCPv6设置,因为您的问题部分很容易回答。您的radvd设置有三个问题(所以,是的,它很重要:)

首先,您不能对/64以外的任何内容执行SLAAC(StateLess地址自动配置),因此您必须关闭AdvAutonomous。然后,您必须告诉客户端托管(有状态)DHCPv6服务器可用,因此请打开AdvManagedFlag。并且route 2000::/3也是不必要的。您宣称自己是默认网关,而这个更具体的网站并没有添加任何有用的东西。

interface eth1 {
    AdvSendAdvert on;
    AdvManagedFlag on;
    prefix 2a01:4f8:202:6106:acda::/80 {
        AdvOnLink on;
        AdvAutonomous off;
        AdvRouterAddr on;
    };
};