Red Hat Training

A Red Hat training course is available for RHEL 8

第 20 章 管理默认网关设置

默认网关是在没有其他路由与数据包目的地匹配时转发网络数据包的路由器。在本地网络中,默认网关通常是更接近互联网的主机。

20.1. 使用 nmcli 在现有连接上设置默认网关

在大多数情况下,管理员在创建连接时设置默认网关,如 使用 nmcli 配置静态以太网连接 所述。

本节论述了如何使用 nmcli 实用程序在之前创建的连接中设置或更新默认网关。

先决条件

  • 至少需要在设置默认网关的连接上配置一个静态 IP 地址。
  • 如果用户在物理控制台中登录,用户权限就足够了。否则,用户必须拥有 root 权限。

流程

  1. 设置默认网关的 IP 地址。

    例如,要将 example 连接中默认网关的 IPv4 地址设置为 192.0.2.1:

    $ sudo nmcli connection modify example ipv4.gateway "192.0.2.1"

    例如,要将 example 连接中默认网关的 IPv6 地址设置为 2001:db8:1::1:

    $ sudo nmcli connection modify example ipv6.gateway "2001:db8:1::1"
  2. 重启网络连接以使更改生效。例如,要使用命令行重启 example 连接:

    $ sudo nmcli connection up example
    警告

    所有目前使用这个网络连接的连接在重启过程中暂时中断。

  3. (可选)验证路由是否活跃。

    显示 IPv4 默认网关:

    $ ip -4 route
    default via 192.0.2.1 dev example proto static metric 100

    显示 IPv6 默认网关:

    $ ip -6 route
    default via 2001:db8:1::1 dev example proto static metric 100 pref medium

20.2. 使用 nmcli 互动模式在现有连接上设置默认网关

在大多数情况下,管理员在创建连接时设置默认网关,如 使用 nmcli 互动编辑器配置动态以太网连接

本节论述了如何使用 nmcli 工具的互动模式在之前创建的连接中设置或更新默认网关。

先决条件

  • 至少需要在设置默认网关的连接上配置一个静态 IP 地址。
  • 如果用户在物理控制台中登录,用户权限就足够了。否则,该用户必须具有 root 权限。

流程

  1. 为所需连接打开 nmcli 互动模式。例如,要为 example 连接打开 nmcli 互动模式:

    $ sudo nmcli connection edit example
  2. 设置默认网关。

    例如,要将 example 连接中默认网关的 IPv4 地址设置为 192.0.2.1:

    nmcli> set ipv4.gateway 192.0.2.1

    例如,要将 example 连接中默认网关的 IPv6 地址设置为 2001:db8:1::1:

    nmcli> set ipv6.gateway 2001:db8:1::1
  3. 另外,还可验证默认网关是否正确设置:

    nmcli> print
    ...
    ipv4.gateway:                           192.0.2.1
    ...
    ipv6.gateway:                           2001:db8:1::1
    ...
  4. 保存配置:

    nmcli> save persistent
  5. 重启网络连接以使更改生效:

    nmcli> activate example
    警告

    所有目前使用这个网络连接的连接在重启过程中暂时中断。

  6. 保留 nmcli 互动模式:

    nmcli> quit
  7. (可选)验证路由是否活跃。

    显示 IPv4 默认网关:

    $ ip -4 route
    default via 192.0.2.1 dev example proto static metric 100

    显示 IPv6 默认网关:

    $ ip -6 route
    default via 2001:db8:1::1 dev example proto static metric 100 pref medium

20.3. 使用 nm-connection-editor 在现有连接上设置默认网关

在大多数情况下,管理员在创建连接时设置默认网关。本节论述了如何使用 nm-connection-editor 实用程序在之前创建的连接中设置或更新默认网关。

先决条件

  • 至少需要在设置默认网关的连接上配置一个静态 IP 地址。

