第14章 代替ルートを定義するポリシーベースのルーティングの設定
デフォルトでは、RHEL のカーネルはルーティングテーブルを使用して、宛先アドレスに基づいてネットワークパケットを転送します。ポリシーベースのルーティングを使用すると、送信元アドレスなどのさまざまな基準に基づいてパケットをルーティングする複雑なシナリオを設定できます。
14.1. nmcli を使用して、特定のサブネットから別のデフォルトゲートウェイにトラフィックをルーティングする リンクのコピーリンクがクリップボードにコピーされました!
ポリシーベースのルーティングを使用して、特定のサブネットからのトラフィックに対して別のデフォルトゲートウェイを設定できます。
たとえば、RHEL をルーターとして設定し、デフォルトルートを使用してすべてのトラフィックをインターネットプロバイダー A にデフォルトでルーティングできます。ただし、内部ワークステーションサブネットから受信したトラフィックはプロバイダー 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 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 externalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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は、externalゾーンに割り当てられたマスカレードインターフェイスを自動的に有効にすることに注意してください。
-
プロバイダー 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
# 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 externalCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、デフォルトゲートウェイを設定する
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
# 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 trustedCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、
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
# nmcli connection add type ethernet con-name Servers ifname enp9s0 ipv4.method manual ipv4.addresses 203.0.113.1/24 connection.zone trustedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
内部ワークステーションサブネットの RHEL ホストで、以下を行います。
tracerouteパッケージをインストールします。dnf install traceroute
# dnf install tracerouteCopy to Clipboard Copied! Toggle word wrap Toggle overflow tracerouteユーティリティーを使用して、インターネット上のホストへのルートを表示します。traceroute redhat.com
# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 _gateway (10.0.0.1) 0.337 ms 0.260 ms 0.223 ms 2 192.0.2.2 (192.0.2.2) 0.884 ms 1.066 ms 1.248 ms ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの出力には、ルーターがプロバイダー B のネットワークである
192.0.2.1経由でパケットを送信することが表示されます。
サーバーのサブネットの RHEL ホストで、以下を行います。
tracerouteパッケージをインストールします。dnf install traceroute
# dnf install tracerouteCopy to Clipboard Copied! Toggle word wrap Toggle overflow tracerouteユーティリティーを使用して、インターネット上のホストへのルートを表示します。traceroute redhat.com
# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 _gateway (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 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの出力には、ルーターがプロバイダー A のネットワークである
198.51.100.2経由でパケットを送信することが表示されます。
トラブルシューティングの手順
RHEL ルーターで以下を行います。
ルールのリストを表示します。
ip rule list
# 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 defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、RHEL には、
localテーブル、mainテーブル、およびdefaultテーブルのルールが含まれます。テーブル
5000のルートを表示します。ip route list table 5000
# ip route list table 5000 default 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 102Copy to Clipboard Copied! Toggle word wrap Toggle overflow インターフェイスとファイアウォールゾーンを表示します。
firewall-cmd --get-active-zones
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow externalゾーンでマスカレードが有効になっていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow