第25章 代替ルートを定義するポリシーベースのルーティングの設定
デフォルトでは、RHEL のカーネルは、ルーティングテーブルを使用して宛先アドレスに基づいてネットワークパケットを転送する場所を決定します。ポリシーベースのルーティングにより、複雑なルーティングシナリオを設定できます。たとえば、送信元アドレス、パケットメタデータ、プロトコルなどのさまざまな基準に基づいてパケットをルーティングできます。
25.1. nmcli
を使用して、特定のサブネットから別のデフォルトゲートウェイにトラフィックをルーティングする
ポリシーベースのルーティングを使用して、特定のサブネットからのトラフィックに対して別のデフォルトゲートウェイを設定できます。たとえば、デフォルトルートを使用して、すべてのトラフィックをインターネットプロバイダー A にデフォルトでルーティングするルーターとして RHEL を設定できます。ただし、内部ワークステーションサブネットから受信したトラフィックはプロバイダー B にルーティングされます。
この手順では、次のネットワークトポロジーを想定しています。
前提条件
-
システムは、
NetworkManager
を使用して、ネットワークを設定します (これがデフォルトです)。 この手順で設定する RHEL ルーターには、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
ネットワークインターフェイスに割り当てます。 -
デフォルトでは、
firewalld
サービスは有効でアクティブになっています。
手順
プロバイダー A へのネットワークインターフェイスを設定します。
# nmcli connection add type ethernet con-name Provider-A ifname enp7s0 ipv4.method manual ipv4.addresses 198.51.100.1/30 ipv4.gateway 198.51.100.2 ipv4.dns 198.51.100.200 connection.zone external
nmcli connection add
コマンドでは、NetworkManager 接続プロファイルが作成されます。このコマンドでは次のオプションを使用します。-
type
ethernet
: 接続タイプがイーサネットであることを定義します。 -
con-name
connection_name
: プロファイルの名前を設定します。混乱を避けるために、わかりやすい名前を使用してください。 -
ifname
network_device
: ネットワークインターフェイスを設定します。 -
ipv4.method
manual
: 静的 IP アドレスを設定できるようにします。 -
ipv4.addresses
IP_address/subnet_mask
: IPv4 アドレスとサブネットマスクを設定します。 -
ipv4.gateway
IP_address
: デフォルトゲートウェイアドレスを設定します。 -
ipv4.dns
IP_of_DNS_server
: DNS サーバーの IPv4 アドレスを設定します。 -
connection.zone
firewalld_zone
: 定義されたfirewalld
ゾーンにネットワークインターフェイスを割り当てます。firewalld
は、外部
ゾーンに割り当てられたマスカレードインターフェイスを自動的に有効にすることに注意してください。
-
プロバイダー B へのネットワークインターフェイスを設定します。
# nmcli connection add type ethernet con-name Provider-B ifname enp1s0 ipv4.method manual ipv4.addresses 192.0.2.1/30 ipv4.routes "0.0.0.0/0 192.0.2.2 table=5000" connection.zone external
このコマンドは、デフォルトゲートウェイを設定する
ipv4.gateway
の代わりに、ipv4.routes
パラメーターを使用します。これは、この接続のデフォルトゲートウェイを、デフォルトのルーティングテーブル (5000
) に割り当てるために必要です。NetworkManager は、接続がアクティブになると、この新しいルーティングテーブルを自動的に作成します。内部ワークステーションサブネットへのネットワークインターフェイスを設定します。
# nmcli connection add type ethernet con-name Internal-Workstations ifname enp8s0 ipv4.method manual ipv4.addresses 10.0.0.1/24 ipv4.routes "10.0.0.0/24 table=5000" ipv4.routing-rules "priority 5 from 10.0.0.0/24 table 5000" connection.zone trusted
このコマンドは、
ipv4.routes
パラメーターを使用して、ID が5000
のルーティングテーブルに静的ルートを追加します。10.0.0.0/24
サブネットのこの静的ルートは、ローカルネットワークインターフェイスの IP を使用してプロバイダー B (192.0.2.1
) を次のホップとして使用します。また、このコマンドでは
ipv4.routing-rules
パラメーターを使用して、優先度5
のルーティングルールを追加します。このルーティングルールは、トラフィックを10.0.0.0/24
サブネットからテーブル5000
へルーティングします。値が小さいほど優先度が高くなります。ipv4.routing-rules
パラメーターの構文はip rule add
コマンドと同じですが、ipv4.routing-rules
は常に優先度を指定する必要があります。サーバーサブネットへのネットワークインターフェイスを設定します。
# nmcli connection add type ethernet con-name Servers ifname enp9s0 ipv4.method manual ipv4.addresses 203.0.113.1/24 connection.zone trusted
検証
内部ワークステーションサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。# yum install traceroute
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
経由でパケットを送信することが表示されます。
サーバーのサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。# yum install traceroute
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
経由でパケットを送信することが表示されます。
トラブルシューティングの手順
RHEL ルーターで以下を行います。
ルールのリストを表示します。
# 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
テーブルのルールが含まれます。テーブル
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
インターフェイスとファイアウォールゾーンを表示します。
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0
external
ゾーンでマスカレードが有効になっていることを確認します。# firewall-cmd --info-zone=external external (active) target: default icmp-block-inversion: no interfaces: enp1s0 enp7s0 sources: services: ssh ports: protocols: masquerade: yes ...
関連情報
-
nm-settings(5)
man ページ -
nmcli(1)
man ページ