2014-10-28 42 views
-1

我有一台Linux机器和我的网络上的IPv6,它的工作原理。现在我想为它设置DHCP。我设置了isc-dhcp-server并配置了子网。dhcpv6返回坏子网

另一台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输出:

[email protected]:~$ 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 
    { 
    }; 
}; 

有什么不对?为什么这不起作用?是坏的子网大小在服务器中的错误?或客户?

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

+1

你不想把64分成更小的网络。参见RFC 5375,IPv6单播地址分配的注意事项,“使用比/ 64其他子网前缀长度将突破IPv6的许多功能...” – 2014-10-28 19:07:14

+0

嗯......谢谢你提供的链接。它看起来像强烈建议。 但是,我的提供商只给我我租用的服务器上一个/ 64范围内,我将它设置成它的一个子范围转发到我的网站。我不想要NAT,因为地址空间应该足够。 从提供商的范围是2A01:4F8:202:6106 ::/64 我制成的隧道,在一个微小的子网,其中的一部分,将数据包转发到/ 80子范围(内部/ 64,但不隧道的p2p网络)。 因此,我不能采取整个范围。它不会为远程机器本身留下地址。 如何做到这一点没有NAT任何建议? – Blindleistung 2014-10-28 19:17:34

+0

此外,如果此提议是原因,DHCP服务器应报告错误。也许我应该尝试发布到isc dhcp服务器论坛。还有其他一些错误。 – Blindleistung 2014-10-28 19:22:33

回答

0

首先当然一般警告:使用非/64子网大小会破坏事情。你的ISP真的应该给你一个合适的地址空间来处理,比如/48/56。然后,您可以将/64从您想要的任何地方发送出去。

然后,你必须看看你的ISP如何给你你当前的/64。如果他们将其路由到连接到服务器的eth0接口的局域网,则除了桥接或代理ND之外,没有什么可以做的了,因为您必须使其看起来像所有东西都直接连接到该局域网。两种方法都有其自身的复杂性。

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

如果您使用的是代理-ND或ISP路由/64到你的服务器(以便您有您的服务器的界面,ISP和ISP路由/64该接口上的不同的IPv6地址),那么你确实应该运行radvddhcpd但只在内部接口上,而不是在您的ISP上。

回到您的RA + DHCPv6设置,因为您的问题部分很容易回答。有三件事情不对您radvd设置(所以,是的,这是相当重要的:)

首先,你不能除外/64什么都SLAAC(无状态地址自动配置),所以你必须把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; 
    }; 
};