Linux

linux 基於 IPv6 策略的路由失敗

  • September 9, 2017

我有一個 VPN 伺服器,它充當我到 Internet 的 IPv6 連接。我們的設置是這樣的:

我被分配了一個 /48 地址池,我想將其子網連接到我的 VPN 客戶端。為了爭論,讓我們呼叫 pool 2001:DB8:CAFE::/48

我已將該網路分成以下部分: 2001:DB8:CAFE::/64分配給 VPN 伺服器和每個客戶端之間的實際 VPN 連結。

2001:DB8:CAFE:100:/56 分配給客戶端 1 後面的網路

2001:DB8:CAFE:200:/56 分配給客戶端 2 後面的網路

這給了我們這樣的佈局:

+---------------+ 2001:470:xxxx:xxx::/64 +---------------+ /-> 客戶端 1 網路(2001:DB8:CAFE:100::/56)
| + <-- 隧道代理連結-> + | /
| 網際網路 | | 我的 VPN 伺服器 + <-*---> VPN 連結 - 網路拓撲 (2001:DB8:CAFE::/64)
| + <- 本機 IPv6 連結 ---> + | \
+---------------+ 2a01:xxxx:xxxx:xxxx::/48 +---------------+ \-> 客戶端 2 網路(2001:DB8:CAFE:200::/56)

我想要的是所有來自的流量2001:DB8:CAFE::/48都通過我的 Tunnelbroker 連結進行路由 -並且只有那個連結

這導致我使用以下腳本:

# Reset IPv6 routing table.
ip -6 rule flush

# Reset Tunnelbroker routing table (table name: "he-ipv6").
ip -6 route flush table he-ipv6

# Add routeable VPN subnets to Tunnelbroker routing table
ip -6 rule add from 2001:DB8:CAFE::/48 table he-ipv6

# Any traffic that originates from VPN has to be forwarded via Tunnelbroker routing table 
# using the tunnelbroker link (link name: he-ipv6).
ip -6 route add default via 2001:470:xxxx:xxx::1 dev he-ipv6 table he-ipv6

# Add default IPv6 rules again - since they gets deleted by the initial rule flush command.
ip -6 rule add priority 32766 from all table main

但是:當我執行ip -6 route add default ...-command 時,我收到以下錯誤:

RTNETLINK answers: No route to host

問題是2001:470:xxxx:xxx::1在我執行腳本之前可以 ping,但之後不能。

我錯過了什麼?

幹!命令的順序很重要

該命令ip -6 route add default via 2001:470:xxxx:xxx::1 dev he-ipv6 table he-ipv6不起作用的原因是路由在main表中定義。

但是由於初始刷新命令會刪除主表,因此您必須在執行命令之前再次添加它ip route default

因此,正確的腳本是:

# Reset IPv6 routing table.
ip -6 rule flush

# Add default IPv6 rules again - since they gets deleted by the initial rule flush command.
ip -6 rule add priority 32766 from all table main

# Reset Tunnelbroker routing table (table name: "he-ipv6").
ip -6 route flush table he-ipv6

# Add routeable VPN subnets to Tunnelbroker routing table
ip -6 rule add from 2001:DB8:CAFE::/48 table he-ipv6

# Remember to add a rule that if no machine does not respond to a 
# packet address in my /48, then we should return unreachable. 
# Else the package will be forwarded by default out through the 
# Hurricane Electric connection.

#(From the Internet)
ip -6 route add unreachable 2001:DB8:CAFE::/48

#(From my /48 subnet)
ip -6 route add unreachable 2001:DB8:CAFE::/48 table mynet6

# Any traffic that originates from VPN has to be forwarded via Tunnelbroker routing table 
# using the tunnelbroker link (link name: he-ipv6).
ip -6 route add default via 2001:470:xxxx:xxx::1 dev he-ipv6 table he-ipv6

我將在這裡留下問題和答案,因為我可能不是唯一一個嘗試基於源進行 IPv6 路由的人。

我發現的關於這個主題的最新資訊是從 2010 年開始的。

引用自:https://serverfault.com/questions/854094