Amazon VPC 上的 IPv6:Ubuntu 中缺少預設路由
現在Amazon 已將 VPC 的 IPv6支持擴展到包括 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 客戶端不應該負責添加預設路由嗎?為什麼即使那樣我也無法到達外面的世界?
原來我錯過了遷移指南中的一步。
在現有 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)。
您的路由表看起來不正確。這條線看起來很錯誤:
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
ormtr
查看在封包遺失之前您可以獲取多遠的數據包。