Red Hat Training

A Red Hat training course is available for RHEL 8

第 21 章 配置静态路由

默认情况下,如果配置了默认网关,Red Hat Enterprise Linux 会将没有直接连接到主机的网络流量转发到默认网关。使用静态路由,您可以配置 Red Hat Enterprise Linux 将特定主机或网络的流量转发到不同于默认网关的不同路由器。本节论述了配置静态路由的不同选项。

21.1. 如何使用 nmcli 命令配置静态路由

要配置静态路由,请使用以下语法的 nmcli 工具:

$ nmcli connection modify connection_name ipv4.routes "ip[/prefix] [next_hop] [metric] [attribute=value] [attribute=value] ..."

该命令支持以下路由属性:

  • table=n
  • src=address
  • tos=n
  • onlink=true|false
  • window=n
  • cwnd=n
  • mtu=n
  • lock-window=true|false
  • lock-cwdn=true|false
  • lock-mtu=true|false

如果您使用 ipv4.routes 子命令,nmcli 会覆盖这个参数的所有当前设置。要添加额外路由,请使用 nmcli connection modify connection_name +ipv4.routes "…" 命令。同样,您可以使用 nmcli connection modify connection_name -ipv4.routes "…" 删除特定路由。

21.2. 使用 nmcli 命令配置静态路由

您可以使用 nmcli connection modify 命令在网络连接配置中添加静态路由。

本节中的步骤论述了如何将路由添加到使用 192.0.2.0/24 运行网关的 198.51.100.1 网络,这些网关可通过 example 连接访问。

先决条件

  • 网络已配置
  • 静态路由的网关必须在接口上直接访问。
  • 如果用户在物理控制台中登录,用户权限就足够了。否则,命令需要 root 权限。

流程

  1. 将静态路由添加到 example 连接:

    $ sudo nmcli connection modify example +ipv4.routes "192.0.2.0/24 198.51.100.1"

    要在一个步骤中设置多个路由,使用逗号分隔单个路由传递给该命令。例如,要将路由添加到 192.0.2.0/24203.0.113.0/24 网络(都通过 198.51.100.1 网关路由),请输入:

    $ sudo nmcli connection modify example +ipv4.routes "192.0.2.0/24 198.51.100.1, 203.0.113.0/24 198.51.100.1"
  2. (可选)验证路由是否已正确添加到配置中:

    $ nmcli connection show example
    ...
    ipv4.routes:        { ip = 192.0.2.1/24, nh = 198.51.100.1 }
    ...
  3. 重启网络连接:

    $ sudo nmcli connection up example
    警告

    重启连接会破坏那个接口的连接。

  4. (可选)验证路由是否活跃:

    $ ip route
    ...
    192.0.2.0/24 via 198.51.100.1 dev example proto static metric 100

其它资源

  • 有关 nmcli的详情,请查看 nmcli(1) man page。

21.3. 使用 control-center 配置静态路由

您可以在 GNOME 中使用 control-center 来添加到网络连接配置的静态路由。

本节中的步骤论述了如何将路由添加到使用 198.51.100.1 运行的网关的 192.0.2.0/24 网络。

先决条件

流程

  1. 打开 IPv4 标签页。
  2. (可选)通过点击 IPv4 标签中的 Routes 项中的 On 按钮来禁用自动路由,只使用静态路由。如果启用了自动路由,Red Hat Enterprise Linux 将使用静态路由和从 DHCP 服务器接收的路由。
  3. 输入地址、子网掩码、网关和可选的指标值:

    IPv4 static route in control center

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

    警告

    重启连接会破坏那个接口的连接。

  6. (可选)验证路由是否活跃:

    $ ip route
    ...
    192.0.2.0/24 via 198.51.100.1 dev example proto static metric 100

21.4. 使用 nm-connection-editor 配置静态路由

您可以使用 nm-connection-editor 应用程序为网络连接配置添加静态路由。

本节中的步骤论述了如何将路由添加到使用 192.0.2.0/24 运行网关的 198.51.100.1 网络,这些网关可通过 example 连接访问。

先决条件

  • 网络已配置。
  • 静态路由的网关必须在接口上直接访问。

流程

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

    $ nm-connection-editor
  2. 选择 example 连接并点击 gear wheel 图标编辑现有连接。
  3. 打开 IPv4 标签页。
  4. 点击 路由 按钮。
  5. 点击 添加 按钮并输入地址、子网掩码、网关以及可选的指标值。

    IPv4 static route in nm connection editor

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

    $ sudo nmcli connection up example
  9. (可选)验证路由是否活跃:

    $ ip route
    ...
    192.0.2.0/24 via 198.51.100.1 dev example proto static metric 100

21.5. 使用 nmcli 互动模式配置静态路由

您可以使用 nmcli 程序的互动模式将静态路由添加到网络连接配置中。

本节中的步骤论述了如何将路由添加到使用 192.0.2.0/24 运行网关的 198.51.100.1 网络,这些网关可通过 example 连接访问。

先决条件

  • 网络已配置
  • 静态路由的网关必须在接口上直接访问。
  • 如果用户在物理控制台中登录,用户权限就足够了。否则,命令需要 root 权限。

流程

  1. example 连接打开 nmcli 互动模式:

    $ sudo nmcli connection edit example
  2. 添加静态路由:

    nmcli> set ipv4.routes 192.0.2.0/24 198.51.100.1
  3. (可选)验证路由是否已正确添加到配置中:

    nmcli> print
    ...
    ipv4.routes:        { ip = 192.0.2.1/24, nh = 198.51.100.1 }
    ...

    ip 属性显示了要路由的网络,nh 属性显示了网关(下一跳)。

  4. 保存配置:

    nmcli> save persistent
  5. 重启网络连接:

    nmcli> activate example
    警告

    当您重启连接时,所有当前使用这个连接的连接将会被暂时中断。

  6. 保留 nmcli 互动模式:

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

    $ ip route
    ...
    192.0.2.0/24 via 198.51.100.1 dev example proto static metric 100

