ユーザーごとに1つのIPを割り当てるにはどうすればよいですか?


11

Steamのホームストリーミングを利用して2人で同時にプレイできるヘッドレスSteamゲームサーバーを構築しています。セットアップのマルチシート部分は完了して機能していますが、ワイヤレスで動作させるのは非常に面倒です。

一度に家庭内ストリーミングを有効にできるSteamクライアントは1つだけです。これはおそらく、同じポートとIPアドレスを使用していることが原因です。各ユーザーに独自のIPアドレスを割り当てるにはどうすればよいですか?

ストリーミングはホームネットワーク内からのみ行われます。マシン自体には、すでに1つのインターフェースに3つのIPがあります。

回答:


21

Linuxネットワーク名前空間を使用して、プロセスに異なるネットワーク構成を割り当てることができます。理論的には、PAM *を設定して各ユーザーを独自の個別のネットワーク名前空間に設定することは可能ですが、問題のアプリケーションを独自の名前空間で起動する方が簡単です。

一般的な設定では、ネームスペースをネットワークに接続するためのLinuxブリッジインターフェースの作成について説明します。ipvlan(カーネルバージョン3.19以降に含まれています)またはmacvlanデバイス(ワイヤレスの場合macvlanを使用できません)を使用して、もう少し簡単なセットアップをアーカイブできます。Linuxカーネルのドキュメントにはネットワーク名前空間でipvlanを設定するための詳細な例があります。

ドキュメントの例に従ってください:

  1. ネットワーク名前空間ns0を作成する

    ip netns add ns0
    
  2. eth0(マスターデバイス)にipvlanスレーブを作成する

    ip link add link eth0 ipvl0 type ipvlan mode l2
    
  3. スレーブをネットワーク名前空間ns0に割り当てます

    ip link set dev ipvl0 netns ns0
    
  4. ネットワーク名前空間ns0でスレーブデバイスを構成する

    ip netns exec ns0 ip link set dev ipvl0 up
    ip netns exec ns0 ip link set dev lo up
    ip netns exec ns0 ip -4 addr add 127.0.0.1 dev lo
    ip netns exec ns0 ip -4 addr add $IPADDR dev ipvl0
    ip netns exec ns0 ip -4 route add default via $ROUTER dev ipvl0
    

    とにホストとルーターのアドレスを入力$IPADDR$ROUTERます。

  5. 次を使用してネットワーク名前空間でアプリケーションを実行します ip exec

    ip netns exec ns0 <command>
    

    別のユーザーとしてコマンドを実行するには、通常のを使用しsu <user> -c -- <command>ます。


* 編集:理論から実践まで:ユーザーごとにネットワーク名前空間を変更する方法を示すために、簡単なPAMモジュールを作成しました。ip netns上記のようにネットワーク名前空間を構成し、特定のユーザーを特定の名前空間にマップする必要があります。その後、すべてのユーザープロセスは、デフォルトの名前空間ではなく、設定された名前空間に配置されます。コードはgithubでホストされています。自分の危険で使用してください。


上の2番目のコマンドは、私のために動作しません。ubuntu 14.04私は取得のみ:Garbage instead of arguments "mode ...". Try "ip link help"
Sim

1
回答をカーネルバージョンで更新しました。Ubuntu14.04には、最新の十分なカーネルバージョンが含まれていないようです。ワイヤレスを使用しているときに個別のIPアドレスを構成できる回避策は考えられません。イーサネットを使用している場合は、コマンド3ipvlanmacvlanに置き換えて、残りの例に従ってください。
セバスト2017

コマンド2のことですか?変数$IPADDR$ROUTER私が提供する必要がありますか、それともすでに設定されていますか?
Sim

1
確かにコマンド2。独自のネットワーク構成を提供する必要があります。
セバスト2017

2
@シム良いキャッチ、それはしませんでした。回答を修正しました。例の他の部分と同様に、名前空間はexecキーワードの後に​​指定する必要があります。
セバスト2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.