Linuxの単一インタフェースにある複数のIPソース

Linuxの単一インタフェースにある複数のIPソース

たとえば、NetworkManager を使用して単一のインターフェイスに複数の IP アドレスを設定できます。

マルチIP

別のIPを使用して外部PCに接続するには?

たとえば、IPアドレスが8つ(10.7.4.x、、、、...)で、異なるIPを使用して各宛先アドレスに接続したい場合は、任意のIPまたはシーケンシャルモード(ターゲットIPモード8 = 0の場合、次に使用します10.7.4.x+1。、ターゲットモード8 = 1のときを使用し、など)10.7.4.x+2xx+1

答え1

Linuxでは、発信接続のソースアドレス選択をルーティングテーブルを介して制御できます。

ip route add 10.11.12.0/24 via 10.7.4.1 src 10.7.4.200

特定の固定IP範囲に異なる送信元アドレスのみを使用する必要がある場合は、この方法で十分です。ただし、Linuxネットフィルタ()とポリシールーティング()iptablesの機能を組み合わせると、ip ruleソースアドレスを動的に選択できます。

基本的なプロセスは次のとおりです。

  1. PREROUTINGチェーン内のパケットに適切なタグを設定しますmangle
  2. 異なるタグ()を持つパケットには異なるIPルーティングテーブルを使用しますip rule add fwmark X table Y
  3. 各ルーティングテーブルのパケットsrcに必要なアドレスを使用します。

「mod 4」に設定されている宛先IPに基づいてパケットを表示するためのネットフィルタ設定は次のとおりです。

iptables -A PREROUTING  -t mangle -j CONNMARK --restore-mark
iptables -A PREROUTING  -t mangle -m mark --mark 0x0 -d 0.0.0.0/0.0.0.3 \
  -j MARK --set-mark 1
iptables -A PREROUTING  -t mangle -m mark --mark 0x0 -d 0.0.0.1/0.0.0.3 \
  -j MARK --set-mark 2
iptables -A PREROUTING  -t mangle -m mark --mark 0x0 -d 0.0.0.2/0.0.0.3 \
  -j MARK --set-mark 3
iptables -A PREROUTING  -t mangle -m mark --mark 0x0 -d 0.0.0.3/0.0.0.3 \
  -j MARK --set-mark 4
iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark

CONNMARK(この特別な場合は、他の表示コマンドが同じ接続内のすべてのパケットに対して同じ結果を提供するため、両方のコマンドを省略できますが、ソースアドレスの循環使用などのより複雑な場合は、これらのコマンドが必要です。すべてのパケットが同じパスを使用していることを確認してください。

IP ルーティングの設定は次のとおりです。

ip route add default via 10.7.4.1 src 10.7.4.200 table 1
ip route add default via 10.7.4.1 src 10.7.4.201 table 2
ip route add default via 10.7.4.1 src 10.7.4.202 table 3
ip route add default via 10.7.4.1 src 10.7.4.203 table 4

ip rule add fwmark 1 pref 1 table 1
ip rule add fwmark 2 pref 2 table 2
ip rule add fwmark 3 pref 3 table 3
ip rule add fwmark 4 pref 4 table 4

答え2

発信接続を確立するために使用されるアプリケーションまたはツールは、可能なソースIPアドレスが複数あることを理解し、必要なすべてのアドレスに明示的にバインドする必要があります。

たとえば、sshpassオプションにはこの機能があるため、これを行うと、その-bアドレスssh -b 10.7.4.201 ...がソースアドレスとして使用されます。

たとえば、ラウンドロビン方式で可能なソースアドレスを自動的に使用することはできません。

-bフラグは何ですか?

-b bind_address
         Use bind_address on the local machine as the source address of
         the connection.  Only useful on systems with more than one
         address.

関連情報