web-dev-qa-db-ja.com

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

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

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

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

11
Reanold

linux network namespaces を使用して、プロセスに異なるネットワーク構成を割り当てることができます。理論的には、[〜#〜] 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を使用してネットワークの名前空間を構成し、特定のユーザーを特定の名前空間にマップする必要があります。その後、すべてのユーザープロセスは、デフォルトの名前空間ではなく、設定された名前空間に配置されます。コードは on github でホストされています。自分の危険で使用してください。

21
sebasth