好的,我有两个 NICeth0
和eth1
。每个都有自己的默认网关。我只能访问 上的网络,eth0
因为这是第一个添加默认路由的 NIC。我如何配置静态路由以允许两者访问其各自的子网。
eth0: 10.0.0.3 netmask 255.255.255.0 gw 10.0.0.254
eth1: 10.0.1.1 netmask 255.255.255.0 gw 10.0.1.26
编辑:
问题2
如果 Linux 上的路由表中不存在路由,它会eth0
默认使用吗?
答案1
你可以做策略路由即拥有多个路由表,并根据以下情况选择要使用的路由表你的源地址(一般来说其他领域也是如此,但与此无关)。请注意,下面显示的表格编号是任意选择的。
我不知道如何使用包route
中的策略路由net-tools
。反正它早就被弃用了。使用包ip
中的策略路由iproute2
。
您还需要在内核中启用策略路由。如果我没记错的话,主流发行版默认都会启用该功能。
如果合适,请从干净的状态开始:
# Assumes that previous configuration properly set address and route scopes
ip route flush all proto static scope global
然后添加每个接口的表。
ip route add 10.0.0.3/24 dev eth0 table 5000
ip route add default via 10.0.0.254 dev eth0 table 5000
ip route add 10.0.1.1/24 dev eth1 table 5001
ip route add default via 10.0.1.26 dev eth1 table 5001
然后设立路由规则:
ip rule add from 10.0.0.3 table 5000
ip rule add from 10.0.1.1 table 5001
最后一步是配置默认网关当你是发起者时, 可以这么说。
如果您只想用作eth0
默认网关,那么只需执行以下操作:
ip route add default via 10.0.0.254 dev eth0
注意没有指定表,因此默认为 main。使用eth1
留给读者练习。
如果您想在两者之间进行负载平衡,可以使用进行多路径路由nexthop
。
ip route add default nexthop via 10.0.0.254 dev eth0 weight 1 nexthop via 10.0.1.26 dev eth1 weight 1
至于问题二,没有 Linux 会自动创建默认路由。如果您的流量没有本地路由,您将收到错误EHOSTUNREACH
。
编辑:请注意,以上任何内容都不应被理解为暗示 IP 是有状态的,它与连接有任何关系,甚至不是流的固有概念。它只是意味着我们假设流始终具有相同的端点,并且我们根据源地址将流绑定到网关。这只是必要的,因为许多网关(尤其是在住宅 ISP 的环境中)会进行反向路径过滤。
答案2
正常情况下,你只能有一个默认网关。毕竟这是默认网关。所有与更具体的静态路由不匹配的流量都将从 上的默认网关发出eth0
。
如果您希望仅让 10.0.1.0/24 子网的所有流量出去eth1
,并使用其余流量eth0
,请按照@AlanCurry 所说的操作,并执行以下操作route add -net 10.0.1.0 netmask 255.255.255.0 dev eth1
答案3
最简单的方法:
ip route flush all
ip route add 10.0.0.0/24 dev eth0
ip route add 10.0.3.0/24 dev eth1
ip route add default via 10.0.0.254
这将使您能够在适当的设备上访问两个子网,并通过网关 10.0.0.254 上的 eth0 路由所有互联网流量。
您可以设置这些以通过基于 Red Hat 的规则在重新启动/重启后继续存在:/etc/sysconfig/network-scripts/route-ethX
。
/etc/sysconfig/network-scripts/route-eth0
:
10.0.0.0/24 dev eth0
default via 10.0.0.254
/etc/sysconfig/network-scripts/route-eth1
:
10.0.3.0/24 dev eth1