在 Linux 上设置 IPv6 非常简单,您可以遵循 IPv4 指南并为自己提供一个静态 IPv6 地址。
在 Solaris 上,情况并不那么乐观,只有运行 后 IPv6 才能工作in.ripng
。运行此命令后,您将在本地 LAN 段上获得 IPv6 地址自动配置。因此,虽然我为 Solaris 配置了一个静态 IPv6 地址,但最终我得到了三个,即链路本地范围、静态全局范围和自动配置的全局范围:
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
eri0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 10.6.28.36 netmask ffffff00 broadcast 10.6.28.255
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
inet6 ::1/128
eri0: flags=2100841<UP,RUNNING,MULTICAST,ROUTER,IPv6> mtu 1500 index 2
inet6 fe80::203:baff:fe4e:6cc8/10
eri0:1: flags=2100841<UP,RUNNING,MULTICAST,ROUTER,IPv6> mtu 1500 index 2
inet6 2002:dce8:d28e::36/64
eri0:2: flags=2180841<UP,RUNNING,MULTICAST,ADDRCONF,ROUTER,IPv6> mtu 1500 index 2
inet6 2002:dce8:d28e:0:203:baff:fe4e:6cc8/64
eri0:1
是我随意选择的与 IPv4 主机匹配的静态地址,eri0:2
显示重新使用来自链路本地接口的数字的自动配置地址。
in.ripng
配置如下/etc/inet/ndpd.conf
:
ifdefault AdvSendAdvertisements true
prefixdefault AdvOnLinkFlag on AdvAutonomousFlag on
if eri0 AdvSendAdvertisements 1
prefix 2002:dce8:d28e::/64 eri0
因此,自动配置扩展到 LAN 段上的所有其他主机,因此以前只有一个全局范围地址的 Linux 服务器现在产生两个:
eth0 Link encap:Ethernet HWaddr 00:14:5e:bd:6d:da
inet addr:10.6.28.31 Bcast:10.6.28.255 Mask:255.255.255.0
inet6 addr: 2002:dce8:d28e:0:214:5eff:febd:6dda/64 Scope:Global
inet6 addr: fe80::214:5eff:febd:6dda/64 Scope:Link
inet6 addr: 2002:dce8:d28e::31/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
这些配置合理吗?
让面向互联网的服务器根据其 MAC 地址获取地址似乎是不现实的。
从网络堆栈的开发角度来看,我想绑定到eth0
IPv6,虽然忽略链路本地范围接口很简单,但我如何在两个全局范围地址之间进行选择?
申请起来很困难RFC 3484排序规则,因为两者具有相同的范围和前缀长度。
编辑: 对于 Solaris 管理员的附注,在检查了系统配置之后,我现在实际上可以使静态寻址正常工作,而无需自动配置。
答案1
这种情况非常正常。如果您不希望 Linux 机器自动配置 IPv6 地址,您可以随时在 Linux 机器上的 /etc/sysctl.conf 中将其关闭:
net.ipv6.conf.eth0.autoconf = 0