1
/
5

RHEL 7.4 でPolicy Based Routingを設定してみました。【エンジニアブログより】

はじめまして、クラウドインテグレーション部の城と申します。
1月に入社したのですが、あっという間に1か月過ぎてしまいました。
時間の過ぎる速さに年齢を感じざるをえません。

さて本題へ入りますが、EC2インスタンスに別々のCIDRブロックのプライベートアドレスを付与し、それぞれと外部から通信させたいというケースがありました。
検証していたところ、ネットワークの設定でかなりつまづいてしまったので、一つの例として記録しておきたいと思います。
※インスタンス内のネットワーク設定にフォーカスしてお送りします。


実現したいこと

  • OS:RedHat Enterprize Linux 7.4
  • EC2インスタンスにそれぞれ別のCIDRブロックに所属するプライベートIPを設定する
  • それぞれのインターフェースと通信できるように設定する
  • インスタンス再起動時にも設定を維持する

用意した環境

次の環境を用意しました。
ENIが2つアタッチされています。


インターフェースの状態確認

インスタンスにログインしてネットワークインターフェースの確認をします。
所属するサブネットではない方のネットワークインターフェース [ eth1]は設定されていません。

ネットワークインターフェースの設定

[ eth1]の設定をします。DHCPでネットワーク設定を取得するようにします。
グローバルのデフォルトルートが複数登録されてしまうことを防ぐため、[ DEFROUTE=no] を記載しておきます。

ネットワーク再起動

前項の設定を反映させるため、ネットワークを再起動します。

インターフェースの状態確認(設定後)


確認すると、[ eth1 ]が設定されています。

通信確認

[ eth1] のENIに設定したEIPに対して、local端末からpingしてみます。
この段階ではアクセスできません。

ルーティング確認

ルーティングを確認します。

外部ネットワークから[ eth1] にアクセスすると、戻りのトラフィックがデフォルトルートにマッチしてしまい、下図NGの状態のように[ eth0] からトラフィックが出てしまうことがアクセスできない原因です。

そこで図中のOKの状態にすべく、ポリシーベースルーティングを設定します。

ポリシーベースルーティング設定

ポリシーベースルーティングは設定した条件により、ルーティングを行うことができます。
今回は送信元IPアドレスを条件に、別々のデフォルトゲートウェイを設定します。

ルートテーブルIDの設定

rule01、rule02を追記します。
IDはmainより小さい(優先度が高い)ものを指定します。

ルールを追加

[ rule-eth0 ]の場合、
「送信元が10.0.0.56/32の場合、テーブルrule01のルーティングを参照」
という意味になります。
送信元には各インターフェースのプライベートIPを指定します。

ルーティングを追加

設定したルールrule01、rule02に該当する場合のルーティングを追加します。

NetworkManagerを停止する

私はここでハマってしまいました。
NetworkManagerが起動している場合、ネットワーク再起動しても、
[ /etc/sysconfig/network-scripts/ ]以下の[ route- ]、[ rule-* ]のファイルが設定反映されませんでした。
[ /var/log/messages ]を見ると、下記確認できました。

解決策を探していたところ、公式サイトにはこのような記載がありました。

NetworkManagerを停止し、initscriptsを使用してみます。

自動起動の停止

自動起動についても停止しておきます。

ネットワーク再起動

設定を反映させるため、ネットワークを再起動します。

ルーティングテーブルの確認

設定内容が反映されたことが確認でき、[ eth1 ]についても、 外部ネットワークからアクセスできるようになりました。

最後に

複数のENIを利用する場合のネットワーク設定の例を紹介しました。
このような構成の場合、どうしても設定内容が複雑になってしまいがちです。
システムやネットワークの構成をしっかりと検討した上で、どうしても必要な場合に利用することをお勧めいたします。

株式会社サーバーワークスでは一緒に働く仲間を募集しています
同じタグの記事
今週のランキング