IPv6 仅在 ping 默认网关后工作。

8 networking linux ipv6 linux-networking debian-squeeze

我们现在有 2013 年,我认为在我的服务器上激活 IPv6 早就应该了。但不幸的是,我遇到了一些问题。老实说,我对 IPv6 的经验很少,所以我希望你能帮助我解决我的“小”问题。

一个小说明:以下地址被混淆了,这不是我在配置中使用的地址;)

我正在运行 Debian 压缩(Debian 2.6.32-46)并且我从我的提供商那里得到了一个 /64 IPv6 块:2a01:4f8:a0:aaaa::/64

所以我改变了/etc/network/interfaces文件如下(这也是我的供应商推荐的方式):

# 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
Run Code Online (Sandbox Code Playgroud)

重新启动后(我很懒,不想使用routeor添加所有东西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 
Run Code Online (Sandbox Code Playgroud)

路线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
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是我的 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
Run Code Online (Sandbox Code Playgroud)

2a01:4f8:a0:bbbb::1是顺便说一句。列为我的网关(在我的提供商的在线管理控制台中)。

我认为,这一切的原因是缺少 NDP 条目/缺少fe80::1 的MAC 地址。因为ip -6 neigh给了我:

fe80::1 dev eth0  router FAILED 
Run Code Online (Sandbox Code Playgroud)

我这么认为是因为如果我这样做:ping6 -I eth0 fe80::1我会得到一个正确的回声回复和我的fe80::1地址所需的 mac 地址以及一个完美工作的 IPv6 堆栈:

$ip -6 neigh
fe80::1 dev eth0 lladdr ll:mm:nn:oo:pp:qq router REACHABLE
Run Code Online (Sandbox Code Playgroud)

这也是来自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
Run Code Online (Sandbox Code Playgroud)

(再次:fe80::bbbb:cccc:dddd:eeee是我的本地链接地址,源自 MAC 地址)

从现在开始,我可以使用 IPv6:我可以 ping6 网站,我可以使用 IPv6 连接到服务,甚至可以使用 IPv6 通过 ssh 连接到我的服务器。

那么,我在这里做错了什么?我花了很多时间试图找出如何“解决”这个问题。我敢打赌它可以使用两个命令解决。顺便说一下,这是我第一次在服务器上处理 IPv6。所以请原谅我的经验不足。顺便提一句。我还尝试更改一些 sysctl net.ipv6.* 标志,但没有成功。如果解决方案需要,我也可以在这里发布我的配置。

每个提示都非常受欢迎!

非常感谢您提前!

小智 9

几周后,我今天再次尝试解决整个问题。我能说什么,我修好了。有人可以解释一下为什么添加 ipv6 环回可以解决我的问题吗?这是我添加到我的/etc/network/interfaces文件中的内容:

iface lo inet6 loopback
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我首先忘记添加它!^^ 谢谢大家的回复!