
ルーティングに関する奇妙な問題を解決しようとしています。ルーターをセットアップし (Turris、カスタマイズされた OpenWRT を実行)、Strongswan トンネリング IPv6 接続を使用しました。ルーター自体は問題なく動作しており、IPv6 接続も正常に動作しています (トンネル経由、プロバイダーはネイティブ IPv6 を提供していません)。
TL;DR: ルートは私が期待したとおりには選択されません。/64 の一致は利用可能ですが、最も一般的な ::/0 が常に優先されるようです。
しかし、これを自宅のネットワークに拡張しようとしたときに問題が発生し、原因を見つけることができません。
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) ローカル ネットワーク上のコンピューターから 2a01:490:19:42::1 に ping すると、ルーターは応答しますが、応答は 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 は常に何らかのポリシーを作成するという印象を持っていました。以前のセットアップでは、パケットをトンネルに渡すためにポリシーを追加する必要がありましたが、ポリシー リストが空であることに少し困惑しています。
さて、何が問題なのでしょうか? 最も一般的なルート ::/0 が IPv6 パケットに優先されるのはなぜですか?
ありがとう!
答え1
問題は、ipsec がそのルールを別のルーティング テーブル (テーブル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
その結果、必然的にすべてのパケットがトンネルに転送されることになります。
ルータ自体のネットワークは、受け入れられただけでルーティングされなかったために機能しました。
charon.routing_table = 254
私は、( に示されているメインの ID /etc/iproute2/rt_tables
)を設定して、strongswan にルーティング ルールをメイン テーブルに挿入するように指示することで、この問題を修正しました。私のstrongswan.conf
現在の状態は次のようになります。
charon {
# load_modular = yes
plugins {
include strongswan.d/charon/*.conf
}
routing_table = 254 # main
}