FreeBSD 4.9では、次のような1つのコマンドで非常に簡単に実行できました。
jail [-u username] path hostname ip-number command
パスが/
の場合、通常と同じプログラムを実行していましたが、そのすべてのネットワーク通信は、送信元として指定されたIPアドレスのみを使用するように制限されていました。時々それは非常に便利です。
LinuxにはLXCがあります。これはFreeBSDのjail
(またはSolarisのゾーン)に非常によく似ています—プログラムを実行する同様の方法を考えられますか?
目的の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の記事 も役立ちます。