CentOS 7でPBR(ポリシーベースルーティング)の設定方法

前書き

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/

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

もくじ
閉じる