通过静态路由为两个网卡配置网关

Bla*_*543 1 linux linux-networking

好的,我有两个 NICeth0eth1. 每个都通过自己的默认网关。我只能访问网络,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
Run Code Online (Sandbox Code Playgroud)

编辑:

问题2

如果 Linux 上的路由表中不存在路由,它是否eth0默认使用?

pil*_*ona 5

您可以进行策略路由,即拥有多个路由表,并根据您的源地址选择要使用的路由表(一般为其他字段,但此处不相关)。请注意,下面显示的表编号是任意选择的。

我不知道如何routenet-tools包中使用策略路由。反正早就弃用了。ipiproute2包装中使用。

您还需要在内核中启用策略路由。如果我没记错的话,主要发行版默认会这样做。

如果合适,从干净的状态开始:

# Assumes that previous configuration properly set address and route scopes
ip route flush all proto static scope global
Run Code Online (Sandbox Code Playgroud)

然后为每个接口添加表。

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
Run Code Online (Sandbox Code Playgroud)

然后设置路由规则

ip rule add from 10.0.0.3 table 5000
ip rule add from 10.0.1.1 table 5001
Run Code Online (Sandbox Code Playgroud)

最后一步是配置默认网关,当你是发起者时,可以这么说。

如果您只想eth0用作默认网关,则只需执行以下操作:

ip route add default via 10.0.0.254 dev eth0
Run Code Online (Sandbox Code Playgroud)

请注意,没有指定表,因此默认为 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
Run Code Online (Sandbox Code Playgroud)

对于问题二,没有 Linux 会自动创建默认路由。如果您的流量没有本地路由,您将收到EHOSTUNREACH错误消息。

编辑:请注意,以上所有内容都不应暗示 IP 是有状态的,它与连接有关,甚至与流的固有概念有关。这仅仅意味着我们假设流总是具有相同的端点,并且我们根据源地址将流绑定到网关。这是非常必要的,因为许多网关(特别是在住宅 ISP 的环境中)进行反向路径过滤。