Ubuntu serverでNIC毎に宛先ルータを変える

Ubuntu server 12.04 LTSで2枚のNICを使って、それぞれ別のネットワークに接続。先のルータでは別々のプロバイダに接続していて、NICを指定して通信すると、使用回線を切り替えできるようにする。

まず、/etc/sysctl.conf を設定
28行目をコメントアウト

net.ipv4.ip_forward=1

保存したら
sudo sysctl -p
で適用。

次に、/etc/network/interfaces
今回はDHCPを使用せずに設定

auto eth0
iface eth0 inet static
  address 192.168.34.25
  netmask 255.255.255.0
  network 192.168.34.0
  gateway 192.168.34.254
  
auto eth1
iface eth1 inet static
  address 192.168.206.25
  netmask 255.255.255.0
  network 192.168.206.0

見ての通り、デフォルトのGWは192.168.34.254で、もう一方のネットワークにはGWを指定しない。

次に、/etc/network/if-up.d/routes
を新規に作成

#!/bin/sh
IF1=eth0
IF2=eth1
IF1_IP=192.168.34.25
IF2_IP=192.168.206.25
GATEWAY1_IP=192.168.34.254
GATEWAY2_IP=192.168.206.254
IF1_NET=192.168.34.0/24
IF2_NET=192.168.206.0/24
ROUTING1_NAME=gate1
ROUTING2_NAME=gate2

case $IFACE in
"eth0")
  # eth0
  /sbin/ip route add $IF1_NET dev $IF1 src $IF1_IP table $ROUTING1_NAME
  /sbin/ip route add default via $GATEWAY1_IP table $ROUTING1_NAME
  /sbin/ip rule add from $IF1_IP table $ROUTING1_NAME
;;

"eth1")
  # eth1
  /sbin/ip route add $IF2_NET dev $IF2 src $IF2_IP table $ROUTING2_NAME
  /sbin/ip route add default via $GATEWAY2_IP table $ROUTING2_NAME
  /sbin/ip rule add from $IF2_IP table $ROUTING2_NAME
;;
esac

保存したら実行権限を与える事。
ここはinterfacesで指定したIPなどと一致させるように記述。
あと、ROUTING1_NAMEとROUTING2_NAMEを覚えておくこと。

次に、/etc/iproute2/rt_tablesを設定

200 gate1
201 gate2

を追記。gate1, gate2 はroutesで設定したROUTING1_NAME, ROUTING2_NAMEと一致させる。

最後に、DHCP環境じゃなくても/etc/resolv.confが勝手に書き換わるようなので
/etc/resolvconf/resolvconf.d/base を書き換える。

nameserver 192.168.34.15
nameserver 192.168.34.12

これで再起動すると反映される。

コメントを残す