我在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 回答
首先当然是一般警告:使用非
/64
子网大小会破坏事情 . 您的ISP应该真正为您提供相当数量的地址空间,例如/48
或/56
. 然后,您可以将/64
路由到您想要的任何地方 .然后你必须看看你的ISP如何为你提供当前的
/64
. 如果他们将其路由到连接到服务器的eth0
接口的LAN,那么除了桥接或代理ND之外,您无能为力,因为您必须使其看起来像所有东西都直接连接到该LAN . 两种方法都有其自身的复杂性 .如果您正在桥接到由ISP管理的LAN,那么您不应该运行
radvd
或dhcpd
之类的任何内容,因为您将干扰您的ISP .如果您正在使用proxy-ND或您的ISP将
/64
路由到您的服务器(因此您在服务器的ISP接口上有不同的IPv6地址,并且ISP将/64
路由到该接口),那么您确实应该运行radvd
和dhcpd
但是仅在内部接口上,而不是在您的ISP上 .返回您的RA DHCPv6设置,因为您的问题部分很容易回答 . 您的
radvd
设置有三个问题(所以,是的,它很重要:)首先,你不能在除
/64
之外的任何事情上执行SLAAC(StateLess地址自动配置),因此你必须关闭AdvAutonomous
. 然后,您必须告诉客户端托管(有状态)DHCPv6服务器可用,因此请打开AdvManagedFlag
. 并且route 2000::/3
也是不必要的 . 您宣传自己是默认网关,而这一点更具体,不会添加任何有用的内容 .