我安装了运行在内核 2.6.32-5-amd64 上的 Debian 6.0.6,安装后我为 eth0 接口分配了一个静态 IPv6 地址。
我的 /etc/network/interfaces 文件如下所示:
自动 lo
iface lo inet 环回自动 eth0
iface eth0 inet6 静态address fe80::a:1 netmask 64 gateway fe80::1
“ifconfig eth0”的输出如下:
eth0 链路封装:以太网 HWaddr 10:1f:74:c6:27:5f
inet6 地址:fe80::121f:74ff:fec6:275f/64 范围:链接
inet6 地址:fe80::a:1/64 范围:链接
上行广播正在运行多播 MTU:1500 度量:1
RX 数据包:45 错误:0 丢弃:0 超限:0 帧:0
TX 数据包:48 错误:0 丢弃:0 超限:0 载波:0
冲突:0 txqueuelen:1000
RX 字节:6427(6.2 KiB)TX 字节:7969(7.7 KiB)
中断:20 内存:d0700000-d0720000
如您所见,有 2 个 IPv6 地址;
一个自动生成的 IPv6 地址,
一个通过 /etc/network/interfaces 静态分配的 IPv6 地址
现在我的问题是如何禁用自动生成的 IPv6 地址?
大多数网站告诉我将以下几行添加到文件 /etc/sysctl.conf 中:
net.ipv6.conf.eth0.autoconf=0
net.ipv6.conf.eth0.accept_ra=0
但系统重启后什么也没发生。因此我通过运行命令手动删除了第一个 IPv6 地址:
ip -6 地址 del fe80::121f:74ff:fec6:275f/64 dev eth0
第一个 IPv6 地址确实被删除了,但重启后该地址又恢复了。
关于如何解决这个问题有什么线索吗?
提前谢谢
答案1
您使用 Link-Local 地址(以 fe80: 开头的地址)的方式不正确。让我来描述一下 IPv6 的工作原理:
当接口启动时,系统将始终自动为该接口配置一个链路本地地址。此链路本地地址不可路由,仅适用于同一链路(LAN)上的系统之间的通信。它用于许多地方,对于正常运行的 IPv6 设置至关重要。即使系统获得可路由的地址,链路本地地址仍然保留。
从RFC 4861:“路由器上的所有接口都必须具有链路本地地址。”
当路由器发出路由器通告 (RA) 时,系统可以使用 RA 中的信息自动配置其其他地址。您可以使用 autoconf 禁用此部分。
fe80::a:1
在您的配置中,您在接口上配置了一个额外的链路本地地址 ( ),然后尝试将 LAN 外部的流量路由到地址fe80::1
为 的默认网关。使用链路本地地址作为默认网关是可以的,而且经常发生,但使用链路本地地址作为本地 LAN 以外目的地的源地址永远不会奏效。
把它们加起来:
不要管链接本地地址。删除它会破坏你的 IPv6 配置。
为您的系统使用可路由地址。有多种方法可以获取可路由地址:
- 从您的 ISP 获取前缀。您通常会获得一个
/48
或一个/56
前缀。 - 从获得隧道六XS或者飓风电气并请求一个委托前缀。它将是一个
/48
。 - 生成 ULA 前缀。您无法将其路由到全球互联网,但您可以在自己的组织内路由它。使用ULA 发电机根据您某个设备的某个 MAC 地址生成 ULA 前缀。
然后为每个 LAN 使用上面得到的前缀中的 `/64` 前缀。除非您 *真正* 知道自己在做什么,否则不要在 LAN 上使用不同的前缀长度。- 从您的 ISP 获取前缀。您通常会获得一个
用作
fe80::1
默认网关就可以了(当然,如果本地链路上确实有一个路由器在监听该地址)