OS X LionをDNSサーバにしてWordPressのマルチサイトの実験をしました(2/2)

2016年5月1日Mac,パソコン・インターネット

WordPressのマルチサイト(サブドメイン形式)を実験しようとすると、サブドメイン名でWordPressサーバ(OS X 10.7.3 Lion)にアクセスできるようにする必要があります。

前回は、そのための設定をしました。

ですが、同じサブネット内にいる他のPCや、iPod touch/iPadからはアクセスできません。

これを解決するために、本格的にMacをDNSサーバにしてしまいます。ただし、家庭内ネットワークで使うためだけに利用します。

例として、次のネットワークを設定します。

IPアドレス ホスト名
192.168.0.1 gw.local.example.com
192.168.0.2 mac.local.example.com
192.168.0.3 win.local.example.com
192.168.0.4 ipod.local.example.com
192.168.0.5 ipad.local.example.com

ドメインは、"example.com"のサブドメイン"local.example.com"として定義します。

example.comは、実際にのホストとしては存在しなく、例の表示やテストで使ってよいとされています(RFC 2606)。

もし、既に独自ドメインをお持ちでしたら、そのサブドメインとして定義するのが良いと思います。

設定は、次の手順となります。

  1. /etc/named.confの設定
  2. /var/named/example.local.zoneの作成
  3. /var/named/example.local.revの作成
  4. namedの再起動

順を追って説明します。

1. /etc/named.confの設定

/etc/named.confには、アドレス解決のためにlocal.example.comの設定を追加します。

options {
        directory "/var/named";
        /*
         * If there is a firewall between you and nameservers you want
         * to talk to, you might need to uncomment the query-source
         * directive below.  Previous versions of BIND always asked
         * questions using port 53, but BIND 8.1 uses an unprivileged
         * port by default.
         */
        // query-source address * port 53;
        forwarders {
                8.8.8.8;  // GoogleのDNSサーバ
                8.8.4.4;  // GoogleのDNSサーバ
        };
};

optionsに、赤字の部分を追加しました。

ローカル(Mac)のnamedでアドレス解決できない時は、forwadersに書かれたDNSサーバに問い合わせに行きます。

この例では、GoogleのDNSサーバを指定しました。

WAN(光回線)とつないでいるルータのアドレス、あるいはプロバイダのDNSサーバを指定しても良いと思います。

// for HOME
zone "local.example.com." in {
    type master;
    file "example.local.zone";
    allow-transfer{
        none;
    };
};
// for HOME (reverse)
zone "0.168.192.in-addr.arpa." in {
    type master;
    file "example.local.rev";
};

local.example.comを読み込むための設定をします。local.example.comについては、外に問い合わせにいきません。

2. /var/named/example.local.zoneの作成

$ cd /var/named
$ sudo vi example.local.zone

次の内容を記載します。

$TTL 86400
@               1D IN SOA       @ local.example.com. (
                                        2012032701      ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
             IN NS       mac.local.example.com.
             IN A        192.168.0.2
mac          IN A        192.168.0.2
www          IN CNAME    mac
win          IN A        192.168.0.3
ipod         IN A        192.168.0.4
ipad         IN A        192.168.0.5
gw           IN A        192.168.0.1

シリアル(serial)は、年/月/日/通し番号で書くのが通例らしいです。

設定を変更したら、通し番号を一つ増やさないと、データベースが更新されません。

3. /var/named/example.local.revの作成

$ cd /var/named
$ sudo vi example.local.rev

次の内容を記載します。

$TTL 86400
@    IN SOA      local.example.com. root.local.example.com. (
                                      2012032701 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
;
     IN NS       mac.local.example.com.
     IN PTR      mac.local.example.com.
     IN A        255.255.255.0
1    IN PTR      gw.local.example.com.
2    IN PTR      mac.local.example.com.
2    IN PTR      win.local.example.com.
4    IN PTR      ipod.local.example.com.
5    IN PTR      ipad.local.example.com.

4. namedの再起動

既に、named自体は起動している物とします。

$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.isc.named.plist
$ sudo launchctl load -w /System/Library/LaunchDaemons/org.isc.named.plist

この方法でも、namedの設定を再読み込みできますが、次の方法の方がスマートです。

$ sudo rndc -p 54 reload
server reload successful

正しく読み込めているかどうか、確認します。

$ nslookup
> mac.local.example.com
Server:        127.0.0.1 ← ローカルサーバ
Address:    127.0.0.1#53
Name:    mac.local.example.com
Address: 192.168.0.2 ← 設定したアドレスが返ってきた
> win.local.example.com
Server:        127.0.0.1
Address:    127.0.0.1#53
Name:    win.local.example.com
Address: 192.168.0.3
> local.example.com ← サブドメインとして指定
Server:        127.0.0.1
Address:    127.0.0.1#53
Name:    local.example.com
Address: 192.168.0.2 ← 設定したアドレスが返ってきた
> 192.168.0.4
Server:        127.0.0.1
Address:    127.0.0.1#53
4.0.168.192.in-addr.arpa    name = ipod.local.example.com.
> example.com ← 外部のホスト
Server:        127.0.0.1
Address:    127.0.0.1#53
Non-authoritative answer: ← 外部のDNSサーバに聞きにいって、キャッシュした
Name:    example.com
Address: 192.0.43.10 ← example.comとして設定されているIPアドレス
> exit ← 終了

もし、正しい結果が返ってこなかったら、設定を間違えている可能性があります。

そういう場合は、/Library/Logs/named.logにエラーが出ていないかを確認してください。

example.local.zoneやexample.local.revに書き間違いがあっても、rndcはsuccessfulになってしまいますので、注意が必要です。

最初の頃、rndcで、設定をreloadできなくて困っていました。

$ sudo rndc reload
rndc: connect failed: 127.0.0.1#953: connection refused

/etc/named.confを確認してみると、port番号が54になっている事に気がつきました。

controls {
        inet 127.0.0.1 port 54 allow {any;}
        keys { "rndc-key"; };
};

他、rndcには、次の使い方があります。

$ sudo rndc -p 54 flush

ローカルのネームサーバに溜まっているホスト情報をクリアします。

$ sudo rndc -p 54 dumpdb

ローカルのネームサーバに溜まっているホスト情報をダンプします。ダンプした結果は、/var/named/named_dump.dbとなります。

大昔のnamedは、killで各種シグナルを送って制御していました。今はどうなのかな?

なお、namedの設定にあたり、次のサイトを参考にしました。ありがとうございます。

【シリーズ記事】

Posted by お市のかた