Debianでのスタティックルーティングの設定


  • Debian11 で複数の経路がある場合のルーティングの設定でハマったので備忘録
  • IPアドレスは RFC5737  に指定されているドキュメント用のアドレスを利用して記述する

前提条件


  • 2つのNICをOS側で認識している
  • 2つのネットワークに接続している
    • eth0:
      • 管理用の閉ざされたネットワーク
      • ローカルIPアドレスを持っている
      • 今回は 192.0.2.0/24 のネットワークを例にする
    • eth1
      • 未検証のインターネットに接続したネットワーク
      • グローバルアドレスを持っている
      • 今回は 203.0.113.0/24 のネットワークを例にする

① Interfaceの設定

  • 設定は /etc/network/interfaces で行う
# The loopback network interface auto lo iface lo inet loopback ## Management Network allow-hotplug eth0 iface eth0 inet static address 192.0.2.1 netmask 255.255.255.0 gateway 192.0.2.254 ## Internet Network allow-hotplug eth1 iface eth1 inet static address 203.0.113.1 netmask 255.255.255.0 gateway 203.0.113.254
  • この状態だとgateway を複数設定しているがそれぞれのネットワークのdefault gateway を指定していないためDebian全体のDefault gateway を利用して通信を行おうとしてしまい片方のネットワークでしか通信ができなくなる
  • 現在のdefault gateway を調べる方法は ip route showコマンドを利用する
~$ ip route show default via 203.0.113.254 dev eth1 onlink 192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.0.1 203.0.113.0/24 dev eth1 proto kernel scope link src 203.0.113.1 ~$
  • 上記設定が完了したら /etc/init.d/networking restartを実行
  • この場合203.0.113.254 がシステムとしてのdefault gateway となるため 192.0.2.0/24 のネットワークからssh の要求をしても 203.0.113.254 のネットワークへパケットを送ろうとしてしまうため通信が成り立たなくなってしまう

② static route の設定

^ 上記の問題の対処法としてそれぞれのネットワークごとにdefault gateway を指定して上げる。

  • これは標準で入っているiproute2 の機能で実装可能だがDebian系とRedhat系で設定方法が異なる。(※今回はdebian系についての説明をする)
  • 設定は下記の2パターンで実施する

②-① 一時的な設定方法

  • 下記コマンドを実行する
~$ ip route add table 100 to 192.168.2.0/24 dev eth0 ~$ ip route add table 100 to default via 192.168.2.99 dev eth0 ~$ ip rule add from 192.168.2.0/24 table 100 priority 100 ~$ ip route add table 200 to 210.143.145.16/28 dev eth1 ~$ ip route add table 200 to default via 210.143.145.17 dev eth1 ~$ ip rule add from 210.143.145.16/28 table 200 priority 200 ~$

②-② 永続的な設定方法

  • /etc/network/interfaces にstatic route を記述する
  • この時 up でもいいらしいが うまくいかなかったためpost-up を利用している。 -
# The loopback network interface auto lo iface lo inet loopback ## The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.0.2.1 netmask 255.255.255.0 gateway 192.0.2.254 ## The secondary network interface allow-hotplug eth1 iface eth1 inet static address 203.0.113.1 netmask 255.255.255.0 gateway 203.0.113.254 ## Static route post-up ip route add table 100 to 192.0.2.0/24 dev eth0 post-up ip route add table 100 to default via 192.0.2.254 dev eth0 post-up ip rule add from 192.0.2.1.0/24 table 100 priority 100 post-up ip route add table 200 to 203.0.113.0/24 dev eth1 post-up ip route add table 200 to default via 203.0.113.254 dev eth1 post-up ip rule add from 203.0.113.0/24 table 200 priority 200
  • table 100table 200 という二つのルーティングテーブルを用意しそれぞれにデフォルトゲートウェイとOS側が評価するルールの順序を指定する

  • 上記設定が完了したら /etc/init.d/networking restartまたは shutdown -r nowを実行 ( rebootだとなぜかうまく反映されなかった)する

③ 設定の確認

③-① ip route show で2つのネットワークが指定されているのを確認

~$ ip route show default via 203.0.113.254 dev eth1 onlink 192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.0.1 203.0.113.0/24 dev eth1 proto kernel scope link src 203.0.113.1 ~$

③-② rule が適用されているのを確認

  • ip rule listtable 100table 200 がリストに入っていてかつ table main より前にあればOK
    • 入っていなければ正しく設定されていないので設定を見直す
~$ ip rule list 0: from all lookup local 100: from 192.0.2.0/24 lookup 100 200: from 203.0.113.0/24 lookup 200 32766: from all lookup main 32767: from all lookup default ~$

③-③ route table が適用されているかを確認

  • ip route show table XXX でそれぞれのネットワークにdefault gatewayがあることを確認
    • 入っていなければ正しく設定されていないので設定を見直す
~$ ip route show table 100 default via 192.0.2.254 dev eth0 192.0.2.0/24 dev eth0 scope link ~$ ~$ ip route show table 200 default via 203.0.113.254 dev eth1 203.0.113.0/24 dev eth1 scope link ~$

③-④ それぞれのネットワーク経由で traceroute 実施

  • これでそれぞれのネットワークで送受信の経路が確立できたのでそれぞれのネットワークでtraceroute で到達性を確認

問題なければ設定完了。。。と言いたいがこのままではどちらのネットワークに対しても丸裸状態なので nftables か外部のFirewallでの設定が必要なので注意!!