流程

  1. 打开终端窗口,输入 nm-connection-editor:

    $ nm-connection-editor
  2. 选择要修改的连接,并点击 gear wheel 图标编辑现有连接。
  3. 设置 IPv4 默认网关。例如,要将连接中默认网关的 IPv4 地址设置为 192.0.2.1

    1. 打开 IPv4 Settings 标签。
    2. gateway 字段中输入网关地址在其中 IP 范围旁的地址:

      set default gw in nm connection editor ipv4

  4. 设置 IPv6 默认网关。例如,要将连接中默认网关的 IPv6 地址设置为 2001:db8:1::1

    1. 打开 IPv6 标签。
    2. gateway 字段中输入网关地址在其中 IP 范围旁的地址:

      set default gw in nm connection editor ipv6

  5. 点击 确定
  6. 点击 Save
  7. 重启网络连接以使更改生效。例如,要使用命令行重启 example 连接:

    $ sudo nmcli connection up example
    警告

    所有目前使用这个网络连接的连接在重启过程中暂时中断。

  8. (可选)验证路由是否活跃。

    显示 IPv4 默认网关:

    $ ip -4 route
    default via 192.0.2.1 dev example proto static metric 100

    显示 IPv6 默认网关:

    $ ip -6 route
    default via 2001:db8:1::1 dev example proto static metric 100 pref medium

20.4. 使用 control-center 在现有连接上设置默认网关

在大多数情况下,管理员在创建连接时设置默认网关。本节论述了如何使用 control-center 应用程序在之前创建的连接中设置或更新默认网关。

先决条件

  • 至少需要在设置默认网关的连接上配置一个静态 IP 地址。
  • 连接的网络配置在 control-center 应用程序中打开。

流程

  1. 设置 IPv4 默认网关。例如,要将连接中默认网关的 IPv4 地址设置为 192.0.2.1

    1. 打开 IPv4 标签页。
    2. gateway 字段中输入网关地址在其中 IP 范围旁的地址:

      set default gw in control center ipv4

  2. 设置 IPv6 默认网关。例如,要将连接中默认网关的 IPv6 地址设置为 2001:db8:1::1

    1. 打开 IPv6 标签。
    2. gateway 字段中输入网关地址在其中 IP 范围旁的地址:

      set default gw in control center ipv6

  3. 点击 应用
  4. Network 窗口中,通过将连接到 Off 的按钮切换为 Off 并返回 On 来禁用并重新启用连接,以使 更改 生效。

    警告

    所有目前使用这个网络连接的连接在重启过程中暂时中断。

  5. (可选)验证路由是否活跃。

    显示 IPv4 默认网关:

    $ ip -4 route
    default via 192.0.2.1 dev example proto static metric 100

    显示 IPv6 默认网关:

    $ ip -6 route
    default via 2001:db8:1::1 dev example proto static metric 100 pref medium

20.5. 使用 nmstatectl 在现有连接上设置默认网关

您可以使用 nmstatectl 实用程序设置网络连接的默认网关。这个步骤描述了如何将现有 enp1s0 连接的默认网关设置为 192.0.2.1

先决条件

  • 至少需要在设置默认网关的连接上配置一个静态 IP 地址。
  • 配置了 enp1s0 接口,默认网关的 IP 地址位于该接口的 IP 配置子网中。
  • 已安装 nmstate 软件包。

流程

  1. 创建包含以下内容的 YAML 文件,如 ~/set-default-gateway.yml:

    ---
    routes:
      config:
      - destination: 0.0.0.0/0
        next-hop-address: 192.0.2.1
        next-hop-interface: enp1s0
  2. 将设置应用到系统:

    # nmstatectl set ~/set-default-gateway.yml

其它资源

  • 有关详情请参考 nmstatectl nmstatectl(8) man page。
  • 如需更多配置示例,请参阅 /usr/share/doc/nmstate/examples/ 目录。

20.6. 使用系统角色在现有连接上设置默认网关

您可以使用 networking RHEL 系统角色设置默认网关。

重要

