仅 ping 默认网关后 IPv6 才有效。

仅 ping 默认网关后 IPv6 才有效。

现在已经是 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
!

相关内容