首页 文章

dhcpv6返回坏子网

提问于
浏览
-1

我在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

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

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

    如果您正在桥接到由ISP管理的LAN,那么您不应该运行 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;
        };
    };
    

相关问题