CentOS7で複数ネットワークに対してスタティックルートを設定

インフラエンジニアの井上です。

この記事は TECHSCORE Advent Calendar 2016 の 24 日目の記事です。

CentOS7のネットワーク設定仕方を考える場面がありましたので、記録として書きます。

きっかけについて

複数のネットワークインターフェースを持つCentOS7のサーバを構築した際に、確認した話です。
CentOS7では、NetworkManagerを介したネットワーク設定が作法とされています。
私は、これまでは設定ファイルを直接書き換えてきましたがCentOS7の作法に従って
少し複雑なネットワーク設定を伴った、NetworkManagerを介した設定をしてみることにしました。

通常通信ができない例について

前提は以下の通りです。

  • サーバは複数(今回の例では3つ)のネットワークに接続されている
  • サーバのデフォルトゲートウェイはインターネット側のゲートウェイに向いている
  • 通信相手の端末(以下、PCと表記)とサーバは違うネットワークセグメントに所属している
  • PCとサーバの間にはルータ(ルータAと定義)が存在する
  • サーバにはデフォルトゲートウェイしか設定されていない
  • PCからのサーバへリクエストを送信して、応答を受け取りたい

図にすると以下のイメージになります。

 

 

 

 

 

 

 

 

 

それぞれのIPアドレスなどの情報は以下の表の前提通りです。

 

 

 

 

 

追加ルーティングを設定しない場合、赤矢印のような通信となり、青矢印の通信はできません。

 

 

 

 

 

 

 

 

 

これは、サーバがPCが所属するネットワークの情報を持っていないため、デフォルトゲートウェイ側に応答を流す為です。
対策には以下の2つの方法あります。

  • サーバ上で、routeコマンドを発行し、PCへの経路を定義する
  • スタティックルートをサーバに設定する

前者は、一時的に通信が行えるようになります。しかし、再起動を行った場合、再度、コマンドを発行するまで通信ができません。
そのため、後者を選択します。今回、CentOS7での作法に従いNetworkManagerを介した設定を実施します。

実施した手順について

手順は次の通りです。

  1. nmcliコマンドでルーティングを対象とするネットワークインターフェースのUUIDを調べます。
    「nmcli connection show」とコマンドを発行し、ネットワークインターフェースのUUID一覧を取得します。

     
  2. 前項で取得したUUIDを指定してルーティングを行うためのコマンドを発行します。フォーマットは次の通りです。

    今回のケースの場合、以下のコマンドを発行します。

    コマンドを実行後、ネットワークサービスを再起動すれば、通信が可能となります。

複数の追加ルーティングを行うために

上記では、ルーティングを1つだけ追加する方法を記載しました。
ここでは、補足として、2つ以上ルーティングを追加する方法を記載します。

ルーティングを設定するコマンドのオプションである「ipv4.routes」を「 +ipv4.routes」(+が増えた)に書き換え、追加のルーティングを行うためのコマンドを発行します。
以下は、上記前提において、172.16.2.0/24のネットワークがルータAの先にある場合のコマンド発行例です。

反映確認には「nmcli device show インターフェース名」を実行します。実行結果の「IP4.ルート」の項目に2つめの設定が確認できます。

設定確認方法として以下があります。

  • 「ip route show」コマンドを発行してルーティングテーブルを確認
  • 「ip route get IPアドレス」というコマンドを発行して、目的のIPアドレスへの通信は「どのインターフェースを使って、どのIPアドレスを経路とするか」を確認

後者の実行例と結果は以下の通りです(目的の通信相手が172.16.2.1の場合)。

最後に

設定ファイルの編集のみで、対応せず、柔軟に新しい手法を学び利用していきたいと考えます。

 

 

Comments are closed, but you can leave a trackback: Trackback URL.