別々のルーティングテーブルにルートを持たずに、異なるインターフェースにアクセスできる

別々のルーティングテーブルにルートを持たずに、異なるインターフェースにアクセスできる

現在、ゲスト 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.251table 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 

関連情報