2012/10/17

2012-10-17:bind9のaclで「とあるセグメント、ただしヤツは除く」

LAN 内においている DNS で、同じ LAN 内のクライアントからの問い合わせには内側用のゾーンを、ルータ経由で外からきた問い合わせには外側用のゾーンで回答、ということがしたくなった。
この要望自体は bind9 の view という機能で実現ができる。
具体的には named.conf で、

view "internal" {
        match-clients { 内側にいる子たち; };

        zone "." IN {
                type hint;
                file "named.ca";
        };
        zone "exsample.com" {
                type master;
                file "/var/named/zone/int_exsample.com";
        };
        ....
};

view "external" {
        match-clients { any; };

        zone "." IN {
                type hint;
                file "named.ca";
        };
        zone "exsample.com" {
                type master;
                file "/var/named/zone/ext_exsample.com";
        };
        ....

こんな感じで書く。
それぞれの view の中の match-clients に対象指定があり、view を上から見てってマッチしたらその view の中で指定の zone が適用される仕組み。

で、今回のお題。

192.168.0.0/24 のセグメントで 192.168.0.2-255 は internal、192.168.0.1 と 192.168.0.0/24 以外は external

がしたい。

192.168.0.2 から先を一個一個書いていく、という漢らしいことをするのも考えたけど、、、ちゃんと書き方があるのね。
正解は

        match-clients {
                !192.168.0.1/32;
                192.168.0.0/24;
        };

でした。
ビックリマーク使えるとはビックリ(とベタなギャグ