Strongswan IPv6 隧道路由

Strongswan IPv6 隧道路由

我正在嘗試解決路由中的一個奇怪問題。我已經設定了路由器(Turis,運行客製化的 OpenWRT),並使用 Strongswan 隧道 ipv6 連線。這對於路由器本身來說效果很好,因為它的 ipv6 連線工作正常(透過隧道,我的提供者不提供本機 ipv6)。

TL;DR:路由沒有按照我的預期進行選擇,作為最通用的路由,::/0 似乎始終是首選,儘管 /64 匹配可用。

但是當我嘗試將其擴展到我的家庭網絡時,我偶然發現了一個問題,我無法找到原因。

雖然 ipsec 有效,但我得到了 ipsec0 接口,以及這些路由:

Kernel IPv6 routing table
Destination                                 Next Hop                                Flags Metric Ref    Use Iface
::/0                                        ::                                      U     1024   0        2 ipsec0  
2a01:490:19:42::/64                         ::                                      U     1024   0        0 br-lan  

這裡,2a01:490:19:42::/64 是我專門用於本地網路的等級,2a01:490:19:42::1 是該網路上路由器的 IP 位址。

以下是一些觀察:

1) 當我從本機網路上的電腦 ping 2a01:490:19:42::1 時,路由器做出回應,但將回應傳送到 ipsec0 介面。我不知道為什麼。 br-lan 上更具體的前綴 2a01:490:19:42::/64 不應該受到青睞嗎?看來正確選擇了來源IP位址2a01:490:19:42::1。

2)當我嘗試將封包從本機網路傳送到其他網站(例如 ping6 stackexchange.com)時,也會發生同樣的情況。封包到達路由器,被轉發,伺服器發送回應,路由器接收它......並將其發送回 ipsec0 介面。

3)沒有xfrm政策。ip xfrm pol什麼也不返回。但 Strongswan 正在運行,我的印像是,Strongswan 總是製定一些政策。在我之前的設定中,我必須添加一些內容才能將資料包傳遞到隧道中,但我對策略清單為空感到有點困惑。

好吧,那有什麼問題嗎?為什麼我的 ipv6 封包首選最通用的路由 ::/0?

謝謝!

答案1

問題是, ipsec 將其規則插入不同的路由表( table 220)並建立了一個策略來引導流量:

root@turris:/etc/config# ip rule list
0:  from all lookup local 
220:    from all lookup 220 
32766:  from all lookup main 
32767:  from all lookup default 

但該表220僅包含進入 ipsec 隧道的預設路由,而不包含本地網路:

root@turris:/etc/config# ip -6 r show table 220
default dev ipsec0  proto static  src 2a01:490:19:42::1  metric 1024 

這不可避免地導致所有資料包都轉發到隧道中。

路由器本身的網路工作只是因為它們被接受但未被路由。

我透過指示 Strongswan 將路由規則插入主表中來解決此問題,方法是設定charon.routing_table = 254(main 的 id,如 中所示/etc/iproute2/rt_tables)。我strongswan.conf現在的樣子是這樣的:

charon {
#       load_modular = yes
        plugins {
                include strongswan.d/charon/*.conf
        }
        routing_table = 254 # main
}

相關內容