Amazon VPC 上的 IPv6:Ubuntu 中缺少默认路由

Amazon VPC 上的 IPv6:Ubuntu 中缺少默认路由

现在亚马逊已扩展 IPv6支持 VPC 覆盖其大部分全球区域,包括 eu-west-1,我正在尝试连接我的实例。不幸的是,我无法让路由正常工作。

我已按照迁移指南,即我已将 IPv6 CIDR 关联到我们的 VPC,将其中的一部分分配给我们的“公共”子网,更新了 VPC 路由表以::/0通过 igw(互联网网关)发送,确保该路由表已分配给公共子网,并从控制台将 IPv6 地址分配给一些新的 Ubuntu 16.04 实例。

然后我将 Ubuntu 配置为通过 DHCPv6 获取分配的地址如这里所述,通过添加iface eth0 inet6 dhcp网络设置并重新启动。

当我重新启动实例时,启动需要多花几分钟,但最终我可以登录并ip a s显示配置的 IPv4 和全局 IPv6 地址。

但是,v6 网络不工作:

# ping6 www.google.com
connect: Network is unreachable

路由表确实缺少默认路由:

# ip -6 route
2001:DB8:1234:1234:1234:1234:1234:1234 dev eth0  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256  mtu 9001

手动添加默认 v6 路由,通过ip -6 route add default dev eth0以下方式可以得到正确的路由表:

# ip -6 route
2001:DB8:1234:1234:1234:1234:1234:1234 dev eth0  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256  mtu 9001
default dev eth0  metric 1024

不幸的是,这会导致不同的错误:

# ping6 www.google.com
PING www.google.com(dh-in-x6a.1e100.net) 56 data bytes
From dh-in-x6a.1e100.net icmp_seq=1 Destination unreachable: Address unreachable
From dh-in-x6a.1e100.net icmp_seq=2 Destination unreachable: Address unreachable
From dh-in-x6a.1e100.net icmp_seq=3 Destination unreachable: Address unreachable

DHCPv6 客户端不是应该负责添加默认路由吗?为什么我到那时仍然无法访问外部世界?

答案1

你的路由表看起来不正确。这一行看起来非常错误:

default dev eth0  metric 1024

这行表示整个互联网直接连接到您的eth0接口,无需通过任何中间路由器。这将导致您的系统向 LAN 发送邻居发现请求,以接收它尝试访问的每个主机。如果该主机未直接连接到您的 LAN,它将看不到邻居发现请求。

因此,您不能真正指望该路由表能正常工作。对于某些路由器,可以配置相邻路由器来解决您的错误配置。但您不应该依赖它。相反,您应该找出正确的网关地址并进行配置。

以下是具有功能连接的特定机器上的路由表条目的示例:

default via fe80::1 dev eth0  metric 1024  advmss 1220

部分via fe80::1是您的缺失部分。您应该使用的地址可能与 不同fe80::1,如果您的提供商没有告诉您,您需要询问他们要使用哪个网关地址。我见过的提供商选择处理网关的两种方式是 或fe80::1前缀/64后跟 ,::1在您的情况下将变成2001:DB8:1234:1234::1

advmss 1220部分不是绝对必要的,但我将其包括在内,因为它可以解决一些 MTU 问题。

修复路由表条目后,接下来要测试的步骤是验证路由器是否出现在邻居缓存中。然后使用traceroute6mtr查看在数据包丢失前您可以将数据包传输多远。

答案2

事实证明我错过了迁移指南中的一个步骤。

在现有 VPC 上启用 IPv6 时,如果您对默认内容进行了修改,则必须手动更新某些内容(例如路由表和安全组)。

我已经更新了我们的路线表(按照http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-migrate-ipv6.html#vpc-migrate-ipv6-routes)和安全组(根据http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-migrate-ipv6.html#vpc-migrate-ipv6-sg-rules),但忘记更新我们的网络 ACL,正如同一页面所提到的。

因此,我有效地对所有 IPv6 流量进行了防火墙保护。添加入站和出站 ALLOW 规则::/0解决了我的问题Ubuntu 16.04

为了Ubuntu 14.04亚马逊的迁移指南中确实存在错误,现已修复。添加到的建议iface eth0 inet6 dhcp不起作用/etc/networking/interfaces.d/eth0.cfg,导致配置了 IPv6 地址,但缺少默认路由。

相反,我必须在接口出现时启动 dhcp-client,如下所示:up dhclient -6。我最终在文件中得到了以下工作配置/etc/networking/interfaces.d/eth0.cfg

# The primary network interface
auto eth0
iface eth0 inet dhcp
    up dhclient -6 -v -pf /run/dhclient6.$IFACE.pid -lf /var/lib/dhcp/dhclient6.$IFACE.leases $IFACE

亚马逊似乎已经更新了他们的迁移指南并说了类似的话(http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-migrate-ipv6.html#ipv6-dhcpv6-ubuntu-14)。

答案3

尽管路由表中有一个指向 VPC 的 igw 的 ::/0 路由,但我还是遇到了同样的问题。问题是防火墙规则集阻止了邻居发现协议的 ICMPv6 数据包。

您当然需要允许 icmp6types 133,134,135,136,137

相关内容