如何在同一台机器的不同子网中设置两个 NIC 并从一个 NIC 路由到另一个 NIC?

如何在同一台机器的不同子网中设置两个 NIC 并从一个 NIC 路由到另一个 NIC?

我有一台带有两个网卡的计算机(RPi CM4)。我希望一个 (eth0) 设置在网络 1 上,另一个 (eth1) 设置在网络 2 上。我需要能够从 net1 看到 net2 上的计算机。我将 eth0 设置为 192.168.1.x/23,网关 192.168.1.1 我将 eth1 设置为 192.168.0.x 仅连接 eth0,我可以 ssh 和 ping 192.168.1.x,但是当我连接 eth1 时,我不能。

ip r给出:

    default via 192.168.1.1 dev eth0 src 192.168.1.224 metric 202 
default via 192.168.1.1 dev eth1 src 192.168.0.200 metric 203 
192.168.0.0/24 dev eth1 proto dhcp scope link src 192.168.0.200 metric 203 
192.168.0.0/23 dev eth0 proto dhcp scope link src 192.168.1.224 metric 202 

route给出:

    Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
default         192.168.1.1     0.0.0.0         UG    203    0        0 eth1
192.168.0.0     0.0.0.0         255.255.255.0   U     203    0        0 eth1
192.168.0.0     0.0.0.0         255.255.254.0   U     202    0        0 eth0

ip addr

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether e4:5f:01:dc:d3:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.1.224/23 brd 192.168.1.255 scope global noprefixroute eth0
   valid_lft forever preferred_lft forever
inet6 fe80::8b50:c7e0:6f8d:a2aa/64 scope link 
   valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 84:8b:cd:4a:a1:ee brd ff:ff:ff:ff:ff:ff
inet 192.168.0.200/24 brd 192.168.0.255 scope global noprefixroute eth1
   valid_lft forever preferred_lft forever
inet6 fe80::7e0e:d55b:12a1:f029/64 scope link 
   valid_lft forever preferred_lft forever

我是一个十足的网络白痴。 尝试阅读类似的问题,但我仍然感到困惑。

ELIA5,我需要做什么才能路由 192.168.0.x,以便 192.168.1.x 可以看到它?

main network/inet (192.168.1.x) <-> CM4 eth1(192.168.1.200) eth0(192.168.0.60) <-> private LAN(192.168.0.50)

答案1

背景

网络掩码(或简称“掩码”)定义如何将 IP 地址拆分为网络部分和主机部分。 IP 协议默认假定,如果远程主机的 IP 地址和接口的 IP 地址都有匹配的网络部分,则网络接口将能够直接联系远程主机。如果网络部分不同,则系统需要检查其路由表以确定该怎么做。

IPv4 网络掩码完全表示为 32 位值,从最高有效位开始直到某个位位置全部为 1 位,然后全部为 0 位。 1位表示IP地址的相应位是地址的网络部分的一部分; 0 位分别表示主机部分。因此,仅用 1 位的数量来描述网络掩码就很方便;这可以正确地称为网络掩码长度,但为了简洁起见,通常简称为“掩码”。因此,掩码 /24 在正常的基 10 IP 地址格式中完全写为 255.255.255.0,或在二进制中写为 11111111.11111111.11111111.00000000。

如果网络掩码长度可以被 8 整除,则网络部分和主机部分的分离与 IP 地址的以 10 为基数的表示形式一致,这对人类来说很容易:例如,192.168.0.251/24表示网络部分所在的 IP 地址是192.168.0,主机部分是.251

不能被 8 整除的网络掩码需要一点二进制数学知识才能理解。但简而言之,192.168.0.0/23 表示第一个地址为 192.168.0.0,最后一个地址为 192.168.1.255 的网络,因此您的一个网络将是另一个网络的子网。另一方面,您的ip addr指示两者均已配置eth0,并且eth1配置了 /24 掩码。没有gateway(在route输出中)或via x.x.x.x(在 中ip r)的路由表条目应与网络接口的配置匹配,因此某处一定有拼写错误或其他错误。您复制的输出与/输出ip addr不一致。ip rroute


路由表的处理从最具体的条目(= 具有最大网络掩码的条目)开始到更通用的条目(较小的网络掩码值)。默认网关条目是最通用的条目,它匹配尚未与任何其他条目匹配的每个地址。从技术上讲,它可以表示为掩码长度为/0 的全零IP 地址。

用人类的话来说,路由表中的默认网关条目是“如果您无法直接到达某个地址并且没有任何更具体的指令,则将其发送到这个可直接到达的系统;它会知道如何处理它”。

当您为网络接口配置 IP 地址和网络掩码时,Linux 内核将根据网络掩码自动生成与该接口可直接访问的主机相匹配的路由表条目。因此,如果您的系统有两个网络接口插入不同的网段,并且没有 Internet 连接,则该系统根本不需要手动路由条目,也不需要默认网关。但是这两个网络中的其他主机将需要一个路由表条目来了解可以通过 2 接口主机进行路由来到达“其他”网络。

如果只有本地可访问的网络和其他网络,则指向 2 接口主机的默认网关条目就足够了;但如果还涉及互联网连接,则默认网关需要指向您的互联网路由器(因为世界上所有其他网段都可以通过它到达,并且您绝对不想一一列举它们)并且如果生成的默认网关条目不指向您的 2 接口主机,您还需要一个特定的路由条目,告诉系统“我的其他网段具有此网络地址和此网络掩码,并且可以通过 2-接口主机”。


你需要做什么

假设您的ip addr输出是正确的,并且您有两个不同的网段,一个是 192.168.0.x/24,另一个是 192.168.1.x/24,您需要执行四件事才能在它们之间启用路由:

1.) 在 CM4 上启用 IPv4 路由主开关。

echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
sysctl -p

2.) 确保 CM4 上的防火墙规则允许转发,即iptables -L FORWARD -vn有策略 ACCEPT 但没有规则,或者如果策略是 DROP,则有适当的 ACCEPT 规则。某些发行版默认将转发策略设置为 DROP。如果是这种情况,您将需要两条规则:

iptables -I FORWARD 1 -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -I FORWARD 2 -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT

用人类的话来说:从 192.168.0.x 传入、目的地为 192.168.1.x 的数据包将被接受进行转发(路由),反之亦然。

为了使这些规则持久存在,您可以运行iptables-save并将输出重定向到适合您的发行版的文件。如果您的系统正在使用ufw或其他一些防火墙配置工具,请使用它来配置等效的持久规则。

3.) 在 192.168.0.x 专用 LAN 中的主机上:将其默认网关设置为 192.168.0.60。由于该网段中没有 Internet 网关,因此这是他们需要的唯一路由条目。 (如果您稍后想要从专用 LAN 启用传出 Internet 访问,只需更改 CM4 上的 iptables FORWARD 规则即可实现。)

4.) 在 192.168.1.x 主网络中的主机上:这些主机应该已经具有默认网关设置 192.168.1.1,如果更改它,这些主机将失去 Internet 连接。因此,在这里,您需要定义一条特定的路由,表示“可以通过 192.168.1.200 路由来访问掩码为 /24 的网络 192.168.0.x”。

对于 Linux 配置命令,可以是:

ip route add 192.168.0.0/24 via 192.168.1.200

或者

route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.1.200

其他操作系统可能需要稍微不同的语法。

相关内容