我有两个子网和一个带有 2 个 NIC 的 RedHat 5.3,每个子网都有一个 IP:
eth1 172.16.0.4, 255.255.255.0
eth0 194.20.23.183, 255.255.255.0
在每个子网上,我都有一个网关/防火墙,我想将每个 NIC 转发到其自己的网关上。这是当前的路由表:
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.0.0 * 255.255.255.0 U 0 0 0 eth1
194.20.23.0 * 255.255.255.0 U 0 0 0 eth0
default 172.16.0.1 0.0.0.0 UG 0 0 0 eth1
如果我首先尝试删除 194.20.23.0 网络上已经存在的规则,然后使用以下命令
route add -net 194.20.23.0 netmask 255.255.255.0 gw 194.20.23.181 dev eth0
它返回
SIOCADDRT: Network is unreachable
谁能用简单的语言向我解释一下这条消息的原因以及我如何才能实现这个目标。
提前致谢问候
亚历山德罗·伊拉多
答案1
首先,您添加的路由与接口本身位于同一网段。这意味着发送这些数据包时无需使用路由器/网关。接口能够直接寻址主机。本地交换机无需使用路由器作为中介即可将其送达。
添加规则时出现错误,因为该规则定义了如何将数据包发送到整个网络,方法是给出发送到该网络上特定主机的指示。这是一个两难的局面。为了将数据包发送到该网关,您需要知道如何获取其 IP 地址。为了发送到其 IP 地址,您必须通过该网关。这就像告诉某人In order to get to Main Street, go to 1512 Main Street, and ask the guy who lives there.
现在,就正确的网关而言,这就是路由表中最后一行的作用。它将所有未与其上方规则匹配的流量路由到 172.16.0.1。这是您的默认网关。您不需要为第二个 NIC 设置网关,因为所有非本地流量都会通过此网关。
如果您想要通过其他 NIC/GW 分割一半的流量,则需要定义要这样做的网络。例如: route add -net 10.0.0.0 netmask 255.0.0.0 gw 194.20.23.181 dev eth1
将仅通过第二个 NIC 路由 10.xxx 网络。
答案2
我认为你必须交换设备。试试这个:
route add -net 194.20.23.0 netmask 255.255.255.0 gw 194.20.23.181 dev eth1
这应该是与您的设置相对应的规则:
eth0 172.16.0.4, 255.255.255.0
eth1 194.20.23.183, 255.255.255.0
答案3
你也可以做一些基于策略的路由