使用 IP 表路由内部网络时 2 个内部网卡之间的通信

使用 IP 表路由内部网络时 2 个内部网卡之间的通信

我的设置:

我的设置图片

在我的家庭设置中,我有 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。

另外,我执行了以下步骤来路由互联网:

  1. 取消注释以下行/etc/sysctl.conf

    net.ipv4.ip_forward=1

  2. 使用以下命令配置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 堆栈完成。

相关内容