当您运行使用 networking RHEL 系统角色的 play 时,如果设置与 play 中指定的设置不匹配,则系统角色会覆盖具有相同名称的现有连接配置集。因此,在 play 中总是指定网络连接配置集的完整配置,即使 IP 配置已经存在。否则,角色会将这些值重置为其默认值。

具体来说,该流程会使用以下设置创建或更新 enp1s0 连接配置集:

  • 静态 IPv4 地址 - 198.51.100.20,子网掩码为 /24
  • 静态 IPv6 地址 - 2001:db8:1::1,子网掩码为 /64
  • IPv4 默认网关 - 198.51.100.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 198.51.100.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 不同的远程用户, 则此用户在受管节点上需要具有适当的 sudo 权限。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/ethernet-connection.yml playbook:

    ---
    - name: Configure an Ethernet connection with static IP and default gateway
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            - name: enp1s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 198.51.100.20/24
                  - 2001:db8:1::1/64
                gateway4: 198.51.100.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 198.51.100.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/ethernet-connection.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-connection.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook(1) man page

20.7. 使用旧的网络脚本在现有连接中设置默认网关

这个步骤描述了如何使用旧的网络脚本配置默认网关。示例将默认网关设置为 192.0.2.1,可通过 enp1s0 接口访问。

先决条件

  • 未安装 NetworkManager 软件包,或者 NetworkManager 服务被禁用。
  • 已安装 network-scripts 软件包。

流程

  1. /etc/sysconfig/network-scripts/ifcfg-enp1s0 文件中的 GATEWAY 参数设置为 192.0.2.1:

    GATEWAY=192.0.2.1
  2. default 文件中添加 /etc/sysconfig/network-scripts/route-enp0s1 条目:

    default via 192.0.2.1
  3. 重启网络:

    # systemctl restart network

20.8. NetworkManager 如何管理多个默认网关

在某些情况下,您可能需要在主机上设置多个默认网关。但是,为了避免异步路由问题,同一协议的每个默认网关都需要单独的指标值。请注意,RHEL 只使用与设定最低指标的默认网关的连接。

您可以使用以下命令为连接的 IPv4 和 IPv6 网关设置指标:

# nmcli connection modify connection-name ipv4.route-metric value ipv6.route-metric value
重要

不要为多个连接配置集中的同一协议设置相同的指标值以避免路由问题。

如果您设置了没有指标值的默认网关,NetworkManager 会自动根据接口类型设置指标值。因此,NetworkManager 会将这个网络类型的默认值分配给激活的第一个连接,并按照激活顺序为同一类型的其他连接设置递增值。例如:如果两个使用默认网关的以太网连接存在,NetworkManager 会将路由上的 100 指标设置为到您首先激活的连接的默认网关。对于第二个连接,NetworkManager 会设置 101

以下是经常使用的网络类型及其默认指标的概述:

连接类型默认指标值

VPN

50

Ethernet

100

MACsec

125

InfiniBand

150

Bond

300

Team

350

VLAN

400

Bridge

425

TUN

450

Wi-Fi

600

IP tunnel

675

其它资源

20.9. 配置 NetworkManager 以避免使用特定配置集提供默认网关

您可以配置网络管理器(NetworkManager)不会使用特定的配置集来提供默认网关。对于没有连接到默认网关的连接配置集,请按照以下步骤操作。

先决条件

  • 连接没有连接到默认网关的 NetworkManager 连接配置集已存在。

流程

  1. 如果连接使用动态 IP 配置,请配置网络管理器(NetworkManager)不使用连接作为 IPv4 和 IPv6 连接的默认路由:

    # nmcli connection modify connection_name ipv4.never-default yes ipv6.never-default yes

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

  2. 激活连接:

    # nmcli connection up connection_name

验证步骤

  • 使用 ip -4 routeip -6 route 命令验证 RHEL 是否在 IPv4 和 IPv6 协议的默认路由中使用网络接口。

20.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.168.122.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
      ...

其它资源