Routing

基於 OpenVPN 的 IPv6 路由

  • March 23, 2022

試圖了解 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和您自己的表(我稱為 mine mynet6)。

首先為自定義路由表添加一個條目:

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 子網分配給自己的網路是一個完全不同的章節,我不會在這裡介紹。:-)

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