子どもがインフルエンザで5日間休みとなってしまった。 んで、このままだとゲーム三昧をしそう。 ということで、あんまり遊んでいるようなら、自動的にネットワークを切れないか、検討してみる。
子どもの端末やアカウントでは、Proxyサーバを通すようにしてあって、 そのアクセス時の利用時間によって、Proxyを通す/通さないをコントロールしている。 しかし、ゲーム機でhttp以外を使っていれば、効き目がない。
そこで、DHCPサーバで子どものゲーム機からのアクセスで、 禁止状態なら fake の情報をDHCPサーバが返すことで、 ネットワーク遮断させてみること考えてみた。
自宅では、isc-dhcpd-4.2.2 を使っているので、色々方法を調べてみた。
DHCPリース時のスクリプト起動
DHCPのリース時にscriptを動かすには、on commit { execute(…); }といった方法がある。
(( /etc/dhcp/dhcpd.conf )) on commit { execute( "shell script..." ) ; }
でも、これでは fake 情報を返せなさそう。
リース前にスクリプト起動
リース情報を決めるための if文が使えそうで、ここを見たら、こんなことが書けそう。 でも試してみるけど、うまく動かない。
host playstation { hardware ethernet 11:22:33:44:55:66 ; fixed-address 192.168.XXX.YYY ; # dhcpd.scriptは使わせたくない時は "exit 1" if ( execute( "/etc/dhcpd/dhcpd.script" ) = 1 ) { option routers 192.168.YYY.ZZZ ; # 偽のルータ情報 } }
出力されたエラーメッセージは以下の通り。
dhcpd self-test failed. Please fix /etc/dhcp/dhcpd.conf. The error was: Internet Systems Consortium DHCP Server 4.2.2 Copyright 2004-2011 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ /etc/dhcp/dhcpd.conf line xx : boolean expression expected. if ( execute( ^ /etc/dhcp/dhcpd.conf line xx : semicolon expected. if ( execute( "/etc/dhcpd/dhcpd.script" ) = ^ Configuration file errors encountered -- exiting]
参考にしたサイトだと、dhcpd-3.x ではexecuteが使えるように書いてあるけど、 dhcpd-4.x のマニュアルを見ると、if 式 で execute などの"action"が使えるようなことは書いてない。 うーむ、dhcpd-3.x の隠れ技っぽいのを勝手に期待しちゃダメってことか…