现在亚马逊已扩展 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 问题。
修复路由表条目后,接下来要测试的步骤是验证路由器是否出现在邻居缓存中。然后使用traceroute6
或mtr
查看在数据包丢失前您可以将数据包传输多远。
答案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