Linux:三个默认网关?

Linux:三个默认网关?

我的服务器有三个默认网关,怎么会这样?难道不应该有一个默认网关吗?

我有三个 NIC,每个都连接到一个单独的子网:

server1:~#  route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.5.0.0        *               255.255.255.224 U     0      0        0 eth3
localnet        *               255.255.255.224 U     0      0        0 eth0
192.168.8.0     *               255.255.255.192 U     0      0        0 eth1
default         10.5.0.1        0.0.0.0         UG    0      0        0 eth3
default         192.168.8.1     0.0.0.0         UG    0      0        0 eth1
default         10.1.0.1        0.0.0.0         UG    0      0        0 eth0

有时我无法 ping 通 Internet 上的主机,有时可以。我想要的是将流量路由到通过特定 NIC 路由的 Internet (0.0.0.0)。我是否可以只将 0.0.0.0 和默认 gw 的路由添加到 eth0-3 接口之一?这会中断我的连接吗?

我正在使用 Debian,这是我的 /etc/network/interfaces:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
    address 10.1.0.4
    netmask 255.255.255.224
    network 10.1.0.0
    broadcast 10.1.0.31
    gateway 10.1.0.1

allow-hotplug eth1
iface eth1 inet static
        address 192.168.8.4
        netmask 255.255.255.192
        network 192.168.8.0
        broadcast 192.168.8.63
        gateway 192.168.8.1

allow-hotplug eth3
iface eth3 inet static
        address 10.5.0.4
        netmask 255.255.255.224
        network 10.5.0.0
        broadcast 10.5.0.31
        gateway 10.5.0.1

答案1

从技术上讲,您可以拥有任意数量的默认网关,但默认情况下这样做没有多大意义,因为您的流量走向将有些不可预测。如果您使用策略路由,则拥有多个网关是有意义的;例如,如果您连接到 2 个不同的提供商,并且您希望您的服务器通过该主机用于联系您的同一接口回复每个远程主机,您可以在多默认网关环境中使用 iproute2 包来实现这一点。

如果您想要一个默认网关,只需从 /etc/network/interfaces 中的所有接口中删除“gateway”语句,只留下一个默认网关所在的接口。当然,还要重新启动。

答案2

您在接口文件中配置了所有网关。仅保留您真正需要的网关。

Linux 支持多个网关...但取决于您想做什么。

  1. 您可以选择在每个网关上配置不同的指标,它将像故障转移一样工作
  2. 您可以使用基于 iproute2 和内核策略路由的源路由
  3. 您可以使用 BGP 来平衡您的流量。

这是您的选择,但如果您只需要 1 个 gw,则从接口文件中删除其他 2 个(删除以网关 xxx.yyy.zzzz.wwww 开头的行,只保留您需要的网关)。

答案3

根据实际连接到互联网的网关数量,您可能需要 2 个甚至更多“默认”网关。

选择优先级的关键是“metric”参数。

unix.SE 上的 Eli Rosencruft 描述此过程以及如何将其包含在接口文件中。

重要部分:

iface eth0 inet static
...    
post-up route add default gw 192.168.1.1 metric 1
pre-down route del default gw 192.168.1.1


iface eth1 inet static
...
post-up route add default gw 192.168.2.1 metric 2
pre-down route del default gw 192.168.2.1

因此,一旦您与网关的连接断开(无论出于何种原因),它就会切换到另一个网关。

显然,即使不设置度量,您也可以改变至少部分流量以通过您选择的接口进行路由,您应该查看程序的手册页以了解如何具体执行此操作。

相关内容