DHCPでルーティング情報を送りたいことがある。例えば次のような場合。

デフォルトゲートウェイはブロードバンドルータにするのだけど、それとは別にルータがあって、その向こうのサーバにアクセスしたい。
こうした場合には、サーバへのルートをクライアントに設定するわけだが、マシンが多いとDHCPで配信したい。DHCPには静的ルート(static route)のオプションがあって、特定のIPアドレスへのゲートウェイについては配信できるのだけど、サーバが多いとネットワークアドレスを指定したい。
これを「クラスレスな静的ルート」といって、Windows XP以降ではDHCPのオプション249として実装されている。Windowsクライアント限定になってしまうけれども、これを利用することを考える。
Windows Serverの場合
Windows Serverに付属のDHCPサーバであれば、単に「クラスレス静的ルート」を設定すればいい。

Linuxの場合
dhcpdにはstatic-routesというオプションがあるが、これはネットマスクを指定できないのでクラスレスではない。(ただし、RedHatのDHCPクライアントはこれをクラスレスに扱えるらしい・・)
オプション249はMicrosoftの独自拡張なので、これを扱うにはdhcpd.confで次のように設定する。(数値の並びはコンマで区切ることに注意)
# オプション249を定義する option ms-static-routes code 249 = array of integer 8; # route -net 192.168.10.0/24 gw 192.168.0.254 option ms-static-routes 24, 192,168,10, 192,168,0,254; # route -net 10.1.0.0/16 gw 192.168.0.254 option ms-static-routes 16, 10,1, 192,168,0,254;
その他の方法
もっと手軽な方法として、DHCPを使うのではなくて、ブロードバンドルータ上でルートを設定するやり方もある。これにはブロードバンドの設定画面で次のようにルートを登録すればいい。
ネットワーク:192.168.10.0
ネットマスク:255.255.255.0
ゲートウェイ:192.168.0.254
こうするとサーバ宛のパケットはすべてブロードバンドルータを経由して社内ルータに送られる。
本来であれば、ICMPリダイレクトという機能によって、クライアント側に一時的なルートが動的に作られるはずなのだが、これはデフォルトでは無効になっているようだ。
とはいえ、Windowsクライアントに限らずあらゆるケースで有効なので、DHCPと合わせて設定しておくといいかもしれない。



