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


11

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

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

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

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


どのプログラムでこれを実行しようとしていますか?多くのプログラムは十分に構成可能でありどのIPにバインドするかを通知できます。
ウォーレンヤング

@ WarrenYoung、KOさん、ありがとうございました。しかし、「たくさん」!=「すべて」
poige

特定のIPを使用するために実行可能ファイルを「監獄」するための良いユースケースは、LANパーティーの1台のマシンで複数のゲームサーバーを実行していることです。たとえば、Valveゲームはポート27015-27020でのみブロードキャストしているため、IPごとに6台のサーバーしか使用できません。そのため、NICに仮想IPを追加しますが、その存在をクライアントにブロードキャストするのを停止するゲームサーバーのコマンドラインで「+ ip <アドレス>」を指定する必要があります=> LANブラウザーにサーバーが表示されません。したがって、「+ ip」は機能しません。したがって、IPアドレスが1つしか見つからない環境では、各サーバーをjailする必要があります。結果:#servers +クライアントに制限はなく、すべてのサーバーが表示されます。
Timmos 2017年

回答:


12

目的のIPアドレスのみを確認できるネットワーク名前空間内でプロセスを開始すると、同様のことが実現できます。たとえば、特定のプログラムで利用できるlocalhostだけが欲しいと思ったとします。

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

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

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

ip link set DEVICE_NAME netns NAMESPACE

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

名前空間のLWNの記事でも便利です。


ただし、ネットワーク名前空間には独自のルーティングテーブルなどがあるため、さらに多くの準備が必要になることを言及する価値があります。誰かが模倣する簡単な方法を持っている場合は、jailそれを使用します。;)
poige 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.