web-dev-qa-db-ja.com

Linux:選択したIPアドレスにバインドするプログラムを実行する便利な方法はありますか?

FreeBSD 4.9では、次のような1つのコマンドで非常に簡単に実行できました。

jail [-u username]  path hostname ip-number command

パスが/の場合、通常と同じプログラムを実行していましたが、そのすべてのネットワーク通信は、送信元として指定されたIPアドレスのみを使用するように制限されていました。時々それは非常に便利です。

LinuxにはLXCがあります。これはFreeBSDのjail(またはSolarisのゾーン)に非常によく似ています—プログラムを実行する同様の方法を考えられますか?

11
poige

目的のIPアドレスしか表示できない ネットワーク名前空間 内でプロセスを開始すると、同様のことが実現できます。たとえば、特定のプログラムでローカルホストのみを使用できるようにしたいとします。

まず、ネットワーク名前空間を作成します。

ip netns add limitednet

名前空間にはデフォルトでループバックインターフェイスがあるので、次にそれを起動する必要があります。

Sudo ip netns exec limitednet ip link set lo up

これで、ip netns exec limitednetを使用してプログラムを実行でき、ループバックインターフェイスのみを表示できます。

Sudo ip netns exec limitednet ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host
       valid_lft forever preferred_lft forever

ローカルホスト以外のアドレスに制限したい場合は、次を使用して名前空間に他のインターフェイスを追加できます。

ip link set DEVICE_NAME netns NAMESPACE

インターフェイスに複数のIPアドレスがある場合に、名前空間に単一のIPアドレスを追加する方法を理解するには、もう少し実験する必要があります。

名前空間に関するLWNの記事 も役立ちます。

12
Steven D