首先,我阅读了这篇关于网络命名空间的精彩文章,因此我或多或少知道网络命名空间的作用以及如何配置它们。
我面临的实际问题是:
- 我想在一台物理机上以 LAN 模式运行一些 Valve 游戏服务器(CS、CS:GO、TF2)。所以我希望局域网中的每个客户端都列出局域网中的所有服务器,因为这是最好的用户体验,而不是手动连接到 ip:port。
- 客户端软件通过向端口 27015 - 27020 广播来查找 LAN 服务器,因此总共有 6 个端口可用于运行服务器,否则服务器将不会在 LAN 浏览器中列出。但是,我有 6 台以上的服务器,所以我需要为同一个物理服务器使用 1 个以上的 IP。实际计划是每个游戏有 1 个 IP。
- 我不能,我再说一遍,不能告诉游戏服务器绑定到特定的 IP,因为这会阻止服务器在客户端的 LAN 浏览器中列出,即使我明确告诉它像 LAN 服务器一样工作。
(一直在尝试运行 CS 1.6、CSGO 或 TF2 服务器的人可能会在这里识别出“+ip <ip address>”问题)
通过拥有多个 IP,我无法解决问题,因为我无法告诉游戏服务器绑定到特定的 IP 地址 - 软件总是采用主 IP,因此这无法正常工作。(端口冲突,或者软件占用了27020+端口,导致服务器在局域网浏览器中不可见)
我想通过使用网络命名空间来解决它 - 每个游戏 1 个网络命名空间:
- 在“csgo”网络命名空间中,我将运行 5 个 CSGO 实例。(27015 - 27019)
- 在“tf2”网络命名空间中,我将运行 1 个 TF2 实例。(27015)
- 在“cs16”网络命名空间中,我将运行 2 个 CS 1.6 实例。(27015 - 27016)
因为我将在命名空间中运行游戏软件,所以该软件只会看到 1 个 IP,并会自动获取该 IP。(嗯,这就是我的想法!)。 …