IP転送なしで異なるインターフェース上のサブネット間の接続

IP転送なしで異なるインターフェース上のサブネット間の接続

これはスーパーユーザーに関する最初の質問なので、標準に達していない場合はお詫び申し上げます。

私は pop!_OS 19.10 (Ubuntu 19.10 ベース) を実行しており、そのネットワーク動作を理解しようとしています。ネットワーク インターフェイスを考慮してeth0、次のサブネットを追加しました。

ip addr add dev eth0 192.168.2.18/24
ip addr add dev eth0 192.168.3.18/24

インターフェースは次のようになります(MACアドレスが変更されました)

1: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.18/24 scope global enp0s31f6
       valid_lft forever preferred_lft forever
    inet 192.168.3.18/24 scope global enp0s31f6
       valid_lft forever preferred_lft forever

を使用するとnc、IP アドレス192.168.2.18との間でデータを送信できます192.168.3.18

##################################################################################
# nc -v -l 192.168.2.18 8080
Listening on [pop-os] (family 2, port 8080)
Listening on pop-os 8080
Connection received on pop-os 55361
Hello World!
##################################################################################
# nc -v -s 192.168.3.18 192.168.2.18 8080
Connection to 192.168.2.18 8080 port [tcp/http-alt] succeeded!
Hello World!
##################################################################################
# ss -4 -n
tcp    ESTAB    0    0    192.168.3.18:55361    192.168.2.18:8080           
tcp    ESTAB    0    0    192.168.2.18:8080     192.168.3.18:55361          

質問1:住所は別々のサブネット同じインターフェース常に相互に通信できるのでしょうか (ファイアウォールによってブロックされない限り)? これは、カーネルがルーティング テーブルを調べて、2 つのネットワークをローカルで接続できることを確認したためでしょうか? つまり、

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

私はこれをテストしました。カーネルIP転送を調べていて、ここ:

ただし、転送がオフになっている場合、カーネルは最初にパケットがどのインターフェースから来たのかを確認します。同じインターフェースから来ていない場合、カーネルはそれを破棄します。

ただし、アドレス を使用して、192.168.2.18他のインターフェース経由でに接続することもできます。IP 転送は無効になっています。wlan0192.168.1.73

Netid    State  Recv-Q  Send-Q    Local Address:Port  Peer Address:Port           
tcp      ESTAB  0       0         192.168.2.18:8080   192.168.1.73:40405          
tcp      ESTAB  0       0         192.168.1.73:40405  192.168.2.18:8080           

質問2:異なるサブネットとインターフェース上の IP アドレスが、IP 転送を有効にせずに通信できるのはなぜですか? 同じホストに属しているからでしょうか? この動作はどこで定義されていますか? つまり、IP 転送ルールは、パケットがホストから送信され始めたときにのみ有効になるのでしょうか?

答え1

質問 1: 同じインターフェース上の別々のサブネット内のアドレスは、常に相互に通信できると想定してよいでしょうか (ファイアウォールによってブロックされない限り)? これは、カーネルがルーティング テーブルを調べて、2 つのネットワークをローカルに接続できると判断するからでしょうか? つまり、

はい。これは、見つかった「サブネット」エントリが原因ではなく、別のルーティング テーブル (「ローカル」テーブル) にある「ローカル アドレス」エントリが原因です。古い「ルート」ツールは、これらのエントリを意図的に隠している可能性が高いですが、これも時代遅れであり、最新の Linux カーネルによって保持されているルーティング情報を完全に表示することはできません。そのため、次のものを使用してください。

ip -4 route show table local
ip -6 ro ls tab local

(注: これは Linux に固有のものです。BSD では通常、ルーティング テーブルは 1 つだけであり、フラグが設定されたnetstat -rn特別なルートが表示されますl。他のオペレーティング システムでは、これは単なる組み込みの動作であり、必ずしもルートとして公開されるとは限りません。)

さらに、パケットは実際には物理インターフェースを使用しない代わりにカーネルは、自身のアドレスが単にルーティングされているかのように動作します。ループバックインターフェース 'lo'。

質問 2: IP 転送を有効にしなくても、異なるサブネットとインターフェース上の IP アドレスが通信できるのはなぜですか? 同じホストに属しているからでしょうか? この動作はどこで定義されていますか? つまり、IP 転送ルールは、パケットがホストから送信され始めたときにのみ有効になるのでしょうか?

はい、同じホストに属しているためです。(Linux では、同じネットワーク名前空間 (同じコンテナーなど) 上にある必要もあります。)

IP転送ルールはパケットが受け取った非ループバック インターフェイス経由 (たとえば、イーサネット経由でローカル MAC アドレスに送信) ですが、その宛先 IP がホストに属するものとして認識されません。

定義上、ローカルで生成されたパケットは「転送」されません (ローカルの送信元 IP アドレスを持つため「出力」されます)。そのため、転送ルールは適用されません。

関連情報