现在已经是 2013 年了,我认为早就应该在我的服务器上激活 IPv6 了。但不幸的是,我遇到了一些问题。说实话,我对 IPv6 的经验很少,所以我希望你能帮助我解决这个“小”问题。
小注释:以下地址是经过混淆的,不是我在配置中使用的;)
我正在运行 Debian squeeze(Debian 2.6.32-46),并从我的提供商处获得了 /64 IPv6 块:2a01:4f8:a0:aaaa::/64
所以我改变了/etc/网络/接口文件如下(这也是我的提供商推荐的方式):
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet static
address 85.10.xxx.zz
broadcast 85.10.xxx.yy
netmask 255.255.255.224
gateway 85.10.xxx.1
iface eth0 inet6 static
# Main IPv6 Address of the server
address 2a01:4f8:a0:aaaa::2
netmask 64
gateway fe80::1
auto eth0:1
iface eth0:1 inet static
address 85.10.xxxx.uu
netmask 255.255.255.224
# default route to access subnet
up route add -net 85.10.xxx.0 netmask 255.255.255.224 gw 85.10.xxx.1 eth0
重启后(我很懒,不想使用route
或添加所有内容ip
)我的eth0界面如下:
eth0 < first line removed >
inet addr:85.10.xxx.zz Bcast:85.10.xxx.yy Mask:255.255.255.224
inet6 addr: 2a01:4f8:a0:aaaa::2/64 Scope:Global
inet6 addr: fe80::bbbb:cccc:dddd:eeee/64 Scope:Link <--- from MAC address
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:24133 errors:0 dropped:0 overruns:0 frame:0
TX packets:21712 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3464246 (3.3 MiB) TX bytes:5776451 (5.5 MiB)
Interrupt:25 Base address:0x2000
路线ip -6 route
如下:
2a01:4f8:a0:aaaa::/64 dev eth0 metric 1024 mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev vboxnet0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 4294967295
default via fe80::1 dev eth0 metric 1024 mtu 1500 advmss 1440 hoplimit 4294967295
现在,我的问题是 IPv6 无法正常工作。如果我尝试 ping IPv6 地址,例如 ping6 ipv6.google.com。我得到:“目标无法到达:地址无法到达”
看起来像这样tcpdump -i eth0 ip6
:
00:29:05.386500 IP6 2a01:4f8:a0:aaaa::2 > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
00:29:05.390869 IP6 2a01:4f8:a0:bbbb::1 > 2a01:4f8:a0:aaaa::2: ICMP6, neighbor advertisement, tgt is fe80::1, length 32
2a01:4f8:a0:bbbb::1顺便说一下,被列为我的网关(在我的提供商的在线管理控制台上)。
我认为,所有这一切的原因是缺少 NDP 条目/缺少 MAC 地址fe80::1.因为ip -6 neigh
给了我:
fe80::1 dev eth0 router FAILED
我认为是这样,因为如果我这样做:ping6 -I eth0 fe80::1
我会得到正确的回应和我的fe80::1地址以及完美运行的 IPv6 堆栈:
$ip -6 neigh
fe80::1 dev eth0 lladdr ll:mm:nn:oo:pp:qq router REACHABLE
这也再次是来自的转储tcpdump -i eth0 ip6
:
00:30:37.555702 IP6 fe80::bbbb:cccc:dddd:eeee > fe80::1: ICMP6, echo request, seq 1, length 64
00:30:37.560219 IP6 fe80::1 > fe80::bbbb:cccc:dddd:eeee: ICMP6, echo reply, seq 1, length 64
(再次:fe80::bbbb:cccc:dddd:eeee是我的链路本地地址,源自 MAC 地址)
从现在开始,我可以使用 IPv6:我可以 ping6 个网站,我可以使用 IPv6 连接到服务,甚至可以使用 IPv6 通过 ssh 连接到我的服务器。
那么,我在这里做错了什么?我花了很多时间试图找出如何“修复”这个问题。我敢打赌,使用两个命令就可以解决这个问题。顺便说一句,这是我第一次在服务器上处理 IPv6。所以请原谅我的经验不足。顺便说一句。我还尝试更改一些 sysctl net.ipv6.* 标志,但没有成功。如果解决方案需要,我也可以在这里发布我的配置。
非常欢迎任何提示!
提前非常感谢您!
答案1
几周后的今天,我又尝试了一次。我能说什么呢,我解决了它。有人能解释一下为什么添加 ipv6 环回可以解决我的问题吗?以下是我添加到我的/etc/网络/接口文件:
iface lo inet6 loopback
我不知道为什么我忘了添加它!^^ 谢谢大家的回复!
答案2
我正在看你的问题,其中你提到:
现在,我的问题是 IPv6 无法正常工作。如果我尝试 ping IPv6 地址,例如 ping6 ipv6.google.com。我收到:“目标无法访问:地址无法访问”
在 tcpdump -i eth0 ip6 中看起来像这样:
00:29:05.386500 IP6 2a01:4f8:a0:aaaa::2 > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32 00:29:05.390869 IP6 2a01:4f8:a0:bbbb::1 > 2a01:4f8:a0:aaaa::2: ICMP6, neighbor advertisement, tgt is fe80::1, length 32
这很奇怪。您的系统发送了正确的(就我从您的 tcpdump 中看到的情况而言)邻居请求,而路由器发回了正确的(再次是 AFAICT)邻居广告。这表明您的本地机器存在问题。
你在那台机器上安装防火墙了吗?ICMPv6 过滤与 ICMP 过滤有很大不同。IPv6 通信的更多部分需要ICMPv6 正常工作。如果您过滤过多或以错误的方式过滤,就会遇到与现在完全相同的问题。
如果您想了解更多详情,请查看RFC 4890。
答案3
尝试使用路由器的实际地址之一作为默认网关,而不是fe80::1
。
答案4
您的 IPv6 网关应位于同一子网中
iface eth0 inet6 static
# Main IPv6 Address of the server
address 2a01:4f8:a0:aaaa::2
netmask 64
gateway fe80::1
类似于 2a01:4f8:a0:aaaa::1,这是在路由器或 VLAN 配置中设置的,请检查您的路由器中的内容。示例:
interface GigabitEthernet0/0/1.201
encapsulation dot1Q 201
ipv6 address 2A00:7XXX:100::1/48
!