2013/12/21

QNAPでDHCP

家庭内LANにはいくつかマシンがいて(Windows、Raspberry Pi、ノートPCなどなど)、いままではブロードバンドルータからDHCPで割り当てたアドレスをじかに叩いていたのですが、さすがにダサいし、たまにIPが変わってしまってあれっとなることもあったので、名前引きできるようにすることにしました。

ブロードバンドルータにはIPを割り当てるだけの簡単なDHCPしかなくてDNSもないので、QNAPにやってもらうことにします。

QNAPのDHCPは、ウェブ画面のネットワーク→TCP/IPタブから、編集ボタンを押すと設定できます。


ダイアログが表示されるので、適当に入力して「適用」ボタンを押すと動きます。



ただ、この状態の/etc/dhcpd.confは、
max-lease-time 86400;
default-lease-time 86400;
ddns-update-style ad-hoc;
allow booting;
allow bootp;
class "pxeclients" {
        match if substring(option vendor-class-identifier,0,9)="PXEClient";
        next-server 0.0.0.0;
        filename "pxelinux.0";
}
subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.xx 192.168.1.yy;
        option routers 192.168.1.1;
        option domain-name  "xxx";
        option netbios-name-servers 0.0.0.0;
        option domain-name-servers aa.bb.cc.dd;
}
host myclient {
        hardware ethernet XX:XX:XX:XX:XX:XX;
        deny booting;
}
となっています。

今回、fixed-addressを指定してMACでIPを固定したいのですが、ウェブ画面上にはインターフェースがないようなので、dhcpd.confを直に書き換えないといけません。

しかし、書き換えただけではだめです。何故かと言うと起動スクリプト/etc/init.d/dhcpd.shでrestart/startする際に、内部で/usr/sbin/create_dhcpd_confというバイナリが動いて、dhcpd.confをQNAPのオリジナルで上書きしてしまうというクソ仕様となっているからです。

いろいろ調べると、ダミーのパッケージ(QPKG)をこしらえて、そのOS起動時の実行スクリプト(autorun.sh)で置換をすればよい、という情報が出てくるのですが、これがまた動きません。厳密に言うとautorun.shは動くのですが、最後にdhcpdにHUPシグナルを送信したところでdhcpdが消滅して居なくなってしまいます。

しかたがないので、/etc/init.d/dhcpd.shを書き換えて対応。
@@ -13,6 +13,10 @@
        /bin/kill -HUP `/bin/pidof dhcpd`
        # Start daemons
        /usr/sbin/create_dhcpd_conf > /dev/null
+
+       echo "fixup dhcpd.conf... "
+       /share/administ/fixup-dhcpd-conf
        echo -n "Starting dhcpd: "
        if [ `/sbin/getcfg "DHCP Server" "Enable" -u -d "FALSE"` = FALSE ]
dhcpd.confをコピーするスクリプト。
#!/bin/sh
# copy dhcpd.conf
cp /etc/dhcpd.conf /etc/dhcpd.conf.qnaporg
cp /share/mydoc/dhcpd.conf /etc/dhcpd.conf
新しいdhcpd.confには、QNAPの生成するオリジナルのファイルに以下を追記してIPとMACを固定するようにしました(特定MACアドレスに指定IPが払い出されるようになります)。
host rasp {
        hardware ethernet xx:xx:xx:xx:xx:xx;
        fixed-address 192.168.xx.xx;
        option host-name "rasp";
}
さて、次はdnsmasqでDNSを立てようと思ったところで、dnsmaqにはDHCPが内蔵されていることが判明…。

dnsmasqに続く。


0 件のコメント: