
現在、ゲスト VLAN (eth1.251) のサブネットからのすべてのパケットを Wireguard トンネル経由でインターネットにルーティングしようとしています。これを実現するために、トラフィックがゲスト サブネットから来るときにルーティング テーブル 10 を使用するルールでポリシー ベース ルーティングを使用しています。
32765: from 10.251.0.0/16 lookup 10
ルーティング テーブル 10 では、トンネル インターフェイスへのデフォルト ルートを作成しています。
default dev wg1 scope link
ゲスト ネットワーク内のすべてのクライアントは、Wireguard トンネルを介してインターネットにアクセスできますが、これは予想どおりです。ただし、クライアントはゲスト ネットワークのゲートウェイにアクセスできません(10.251.0.1)
。TCPDump は、ICMP エコー応答がインターフェイスを介してトンネル エンドポイントにルーティングされていることを示していますが、これは明らかに意図されたものではありません。この問題の簡単な解決策は、ゲスト VLAN インターフェイスのスコープ リンク ルートをルーティングにwg1
追加することです。eth1.251
table 10
default dev wg1 scope link
10.251.0.0/16 dev eth1.251 proto kernel scope link
これで、クライアントはルーターのインターフェースにアクセスしてサービスを利用できるようになります。
このルータには、サブネットを持つ別のインターフェースeth1があります192.168.0.1/16
。新しく追加された10.251.0.0/16
ルートを削除すると、table 10
ルータのインターフェースにアクセスできなくなります10.251.0.1
が、まだ到達可能192.168.0.1
サブネット上のクライアントからインターフェースにアクセスできません10.251.0.0/16
。サブネット内のルーターの背後にあるクライアント (例192.168.0.2
) には、192.168.0.0/16
からアクセスできません10.251.0.0/16
。
主な質問192.168.0.1
:明示的なルーティング テーブル エントリがなくてもルーターのインターフェイス IP に到達できるのに、ゲスト10.251.0.1
サブネット内のクライアントからのインターフェイス IPに到達できないのはなぜですか10.251.0.0/16
?
ネットワーク構造の概要は次のとおりです。これは私たちのセットアップを理解するのに役立つと思います。
答え1
一般的な説明はなく、ルーティング設定で何が起こるかに従うだけです。
10.251.0.1 は、ローカル ルーターのアドレスであると同時に、10.251.0.0/16 の一部でもあります。
パケットを受信すると地元アドレスが一致すると、ルータは地元最も優先度の低い最初のテーブルip rule
、0、テーブル10のルールの前に、そして一致します。ルーティングテーブルは、目的地通常、カスタムルールは、ソース。
ルータが応答すると、今度はローカルテーブルが一致しません。10.251.0.2はローカルではありません。行き先次のルールがチェックされ、一致しfrom 10.251.0.0/16
、テーブル10を参照してパケットが通過します。1 号。
192.168.0.1の場合、パケットの受信は前と全く同じです。地元テーブル。これで、回答は追加のルールに一致せず、メインのルーティング テーブルが適用されます。通常どおり動作します。Linux システムは、任意の IP から応答します。
192.168.0.2の場合、これは地元IPなので一致しません地元テーブルに表示されているが、クエリは追加されたルールと一致している:パケットは1 号。
したがって、副作用を避けるために、メイン ルーティング テーブルの一部を追加テーブルにコピーすると役立ちます。
ip route get
マークが含まれていない限り、その多くは正しい構文を使用してテストできます。
表10の追加エントリがない場合:
# ip route get from 10.251.0.2 iif eth1.251 10.251.0.1
RTNETLINK answers: Invalid cross-device link
# sysctl -w net.ipv4.conf.eth1/251.rp_filter=2 #relax reverse path filtering
# ip route get from 10.251.0.2 iif eth1.251 10.251.0.1
local 10.251.0.1 from 10.251.0.2 dev lo table local
cache <local> iif eth1.251
# ip route get from 10.251.0.2 iif eth1.251 192.168.0.1
local 192.168.0.1 from 10.251.0.2 dev lo table local
cache <local> iif eth1.251
# ip route get from 10.251.0.2 iif eth1.251 192.168.0.2
192.168.0.2 from 10.251.0.2 dev wg1 table 10
cache iif eth1.251
返信ルート:
# ip route get from 10.251.0.1 10.251.0.2
10.251.0.2 from 10.251.0.1 dev wg1 table 10 uid 0
cache
# ip route get from 192.168.0.1 10.251.0.2
10.251.0.2 from 192.168.0.1 dev eth1.251 uid 0
cache
表10にエントリを追加する場合:
# ip route get from 10.251.0.2 iif eth1.251 10.251.0.1 #even with strict reverse path filtering, since the reverse route is correct
local 10.251.0.1 from 10.251.0.2 dev lo table local
cache <local> iif eth1.251
# ip route get from 10.251.0.1 10.251.0.2
10.251.0.2 from 10.251.0.1 dev eth1.251 table 10 uid 0
cache