基於 OpenVPN 的 IPv6 路由
試圖了解 IPv6 如何與 OpenVPN 一起工作,所以我想設置以下方案。
我有一個 VPS 伺服器 (Ubuntu),它被分配了一個 /48 子網。
ISP ipv6 gateway is XXXX:XXXX:XXXX::1 Server ipv6 address is XXXX:XXXX:XXXX:39::1
這個想法是任何連接到伺服器的客戶端都會在 XXXX:XXXX:XXXX:39:2::/64 子網上獲得一個 IP 地址。
伺服器配置文件基於來自 OpenVPN 的範例配置,並添加了以下內容:
dev tun tun-ipv6 server-ipv6 XXXX:XXXX:XXXX:39:2::/64 push "route-ipv6 XXXX:XXXX:XXXX:39::/48"
重新啟動 OpenVPN 伺服器沒有問題。
為伺服器分配了以下 IP 地址:
eth0: XXXX:XXXX:XXXX:39::1/48 tun0: XXXX:XXXX:XXXX:39::2/64
客戶被分配:
OpenVPN 點擊:XXXX:XXXX:XXXX:39:2:0:1:0,我可以 ping XXXX:XXXX:XXXX:39::1 就好了。但是,從客戶端 ping ISP 網關會導致連接超時。
我可以從伺服器 ping ISP ipv6 網關。
我在 Ubuntu 防火牆中允許來自 XXXX:XXXX:XXXX:39:2::/64 的流量。
我錯過了什麼?
我應該提到伺服器正在執行 OpenVPN 版本 2.2.1 - 這是抱怨的原因嗎?
事實證明,將我的託管伺服器用作 IPv6 網關並不是那麼容易。儘管這是一個多步驟的過程,但它是可行的。
我最後在這裡問了一下,所以下面是我在這個過程中學到的總結。
為了獲得一個可路由的子網,我去了 Hurricane Electric,並從 Hurricane Electric 獲得了一個路由 /48 子網。有關如何獲取您自己的子網的更多資訊,請訪問https://tunnelbroker.net 。
他們將提供通過 IPv4 隧道路由的 IPv6,並告訴您應該添加什麼
/etc/interfaces
。我在隧道鏈路上的 IPv6 地址格式為:
2001:470:xxxx:xxx::/64
。因此,應將以下幾行添加到/etc/interfaces
:auto he-ipv6 iface he-ipv6 inet6 v4tunnel address 2001:470:xxxx:xxx::2 netmask 64 endpoint <ipv4 address Tunnelbroker side> local <public ipv4 address your side> ttl 255 gateway 2001:470:xxxx:xxx::1
但是由於我的伺服器已經有一個公共 IPv6 地址,它會導致一些問題,我們必須先緩解這些問題,然後我才能從 Tunnelbroker 子網 ping 任何東西。
#輸入基於策略的路由。
這個想法是伺服器根據源 IPv6 地址決定它應該為 IPv6 流量使用哪個出站連結。
規則非常簡單。
- 如果流量來自伺服器本身,則使用預設網關。
- 如果流量來自我的 /48 子網,則使用 IPv6 over IPv4 連結。
這意味著您需要兩個路由表。預設路由表(稱為:)
main
和您自己的表(我稱為 minemynet6
)。首先為自定義路由表添加一個條目:
echo 100 mynet6 > /etc/iproute2/rt_tables
為了 agument 的緣故,假設我被分配了子網
2001:db8:cafe::/48
。我製作了一個腳本,當 VPN 連結啟動時由 OpenVPN 呼叫,因為我的 /48 子網僅駐留在我的 VPN 連結上。腳本有點像這樣:
# 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: "mynet6"). ip -6 route flush table mynet6 # All traffic from my /48 subnet should be added to Tunnelbroker routing table ip -6 rule add priority 32000 from 2001:DB8:CAFE::/48 table mynet6 # 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 mynet6
#驗證配置
您可以使用以下命令驗證您的路由設置:
ip -6 rule show
它應該包含以下內容:
0: from all lookup local 32000: from 2001:db8:cafe::/48 lookup mynet6 32766: from all lookup main
Tunnelbroker 鏈路的路由表可以通過以下方式找到:
ip -6 route show table mynet6
它應該輸出如下內容:
unreachable 2001:db8:cafe::/48 dev lo metric 1024 error -113 pref medium default via 2001:470:xxxx:xxx::1 dev he-ipv6 metric 1024 pref medium
您的預設路由表可在此處找到:
ip -6 route show table main
它應該有以下幾行:
unreachable 2001:db8:cafe::/48 dev lo metric 1024 error -113 pref medium default via XXXX:XXXX:XXXX::1 dev eth0 metric 1024 pref medium
這應該是伺服器從 /48 子網接收流量時必須做的事情。如何將 /48 子網分配給自己的網路是一個完全不同的章節,我不會在這裡介紹。:-)