其它资源

  • 有关互动模式中可用命令列表,请在互动 shell 中输入 help

21.6. 使用 nmstatectl 配置静态路由

您可以使用 nmstatectl 实用程序在网络连接配置中添加静态路由。

本节中的步骤论述了如何将路由添加到使用 192.0.2.0/24 运行网关的 198.51.100.1 网络,这些网关可通过 enp1s0 接口访问。

先决条件

  • 配置了 enp1s0 网络接口。
  • 静态路由的网关必须在接口上直接访问。
  • 已安装 nmstate 软件包。

流程

  1. 创建包含以下内容的 YAML 文件,如 ~/add-static-route-to-enp1s0.yml:

    ---
    routes:
      config:
      - destination: 192.0.2.0/24
        next-hop-address: 198.51.100.1
        next-hop-interface: enp1s0
  2. 将设置应用到系统:

    # nmstatectl set ~/add-static-route-to-enp1s0.yml

其它资源

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

21.7. 使用 RHEL 系统角色配置静态路由

您可以使用 networking RHEL 系统角色配置静态路由。

重要

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

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

  • 静态 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
  • 静态路由:

    • 192.0.2.0/24 使用网关 198.51.100.1
    • 203.0.113.0/24 使用网关 198.51.100.2

先决条件

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

流程

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

    node.example.com
  2. 使用以下内容创建 ~/add-static-routes.yml playbook:

    ---
    - name: Configure an Ethernet connection with static IP and additional routes
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            - name: enp7s0
              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
                route:
                  - network: 192.0.2.0
                    prefix: 24
                    gateway: 198.51.100.1
                  - network: 203.0.113.0
                    prefix: 24
                    gateway: 198.51.100.2
              state: up
  3. 运行 playbook:

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

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

      # ansible-playbook -u user_name --ask-become-pass ~/add-static-routes.yml

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

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

验证步骤

  • 显示路由表:

    # ip -4 route
    default via 198.51.100.254 dev enp7s0 proto static metric 100
    192.0.2.0/24 via 198.51.100.1 dev enp7s0 proto static metric 100
    203.0.113.0/24 via 198.51.100.2 dev enp7s0 proto static metric 100
    ...

其它资源

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

21.8. 使用旧的网络脚本以键-值格式创建静态路由配置文件

这个步骤描述了,在使用旧的网络脚本而不是 NetworkManager 时,如何手动为 192.0.2.0/24 网络的 IPv4 路由创建路由配置文件。在这个示例中,IP 地址为 198.51.100.1 的对应网关可以通过 enp1s0 接口访问。

此流程中的示例使用 key-value-format 中的配置条目。

注意

旧的网络脚本只支持静态 IPv4 路由的键值格式。对于 IPv6 路由,使用 ip-command-format。在使用 旧的网络脚本时,请参阅使用 ip-command-format 创建静态路由配置文件

先决条件

  • 静态路由的网关必须在接口上直接访问。
  • 未安装 NetworkManager 软件包,或者 NetworkManager 服务被禁用。
  • 已安装 network-scripts 软件包。

流程

  1. 将静态 IPv4 路由添加到 /etc/sysconfig/network-scripts/route-enp0s1 文件:

    ADDRESS0=192.0.2.0
    NETMASK0=255.255.255.0
    GATEWAY0=198.51.100.1
    • ADDRESS0 变量定义第一个路由条目的网络。
    • NETMASK0 变量定义第一个路由条目的子网掩码。
    • GATEWAY0 变量定义了到远程网络或主机的网关 IP 地址,用于第一个路由条目。

      如果您添加多个静态路由,请增加变量名称的数量。请注意,每个路由的变量都必须按顺序编号。例如,ADDRESS0ADDRESS1ADDRESS3 等。

  2. 重启网络:

    # systemctl restart network

其它资源

  • 有关配置旧的网络脚本的详情,请参考 /usr/share/doc/network-scripts/sysconfig.txt 文件。

21.9. 在使用旧的网络脚本时,使用 ip-command-format 创建静态路由配置文件

此流程描述了如何使用旧网络脚本为以下静态路由手动创建路由配置文件:

  • 192.0.2.0/24 网络的 IPv4 路由。IP 地址为 198.51.100.1 的对应网关可以通过 enp1s0 接口访问。
  • 2001:db8:1::/64 网络的 IPv6 路由。IP 地址为 2001:db8:2::1 的对应网关可以通过 enp1s0 接口访问。

此流程中的示例使用 ip-command-format 中的配置条目。

先决条件

  • 静态路由的网关必须在接口上直接访问。
  • 未安装 NetworkManager 软件包,或者 NetworkManager 服务被禁用。
  • 已安装 network-scripts 软件包。

流程

  1. 将静态 IPv4 路由添加到 /etc/sysconfig/network-scripts/route-enp0s1 文件:

    192.0.2.0/24 via 198.51.100.1 dev enp0s1
  2. 将静态 IPv6 路由添加到 /etc/sysconfig/network-scripts/route6-enp0s1 文件:

    2001:db8:1::/64 via 2001:db8:2::1 dev enp0s1
  3. 重启网络:

    # systemctl restart network

其它资源

  • 有关配置旧的网络脚本的详情,请参考 /usr/share/doc/network-scripts/sysconfig.txt 文件。