複数NICマシンでのルーティング設定(static route)


はじめに

例えば新しいパソコンを買ってきて家でネットワークにつなぐとき、SSIDとパスワードを入力してつなぐ。DHCPを指定すれば、接続に必要な情報は勝手に登録されるため、IPやデフォルトゲートウェイなどを意識して設定することはない。しかし、仕事で扱うパソコン等であれば、NICを複数枚持っているようなケースも存在する。

昨今色々なスクリプト言語やIDEによってアプリ開発のハードルは下がったように感じるが、ネットワークはまだまだ苦手な人が多い。今回は、特に新しくサーバや端末に固定IPを振って接続するケースで、どうすればよいかをまとめる。

ネットワーク設定の方法

やりがちな間違い

「パソコンにIPを設定する」=「IPやサブネットマスクやデフォルトゲートウェイを設定する」で概ね間違っていないが、複数のNICに対してデフォルトゲートウェイを設定してはいけない。複数のNICにデフォルトゲートウェイを設定してしまうとネットワークが不安定になり、通信ができなくなってしまう。

備考:開発する際の注意

仮に各NICにデフォルトゲートウェイを登録していても、他のNICが有効になっていなければ通信できてしまうこともある。例えば、個別テストのために、ひとつずつケーブルを突き刺した場合である。こうしてテストした場合、いざ全部のケーブルを接続した時点で、全部のNICに設定されたデフォルトゲートウェイが読み込まれ、結果ネットワークが不安定になる。個別の通信試験の段階から、実際に使用するすべてのNICを有効にして望むことが望ましい。

ルーティングの方法:Static Route

異なるネットワークのIPにアクセスするときの出口として必要なのがデフォルトゲートウェイであり、そもそも同じネットワークのIPとしか通信しない場合、デフォルトゲートウェイさえ必要ない。しかし、通常はデフォルトゲートウェイでいいが、特定のサブネットに対しては別のIPを経由したい場合がある。こういうケースでは、static routeを使う。

想定するケース

以下のケースを想定する。

  • パソコンの設定
    • NIC A
      • IP: 192.168.1.10/24
      • Gateway: 192.168.1.1/24
    • NIC B
      • IP: 10.20.30.40/24
  • ルーティングについて
    • 他のネットワークに通信するとき、通常は192.168.1.1/24を経由する(デフォルトゲートウェイ)
    • ただし、サブネット10.50.60.0/24に対しては、10.20.30.50/24(例えばL3スイッチ)を経由したい

このとき、10.50.60.0/24への接続を10.20.30.50/24を経由するようstatic routeで指定する。

Windowsの場合

コマンドプロンプトでrouteコマンドを使用する。

$ route add 10.50.60.0/24 mask 255.255.255.0 10.20.30.50

削除するときは次のように、adddeleteにすれば良い。

$ route delete 10.50.60.0/24 mask 255.255.255.0 10.20.30.50

この設定をずっと有効にする(再起動してもこの設定が有効になる)ためには、-pオプションを使用する。

$ route -p add 10.50.60.0/24 mask 255.255.255.0 10.20.30.50

設定がうまくできたかどうかは、

$ route print

で確認できる。

Linux(RHEL)の場合

RHEL(CentOS)の場合、routeコマンド(ip route)で追加するか、/etc/sysconfig/network-script/route-eth[x]ファイルに記述する(xは、NICに対応するethに合わせて数字を入れる)。今回は後者を紹介する。

上記の設定の場合、各ファイルには次のように設定してあるとする。
eth0が192.168.1.10/24のNIC A, eth1が10.20.30.40/24のNIC Bである。

/etc/sysconfig/network/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.1.10
GATEWAY=192.168.1.1
/etc/sysconfig/network/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=10.20.30.40

このとき、eht1用(IP=10.20.30.40)に対するファイル /etc/sysconfig/network-script/route-eth1 を追加する。

/etc/sysconfig/network-script/route-eth1
10.50.60.0/24 via 10.20.30.50

その後、ネットワークの再起動を行う。

# service network restart

おまけ

以上でstatic routeの設定は終わる。最後に、通信するサブネットがごくごく限られているなら、デフォルトゲートウェイを設定せずに、明示的にstatic routeだけにするのもアリだと考える。