我的设置:
在我的家庭设置中,我有 3 个 NIC,一个连接到互联网(enp1s0),另外两个将互联网访问转发到本地设备(enp2s0 和 enp3s0)。
PC1 连接到 enp2s0,IP 地址为 (10.10.10.2/24)。
PC2 连接到 enp3s0,IP 地址为 (10.10.20.2/24)。
请注意,我正在使用 Ubuntu 22.04.4。
另外,我执行了以下步骤来路由互联网:
取消注释以下行
/etc/sysctl.conf
net.ipv4.ip_forward=1
使用以下命令配置IP表:
sudo iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
sudo iptables -A INPUT -i enp2s0 -j ACCEPT
sudo iptables -A INPUT -i enp3s0 -j ACCEPT
我的问题:
当我尝试为游戏或其他任何内容创建 LAN 会话时,PC1 和 PC2 看不到彼此的会话(我认为它们需要在同一个子网上)。
我能做些什么?谢谢?
答案1
PC1 和 PC2 看不到彼此的会话(我认为它们需要在同一个子网上)。
如果这是要求(即游戏依赖于 LAN 发现,并且不允许您手动输入 IP 地址),那么您需要创建一个桥包含这两个以太网接口的接口。
一旦它们成为网桥的一部分,两个端口将像单个接口一样运行并属于同一个子网(网桥参与路由 - IP 地址现在需要在“br0”上配置,而不是在“enp[23]s0”上;iptables 规则需要引用“br0”,等等)。
但是,为了提高性能,最好还是使用外部以太网交换机。(交换机和大多数现成的 wifi 路由器都内置有交换机芯片,但您的服务器将通过 CPU 进行桥接,就像通过 CPU 进行路由一样。)
另一种方法是,如果您确实想要两个独立的子网,那么可以使用“bcrelay”之类的东西将“发现”广播数据包从一个子网中继到另一个子网;但它可能不会很好地工作。
使用 IP 表路由互联网时
iptables 不路由任何东西。它是一个防火墙;它的作用是 1) 过滤允许进行路由,以及 2)应用数据包重写(地址转换)后路由已完成。实际路由由内核的核心 IP 堆栈完成。