如何为每个用户分配一个IP?

如何为每个用户分配一个IP?

我正在构建一个无头 Steam 游戏服务器,它利用 Steam 家庭流媒体让两个人同时玩。设置的多座位部分已经完成并且可以正常工作,但是让它以无线方式工作是相当麻烦的。

一次只有一个 Steam 客户端可以启用家庭流媒体。这很可能是由于使用相同的端口和 IP 地址造成的。如何为每个用户分配自己的 IP 地址?

流媒体只能在家庭网络内进行。机器本身在一个接口上已经有 3 个 IP。

答案1

您可以使用以下命令为进程分配不同的网络配置Linux网络命名空间。理论上应该可以配置聚丙烯酰胺* 将每个用户设置在其自己单独的网络命名空间中,但在其自己的命名空间中启动相关应用程序可能更简单。

常见的设置可能描述创建一个 Linux 桥接口来将命名空间连接到网络。可以使用更简单的设置进行存档ipvlan(包含在内核版本 3.19 及更高版本中)或麦克夫兰设备(用于无线您不能使用麦克夫兰)。 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 上。使用后果自负。

相关内容