もくじ
前書き
Linux(CentOS 7)において、PBR(ポリシーベースルーティング)の設定方法を記載したいと思います。
PBRの使用用途の一例をあげると、サーバ上で動く複数のアプリケーションがそれぞれ別々のネットワークを使用するときに使用します。
箇条書きにすると以下のような環境の場合です。
PBRを使用する事例
- サーバが複数のネットワークに所属している。
- サーバ上で複数のアプリケーションが動作している。
- アプリケーションそれぞれが、別々のネットワークを使用する。
環境
本記事のネットワーク構成
本記事で扱うネットワーク構成図は以下の通りです。
ネットワーク | 説明 |
192.168.0.0/24 | クライアントPCが所属するネットワーク |
10.0.0.0/16 | サーバが所属するネットワーク |
172.31.0.0/16 |
OSバージョン
本記事で使用するサーバ(接続先)とクライアントPC(接続元)のバージョンは以下の通りです。
図上の名称 | OSバージョン |
サーバ | CentOS 7 |
クライアントPC | Windows 10 |
IPアドレス
ネットワーク構成図に書いていますが、IPアドレスを表にすると下記のとおりです。ちなみに、サーバのデフォルトゲートウェイは10.0.0.111です。
場所 | IPアドレス |
クライアントPC | 192.168.0.99 |
R1(192.168.0.0/24) | 192.168.0.252 |
R1(10.0.0.0/16) | 10.0.0.0.252 |
R1(172.31.0.0/16) | 172.31.0.252 |
サーバ(10.0.0.0/16) | 10.0.0.111(デフォルトゲートウェイ) |
サーバ(172.31.0.0/16) | 172.31.0.111 |
実現したいこと
実現したいことは、クライアントPCから「10.0.0.0/16」と「172.31.0.0/16」のどちらのネットワークでも、サーバと通信可能とすることです。
事前の設定
PBRを設定する前に、サーバに設定する最低限の設定値を示します。
インターフェース設定
- /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes ←このインタフェースがデフォルトゲートウェイです。
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens192
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DEVICE=ens192
ONBOOT=yes
IPADDR=10.0.0.111
PREFIX=16
GATEWAY=10.0.0.252
NM_CONTROLLED=no
USECTL=no
- /etc/sysconfig/network-scripts/ifcfg-ens224
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=no
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens224
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DEVICE=ens224
ONBOOT=yes
IPADDR=172.31.0.111
PREFIX=16
GATEWAY=172.31.0.252
NM_CONTROLLED=no
USECTL=no
PBRの設定
結論のPBRの設定値を先に示したいと思います。
設定値
/etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
101 rule01 ←追記します。
/etc/sysconfig/network-scripts/route-ens224(ファイル新規作成)
default via 172.31.0.252 table rule01 192.168.0.0/24 dev ens224 table rule01
/etc/sysconfig/network-scripts/rule-ens224(ファイル新規作成)
from 172.31.0.111 table 101 priority 30001
設定値の意味
上記の設定値の意味を説明したいと思います。
- /etc/iproute2/rt_tables
《テーブル番号》
第1カラムの番号です。ここでいうと101番で新規追加しています。
0~255の値を設定できて、0、253、254、255はすでに設定されているので、それ以外の番号で指定します。
《テーブル名》
第2カラムで設定する値です。任意で指定できます。
ここでは”rule01″という名前で設定しています。
ここで設定した名前を、次のルーティング設定ファイル(route-XXX)とルール設定ファイル(rule-XXX)に使用します。 - /etc/sysconfig/network-scripts/route-ens224
1行目の「default via 172.31.0.252 table rule01」は、テーブル名”rule01″のルールにマッチする場合の送信先は”172.31.0.252″であるという意味になります。
2行目の「192.168.0.0/24 dev ens224 table rule01」は、テーブル名”rule01″のルールにマッチする場合の192.168.0.0/24宛の通信は、ens224というデバイス名のインタフェースを使用するという意味になります。 - /etc/sysconfig/network-scripts/rule-ens224
「from 172.31.0.111 table 101 priority 30001」は、サーバの172.31.0.111から送信される通信は、テーブル番号”101″のルールをpriority値を30001として見るという意味になります。
PBRを入れないとどうなるか?
本記事の環境のような場合、PBRの設定を入れないとどうなるのか、そもそもの話をしたいと思います。
10.0.0.111への通信
PBR無しでも、サーバの10.0.0.111あての通信はできます。理由はサーバのデフォルトゲートウェイが10.0.0.111なので、行きと戻りの通信が同じとなり、通信できます。
172.31.0.111への通信
一方、PBRを入れない状態ではサーバの172.31.0.111への通信はできません。理由は、行きと戻りの通信が異なる経路となるためです。
CentOS 7で検証していますが、通信を受信したインタフェースと同じインタフェースからのみ、戻りの通信を返すことができます。
言い換えればCentOS 7の規定の動きとして、受信したインタフェースと異なるインタフェースからは戻りの通信を返すことができません。
以上です。最後までお読みいただきありがとうございました。
参考サイト
https://tech-mmmm.blogspot.com/2019/09/rhel-7centos7policy-based-routing-pbr.html
https://www.wantedly.com/companies/serverworks/post_articles/109394
https://milestone-of-se.nesuke.com/nw-basic/routing/policy-based-routing/
コメント