ルーターの DHCP サーバーでルートを配る
おうちでネットワークのテストをしていたら、DHCP で default gateway 以外のルートも配ってみたくなった。
調べてみると DHCP の option 121 を使って送ることができるらしい。
option 121 Classless Static Routes option
この他にも DHCP オプション番号 から適当に書き出してみると
オプション | 属性 |
---|---|
2 | 協定世界時からのオフセット時間 |
3 | Router (デフォルトルート) |
6 | DNS サーバ |
7 | ログサーバー |
15 | クライアントの DNS ドメイン名 |
26 | インターフェイスの MTU サイズ |
28 | ブロードキャストアドレス |
42 | NTP サーバ |
43 | ベンダー固有情報 |
51 | IP アドレスのリース期間 |
121 | クラスレス静的ルート |
... と DHCP は色々と情報を送れます。option 43 なんかは、Cisco の AP に WLC のアドレスを教えるのに使ったりと、使い道は色々。
注) クラスフル (CIDR に対応していない) ルーティングの Static Route option (option 33) は RFC 3442 で廃止。
では option 121 でルートを送ってみよう
しかしパラメータの計算が面倒くさい。ということで、perl スクリプトを書いてみた。
プログラムの後ろ、END 以下部がルーティングのデータになります。
プログラム中の while (<DATA>){
の部分を while (<STDIN>){
にすると標準入力から対話式に入力できます。
__END__以下をこんな感じにして、実行。
10.0.0.0/8 192.168.10.200
172.16.0.0/12 192.168.10.200
0/0 192.168.10.250
q
実行結果
% perl ./option121.pl
enter Distination net/mask and Gateway <NET>/<bit> <GW>
Default route --> 0/0 <gateway>
(ex: 10.20.30.40/16 172.31.23.5) ==>
Next or quit (q)
(ex: 10.20.30.40/16 172.31.23.5) ==>
Next or quit (q)
(ex: 10.20.30.40/16 172.31.23.5) ==>
Next or quit (q)
(ex: 10.20.30.40/16 172.31.23.5) ==>
08,0a,c0,a8,0a,c8,0c,ac,10,c0,a8,0a,c8,00,c0,a8,0a,fa
YAMAHA RTX 用のオプションの文字列を生成完了。
いざ RTX へ投入!
# dns server 8.8.4.4 8.8.8.8
# dns private address spoof on
# ip host rtx1000 192.168.10.250
# ip host ad.doubleclick.net 127.0.0.1
# ip host www.google-analytics.com 127.0.0.1
#
# dhcp service server
# dhcp server rfc2131 compliant on
# dhcp duplicate check 300 500
# dhcp scope 1 192.168.10.100-192.168.10.150/24 except 192.168.10.111 gateway 192.168.10.250 expire 1:10
# dhcp scope option 1 dns=192.168.10.250,9.9.9.9
# dhcp scope option 1 hostname=RTX1000
# dhcp scope option 1 121=08,0a,c0,a8,0a,c8,0c,ac,10,c0,a8,0a,c8
Error: Illegal keyword
#
な!、肝心な option 121 がエラーに。
調べてみると、昔の Windows は 249 だったらしい。今でも (Windows 11) 効くんだろうか?
# dhcp scope option 1 249=08,0a,c0,a8,0a,c8,0c,ac,10,c0,a8,0a,c8
#
エラーなく入ったっぽい。
RTX1000 の配る IP を Windows 11 で取得してみる
→無事、ROUTE に反映されました。
12行目のセパレータを書き換えると NEC UNIVERGE IX, YAMAHA RTX, Cisco で使えることを確認しました。
記述方法については、perl スクリプト末尾のコメント部分を参考にどうぞ。