サーバーにファイアウォールがあるため、許可されたソース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プログラムを作成しました(実際にsocket
はbind
10.2.23.1とconnect
...実際にはどこでも可能です)。プログラムはbind
エラーなしで実行され動作しますが、ソースIPは常に10.247.226.186です。
すべての接続がなぜ使用されるのかを知っている人はいますか?その他のIPeth2では? / 32ネットマスクに問題がある可能性がありますか?
ありがとうございます。
編集:ホストOSを追加しました。
答え1
ABがコメントで述べたように、これはホストのNATです。これがすべてのプログラムがIPにバインドできるのに、tcpdumpが別のIPを表示する理由です。