複数NICのルーティング(Linux)



※以下書籍はKindle Unlimitedで読めます。

■LinuxとUNIXの違いをわかりやすく解説しています。
※サーバーエンジニアは知っておくべき内容です。

【初心者向け】これだけでLinuxとUNIXの違いがわかる!


■ロードバランサー(LB)をわかりやすく解説しています。
※ネットワークエンジニア、サーバーエンジニアは知っておくべき内容です。

これだけでSNMPがわかる!SNMPの使い方


■SNMPの使い方をわかりやすく解説しています。
※ネットワークエンジニア、サーバーエンジニアは知っておくべき内容です。

これだけでロードバランサーがわかる!


■ChatGPTの使い方をわかりやすく解説しています。

【初心者向け】これだけでわかる!ChatGPTの使い方




■動画でわかりやすく解説してます。








では、今日も授業を始める。今日のテーマはルーティングだ




例えば、Linuxサーバに複数のI/F(インターフェース)があって、 それぞれにIPアドレスが設定されていたとする。




1台のLinuxサーバで、3つのLANケーブルを接続できるNIC(ニック=ネットワークインターフェースカード)があって、 それぞれのNICにIPアドレスを設定しているから、1台のLinuxサーバで3つのIPアドレスを持っているということね。




LinuxサーバのそれぞれのNICから、LANケーブルがスイッチにつながっているとする。




1台のLinuxサーバから3本のLANケーブルがでていて、3本ともスイッチにつながっているってことね。




このように複数のNIC(I/F)があっても、Linuxサーバの デフォルトゲートウェイ(デフォルトGW)は1個しか設定できない。




デフォルトゲートウェイはデフォゲって略すんだよね。




例えば、以下の3つのIPアドレスがあったとする。
192.168.1.1(1個目のI/F)
192.168.2.1(2個目のI/F)
10.10.1.1 (3個目のI/F)←デフォゲを持つように設定
※NIC(ネットワークインターフェース)は3つある。
※デフォルトGWが10.10.1.254で
 3個目のI/Fからつながっている先に
 10.10.1.254(ルータ)があると仮定




デフォルトゲートウェイは、Linuxサーバの場合、1つのI/Fにしか設定できない。 Windowsサーバの場合は、各I/Fごとに異なるデフォルトゲートウェイを設定することができるが、 Linuxは複数I/F(複数のNIC)があっても、デフォルトゲートウェイは1つだ。




Linuxは1つのデフォゲしか設定できない仕様になっている。Windowsは複数のデフォゲを持つことができて、I/Fごとにデフォゲを設定できるのね。




この場合、Linuxから宛先IPアドレス「A」に対して、 通信しようとする場合、Linuxのルーティングテーブルに「A」のルーティングがかかれていれば、 それに従って、設定されているI/Fからパケットを出す(通信する)。




つまり、ルーティングテーブルに、「A」へ通信するときは、 このI/Fから通信するというルーティング設定があれば、そのI/Fからパケットが出ていくことになるってことね。




もし、ルーティングテーブルに書かれていない宛先IPアドレスの場合は、 どこのI/Fから通信すればいいか分からないため、デフォルトゲートウェイのIPアドレスへパケットを送ることになるのね。




うむ。デフォルトゲートウェイのIPアドレスへ通信する時に LinuxのどのI/Fからパケットを出すかは、デフォルトゲートウェイを設定した時点で設定されている。




ざっくりいうと、Linuxが宛先IPアドレス「A」へ通信しようとする場合、 ルーティングテーブルをみて、ルーティングテーブルに書かれている宛先はそれに従い、 書かれていない場合は、デフォルトウェートウェイへ通信する。




ルーティングテーブルに書かれているということは、スタティックルートを設定しているか、 LinuxサーバのI/Fのネットワークに所属している場合のどちらかの場合である。 例えば、192.168.1.1(1個目のI/F)のサブネットマスクが/24の場合、 192.168.1.xxxへの通信は、1個目のI/Fからパケットが送信される。 つまり、192.168.1.xxxへのルーティングテーブルは、手動でスタティックルートを設定しなくても、 自動で設定される。




Linuxサーバ自身が所属するネットワークへの経路については、 OSが自動的に登録してくれるってことね。 所属するネットワーク以外へ送信したいときは、 自分でどのI/Fから送信するかをスタティックルート(静的経路)で設定すると、その設定したI/Fから送信されるってことね。




宛先IPアドレスが、Linuxサーバ自身が所属するネットワークへの経路でもなく、 自分が設定したスタティックルートにも該当しない場合は、デフォゲに送信されるのね。




