他のIPを自動的に使用する代わりに、クライアントをローカルIPにバインドすることはできません。

他のIPを自動的に使用する代わりに、クライアントをローカルIPにバインドすることはできません。

サーバーにファイアウォールがあるため、許可されたソースIPを使用してホスト(Slackware64 linux 14.2、カーネル5.4)からすべての接続を作成する必要があります。10.2.23.1この場合。

ホストのIPアドレス:

$ ip a
[...]
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0d:b9:55:c1:c8 brd ff:ff:ff:ff:ff:ff
    inet 10.2.22.7/28 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20d:b9ff:fe55:c1c8/64 scope link 
       valid_lft forever preferred_lft forever
7: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0d:b9:55:c1:c9 brd ff:ff:ff:ff:ff:ff
    inet 10.10.16.166/30 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::20d:b9ff:fe55:c1c9/64 scope link 
       valid_lft forever preferred_lft forever
8: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP group default qlen 1000
    link/ether 00:0d:b9:55:c1:ca brd ff:ff:ff:ff:ff:ff
    inet 10.2.23.1/24 scope global eth2
       valid_lft forever preferred_lft forever
    inet 10.247.226.186/32 scope global eth2
       valid_lft forever preferred_lft forever
    inet6 fe80::20d:b9ff:fe55:c1ca/64 scope link 
       valid_lft forever preferred_lft forever
[...]

たとえば、SSHを使用してローカルIP 10.2.23.1から10.0.4.16に接続したいとします。

$ ssh -b 10.2.23.1 [email protected]

sshはソースIPとして10.2.23.1の代わりに10.247.226.186を使用しているため、接続は失敗します(tcpdumpを介して確認済み)。これはサーバーでは許可されません。もちろん、サーバーで他のIPを許可することもできますが、知りたいのですが。なぜ動作しません。

また、これを確認するために単純なCプログラムを作成しました(実際にsocketbind10.2.23.1とconnect...実際にはどこでも可能です)。プログラムはbindエラーなしで実行され動作しますが、ソースIPは常に10.247.226.186です。

すべての接続がなぜ使用されるのかを知っている人はいますか?その他のIPeth2では? / 32ネットマスクに問題がある可能性がありますか?

ありがとうございます。

編集:ホストOSを追加しました。

答え1

ABがコメントで述べたように、これはホストのNATです。これがすべてのプログラムがIPにバインドできるのに、tcpdumpが別のIPを表示する理由です。

関連情報