routeコマンドで経路テーブルを修正して複数のネットワークに繋ぐ

最近忙しくてブログの更新が滞ってます(はてブ増やすのすら滞ってます)。書いたとしてもこんな手抜き誰でも知ってるような記事を書いてしまうのでビュー数は激減しています。

今日はネットワークのtipsです。

NICが2枚搭載されている(例えばイーサネット無線LAN)マシンに、それぞれ別用途で使うプライベートネットワークを接続した場合、自動的に作成される経路テーブルでは満足に動かない場合があって、それを解消する方法です。

普通にネットワークに繋げただけでは↓のようになると思います。(routeコマンドで確認)

$ route
192.168.1.0     *               255.255.255.0   U     1      0        0 eth0
172.16.1.0      *               255.255.255.0   U     2      0        0 wlan0
link-local      *               255.255.0.0     U     1000   0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

それぞれのネットワークの用途を説明すると、192.168.1.0/24の方は192.168.1.1を介してインターネットに繋がるネットワークで、172.16.1.0/24の方はインターネットに繋がることは無いが172.16.0.0/16をサブネット化してあって172.16.2.0/24などの別ネットワークにアクセスする可能性がある場合。

この状況では他ネットワーク(192.168.1.0/24、172.16.1.0/24以外)へは、インターネット用ゲートウェイ(192.168.1.1)を通じてのみしか送信されなくなる。

この場合、

sudo route add -net 172.16.0.0 netmask 255.255.0.0 gw 172.16.1.1 dev wlan0

と入力してrouteテーブルを以下のようにすれば良い。(172.16.1.0/24で有効なゲートウェイアドレス172.16.1.1は事前に自分で調べておく必要がある)
sudoなのはルート権限が必要&Ubuntuを使ってるからです。

$ route
192.168.1.0     *               255.255.255.0   U     1      0        0 eth0
172.16.1.0      *               255.255.255.0   U     2      0        0 wlan0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      172.16.1.1      255.255.0.0     UG    0      0        0 wlan0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

これで

ping 172.16.2.100

とすれば繋がることを確認できるはず。

これだけではまだ不完全で、それぞれのネットワークで有効なDNS切り替え方法(このドメインはDNS1を使って、他はDNS2を使うなど)が必要で、それについては調査中です。今はhostsファイルに書いて問題解決を行っています。

デフォルトゲートウェイの切り替えなどに関する個人用メモ

sudo route del default gw 172.16.1.1
sudo route add default gw 192.168.1.1