うむ。例えば、192.168.1.1(1個目のI/F)が、LANケーブルでスイッチにつながっていて、 そのスイッチに、別のサーバ(192.168.1.2)からもLANケーブルがつながっているとする。 192.168.1.1も192.168.1.2もサブネットマスクが/24とすると、 Linuxサーバの192.168.1.1も、 別サーバの192.168.1.2も同じネットワークということになる。 Linuxサーバから、192.168.1.2への通信は、スタティックルートを設定していなくても、 192.168.1.1(1個目のI/F)からパケットが送信される。




あと、Linuxサーバに複数のNICがある場合に、通信の行きと帰りが異経路になると通信できないことがある。 パケットの行きと帰りが別経路となる通信のことを、非対称通信とか、非対称ルーティングといっている。




Linuxサーバから宛先IPアドレス宛にパケットを送信したときに、 行きに通った各NW機器の経路と、宛先IPアドレスの機器からLinuxサーバへの戻りのパケットが、 行きとは異なる経路でLinuxサーバへパケットが返るようなケースを非対称ルーティングというのね。




例えば、サーバX(IPアドレス:X)から、Linuxサーバの192.168.1.1(1個目のI/F)へパケットが届いた場合、 LinuxサーバがIPアドレス「X」へパケットを返すときに、 ルーティングテーブルを見る。 ルーティングテーブルに、IPアドレス「X」への経路が書かれていない場合、 デフォルトゲートウェイからパケットを返すことになる。 今回の例だと、10.10.1.1(3個目のI/F)にデフォゲを設定しているので、 10.10.1.1(3個目のI/F)から10.10.1.254(デフォゲ)へパケットを返すことになる。




この場合、行きと帰りが同じI/Fになっていないので、異経路という。 Linuxの192.168.1.1(1個目のI/F)へ届いたパケットが、10.10.1.1(3個目のI/F)から返ろうとしているってことね。




このように異経路の場合は、LinuxのOSの種類や、OSのバージョンによって、どのように動作するかが多少変わってくる。 例えば、CentOS7の場合、デフォルトの設定(=OSをインストールしてから特別な設定をしていない場合)では、CentOS7にパケットが入ってきたI/Fと、 CentOS7からの戻りのパケットのI/Fが異なる場合は、パケットを送らないという設定になっている。




つまり、CentOS7の場合、行きと帰りの通信が異なる場合は、パケットを返さない。 もし、行きと帰りが異なってもパケットを返すようにしたい場合は、/etc/sysctl.confファイルに以下の設定を入れる必要がある。

net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2

上記を設定して、CentOS7からパケットが返るようにしても、 途中のファイアウォールで、非対称通信(パケットの行きと帰りが別経路となる通信)のために 遮断されることもある。 ファイアウォールのステートフルインスペクションという機能が有効になっていると、 TCPやUDPの行きと帰りの通信状態をチェックしているため、 非対称通信の場合に、通信が失敗する。




つまり、非対称通信にならないようにした方が確実ってこと?




うむ。例えば、サーバX(IPアドレス:X)から、Linuxサーバの192.168.1.1(1個目のI/F)へパケットが届いた場合、 LinuxサーバにIPアドレス「X」のスタティックルートをあらかじめ設定しておけば (192.168.1.1(1個目のI/F)からIPアドレス「X」へ通信するようにスタティックに設定)、 サーバX(IPアドレス:X)から、Linuxサーバへ通信の戻りは、同じI/F(1個目のI/F)になる。 よって、異経路にはならない。




もし、サーバX(IPアドレス:X)から、このLinuxサーバの 192.168.2.1(2個目のI/F)にも、10.10.1.1(3個目のI/F)にも通信したい場合はどうなるの?




今日は頭の回転が速いな。 サーバX(IPアドレス:X)が用途によって、 192.168.2.1(2個目のI/F)へ通信したり、 10.10.1.1 (3個目のI/F)へ通信したりというようなケースでは、 さっきのスタティックルート設定に従うと、 両方とも戻りの通信は、192.168.1.1(1個目のI/F)からIPアドレス「X」へ通信する。




サーバX(IPアドレス:X)からLinuxサーバの 10.10.1.1(3個目のI/F)へ通信したときの戻りの通信が異経路になっちゃう!




ってことは、ステートフルインスペクションのF/W(ファイアウォール)があったら、途中でパケット破棄されちゃう。




ってか、どうしたらいいの?




LinuxサーバにPBR(ポリシーベースルーティング)という設定をすれば解決する。




PBR(ピービーアール)って何?




今日はここまでで、PBRの説明は次回にしよう




は~い。



今回のまとめ

1.デフォルトゲートウェイ=デフォゲ

2.Linuxは1つのデフォゲしか設定できない

3.Windowsは複数のデフォゲを設定できる

4.非対称ルーティングはパケットの行きと帰りが別経路となる通信

5.非対称ルーティングはF/Wのステートフルインスペクションで遮断される

6.PBRはポリシーベースルーティングのこと

 

 次の章へ