解決策1:特定のライブラリをプリロード

解決策1:特定のライブラリをプリロード

質問: ネットワークアクセスが特定のネットワークインターフェイスを介してバインドされるようにしながら、プログラムを起動するにはどうすればよいですか?

ケース: 同じIP(192.168.1.1)を使用しますが、2つの異なるネットワークインタフェース(eth1とeth2)を介して2つの異なるシステムにアクセスしたいと思います。

例:

net-bind -D eth1 -exec {Program 192.168.1.1}
net-bind -D eth2 -exec {Program 192.168.1.1}

上記は、以下を介して行われたハードウェアバインディングに触発され、私が望むもののおおよそのものです。プリマスレンそして最適化された操作

挑戦:提案通り関連トピック、使用されるインタフェースはプログラムではなくカーネルによって選択されます(したがって、上記の例の事前バインドされた構文)。

いくつかの関連する解決策が見つかりましたが、どちらも満足できません。これは、ユーザー固有のネットワークブラックリストを介したバインディングネットワークインターフェースに基づいています。つまり、単一の特定のネットワークインターフェイスにのみアクセスできるユーザーとしてプロセスを実行します。

ベストアンサー1

Linuxの場合、この質問はすでにSuperuserで回答されています。さまざまなプロセスにさまざまなネットワークインターフェイスを使用する方法は?

最も人気のある回答は、LD_PRELOADプログラムのネットワークバインディングを変更するトリックを使用しますが、最新のカーネルは、プログラムで公開される「ネットワークネームスペース」というより柔軟な機能をサポートしていますip。これ回答使用方法を示します。私自身の実験に基づいて、rootとして以下を行いました。

# Add a new namespace called test_ns
ip netns add test_ns

# Set test to use eth0, after this point eth0 is not usable by programs
# outside the namespace
ip link set eth0 netns test_ns

# Bring up eth0 inside test_ns
ip netns exec test_ns ip link set eth0 up

# Use dhcp to get an ipv4 address for eth0
ip netns exec test_ns dhclient eth0

# Ping google from inside the namespace
ip netns exec test_ns ping www.google.co.uk

unshareまた、コマンドを使用してnsenterネットワークの名前空間をある程度管理することもできます。また、PID、ユーザー、およびマウントポイント用に別々のスペースを作成できます。詳細については、次を参照してください。

おすすめ記事