20.9. network RHEL システムロールを使用して、特定のサブネットから別のデフォルトゲートウェイにトラフィックをルーティングする


ポリシーベースのルーティングを使用して、特定のサブネットからのトラフィックに対して別のデフォルトゲートウェイを設定できます。たとえば、RHEL をルーターとして設定し、デフォルトルートを使用してすべてのトラフィックをインターネットプロバイダー A にデフォルトでルーティングできます。一方、内部ワークステーションのサブネットから受信したトラフィックは、プロバイダー B にルーティングできます。Ansible と network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。

network RHEL システムロールを使用して、ルーティングテーブルやルールを含む接続プロファイルを設定できます。

この手順では、次のネットワークトポロジーを想定しています。

policy based routing

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • 管理対象ノードは、NetworkManager および firewalld サービスを使用します。
  • 設定する管理対象ノードには、次の 4 つのネットワークインターフェイスがあります。

    • enp7s0 インターフェイスはプロバイダー A のネットワークに接続されます。プロバイダーのネットワークのゲートウェイ IP は 198.51.100.2 で、ネットワークは /30 ネットワークマスクを使用します。
    • enp1s0 インターフェイスはプロバイダー B のネットワークに接続されます。プロバイダーのネットワークのゲートウェイ IP は 192.0.2.2 で、ネットワークは /30 ネットワークマスクを使用します。
    • enp8s0 インターフェイスは、内部ワークステーションで 10.0.0.0/24 サブネットに接続されています。
    • enp9s0 インターフェイスは、会社のサーバーで 203.0.113.0/24 サブネットに接続されています。
  • 内部ワークステーションのサブネット内のホストは、デフォルトゲートウェイとして 10.0.0.1 を使用します。この手順では、この IP アドレスをルーターの enp8s0 ネットワークインターフェイスに割り当てます。
  • サーバーサブネット内のホストは、デフォルトゲートウェイとして 203.0.113.1 を使用します。この手順では、この IP アドレスをルーターの enp9s0 ネットワークインターフェイスに割り当てます。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configuring policy-based routing
      hosts: managed-node-01.example.com
      tasks:
        - name: Routing traffic from a specific subnet to a different default gateway
          ansible.builtin.include_role:
            name: rhel-system-roles.network
          vars:
            network_connections:
              - name: Provider-A
                interface_name: enp7s0
                type: ethernet
                autoconnect: True
                ip:
                  address:
                    - 198.51.100.1/30
                  gateway4: 198.51.100.2
                  dns:
                    - 198.51.100.200
                state: up
                zone: external
    
              - name: Provider-B
                interface_name: enp1s0
                type: ethernet
                autoconnect: True
                ip:
                  address:
                    - 192.0.2.1/30
                  route:
                    - network: 0.0.0.0
                      prefix: 0
                      gateway: 192.0.2.2
                      table: 5000
                state: up
                zone: external
    
              - name: Internal-Workstations
                interface_name: enp8s0
                type: ethernet
                autoconnect: True
                ip:
                  address:
                    - 10.0.0.1/24
                  route:
                    - network: 10.0.0.0
                      prefix: 24
                      table: 5000
                  routing_rule:
                    - priority: 5
                      from: 10.0.0.0/24
                      table: 5000
                state: up
                zone: trusted
    
              - name: Servers
                interface_name: enp9s0
                type: ethernet
                autoconnect: True
                ip:
                  address:
                    - 203.0.113.1/24
                state: up
                zone: trusted

    サンプル Playbook で指定されている設定は次のとおりです。

    table: <value>
    table 変数と同じリストエントリーのルートを、指定のルーティングテーブルに割り当てます。
    routing_rule: <list>
    指定のルーティングルールの優先度と、接続プロファイルからルールの割り当て先のルーティングテーブルを定義します。
    zone: <zone_name>
    接続プロファイルから指定の firewalld ゾーンにネットワークインターフェイスを割り当てます。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  1. 内部ワークステーションサブネットの RHEL ホストで、以下を行います。

    1. traceroute パッケージをインストールします。

      # yum install traceroute
    2. traceroute ユーティリティーを使用して、インターネット上のホストへのルートを表示します。

      # traceroute redhat.com
      traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets
       1  10.0.0.1 (10.0.0.1)     0.337 ms  0.260 ms  0.223 ms
       2  192.0.2.1 (192.0.2.1)   0.884 ms  1.066 ms  1.248 ms
       ...

      コマンドの出力には、ルーターがプロバイダー B のネットワークである 192.0.2.1 経由でパケットを送信することが表示されます。

  2. サーバーのサブネットの RHEL ホストで、以下を行います。

    1. traceroute パッケージをインストールします。

      # yum install traceroute
    2. traceroute ユーティリティーを使用して、インターネット上のホストへのルートを表示します。

      # traceroute redhat.com
      traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets
       1  203.0.113.1 (203.0.113.1)    2.179 ms  2.073 ms  1.944 ms
       2  198.51.100.2 (198.51.100.2)  1.868 ms  1.798 ms  1.549 ms
       ...

      コマンドの出力には、ルーターがプロバイダー A のネットワークである 198.51.100.2 経由でパケットを送信することが表示されます。

  3. RHEL システムロールを使用して設定した RHEL ルーターで、次の手順を実行します。

    1. ルールのリストを表示します。

      # ip rule list
      0:      from all lookup local
      5:    from 10.0.0.0/24 lookup 5000
      32766:  from all lookup main
      32767:  from all lookup default

      デフォルトでは、RHEL には、local テーブル、main テーブル、および default テーブルのルールが含まれます。

    2. テーブル 5000 のルートを表示します。

      # ip route list table 5000
      0.0.0.0/0 via 192.0.2.2 dev enp1s0 proto static metric 100
      10.0.0.0/24 dev enp8s0 proto static scope link src 192.0.2.1 metric 102
    3. インターフェイスとファイアウォールゾーンを表示します。

      # firewall-cmd --get-active-zones
      external
        interfaces: enp1s0 enp7s0
      trusted
        interfaces: enp8s0 enp9s0
    4. external ゾーンでマスカレードが有効になっていることを確認します。

      # firewall-cmd --info-zone=external
      external (active)
        target: default
        icmp-block-inversion: no
        interfaces: enp1s0 enp7s0
        sources:
        services: ssh
        ports:
        protocols:
        masquerade: yes
        ...

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md ファイル
  • /usr/share/doc/rhel-system-roles/network/ ディレクトリー
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.