Red Hat Training

A Red Hat training course is available for RHEL 8

23.10. 修复因为多个默认网关导致的意外路由行为

只有在很少情况下(比如使用多路径 TCP 时),在主机上需要多个默认网关。在大多数情况下,您只配置一个默认网关,来避免意外的路由行为或异步路由问题。

注意

要将流量路由到不同的互联网提供商,请使用基于策略的路由,而不是多个默认网关。

先决条件

  • 主机使用 NetworkManager 管理网络连接,这是默认设置。
  • 主机有多个网络接口。
  • 主机配置了多个默认网关。

流程

  1. 显示路由表:

    • 对于 IPv4,请输入:

      # ip -4 route
      default via 192.0.2.1 dev enp1s0 proto static metric 101
      default via 198.51.100.1 dev enp7s0 proto static metric 102
      ...
    • 对于 IPv6,请输入:

      # ip -6 route
      default via 2001:db8:1::1 dev enp1s0 proto static metric 101 pref medium
      default via 2001:db8:2::1 dev enp7s0 proto static metric 102 pref medium
      ...

    default 开头的条目表示默认路由。注意 dev 旁边显示的这些条目的接口名称。

  2. 使用以下命令显示您使用在上一步中识别的接口的 NetworkManager 连接:

    # nmcli -f GENERAL.CONNECTION,IP4.GATEWAY,IP6.GATEWAY device show enp1s0
    GENERAL.CONNECTION:      Corporate-LAN
    IP4.GATEWAY:             192.0.2.1
    IP6.GATEWAY:             2001:db8:1::1
    
    # nmcli -f GENERAL.CONNECTION,IP4.GATEWAY,IP6.GATEWAY device show enp7s0
    GENERAL.CONNECTION:      Internet-Provider
    IP4.GATEWAY:             198.51.100.1
    IP6.GATEWAY:             2001:db8:2::1

    在这些示例中,名为 Corporate-LANInternet-Provider 的配置文件设置了默认网关。因为在本地网络中,默认网关通常是距离互联网一跳的主机,所以此流程的剩下部分假设 Corporate-LAN 中的默认网关是不正确的。

  3. 配置 NetworkManager 不使用 Corporate-LAN 连接作为 IPv4 和 IPv6 连接的默认路由:

    # nmcli connection modify Corporate-LAN ipv4.never-default yes ipv6.never-default yes

    请注意,将 ipv4.never-defaultipv6.never-default 设为 yes,会自动从连接配置文件中删除相应协议默认网关的 IP 地址。

  4. 激活 Corporate-LAN 连接:

    # nmcli connection up Corporate-LAN

验证

  • 显示 IPv4 和 IPv6 路由表,并确认每个协议都只有一个默认网关:

    • 对于 IPv4,请输入:

      # ip -4 route
      default via 192.0.2.1 dev enp1s0 proto static metric 101
      ...
    • 对于 IPv6,请输入:

      # ip -6 route
      default via 2001:db8:1::1 dev enp1s0 proto static metric 101 pref medium
      ...