Debian CDNで使ってるDNS-Balanceを他のDNSサーバが動いちゃってるホストで共存させようという努力
Debian CDNで使ってるDNS-Balance(改)ですが、以下2点が以前から気になっちゃってたのでどうにかならんのほんとに?と思って確認しました。
- 他のDNSサーバ既に動いてるホスト(要するにbind9とか動かしちゃってて53/udp,53/tcpが使われているようなホスト)で動作させることができない
- root権限で動かさないといかん
特に1の方が致命的というか、既にDNSうごいちゃってるとどうにも動かせないので困ったチャンな感じ。
で、結論からいうと両方ともほとんど設定のみで回避できました。
まず、DNSが動いちゃってるホスト上でどうにか動かせないか?の方ですが...
- DNS-Balanceは-pオプション指定して起動することで起動するときにbindingするportが指定できるので、これを使って53以外で起動(例えば5553とか)
- 既存のDNSサーバの設定を修正して、DNS-Balanceが管理しているドメインに関してはDNS-Balanceが動作しているportにforwardするようにする
という感じでいけます(追記: いま聞いたけども -pオプションによるポート指定は、この前Ar-が追加したところだったとさ(わら)
ちなみに53/tcp以外へのforwardですが、powerdns-recursorではできませんでした(wish listには乗ってて実装予定はあるが、まだ実装されてない)ということでHANZUBON.jpのネームサーバはbind9に戻しました。
bind9だと、named.conf的なところにこんな感じに書いとけばいけます。
// for debian cdn zone "jp.cdn.araki.net" { type forward; forwarders { 127.0.0.1 port 5553; }; }; zone "deb.cdn.araki.net" { type forward; forwarders { 127.0.0.1 port 5553; }; };
言うまでもなく、forwardersのport指定がキモです。
もう一つのroot権限で動かさないといけない問題の方ですが、これは
- 53/tcpという特権ポートにbindingするから
- ログとpidファイルの書き出し先のパーミッションの問題
の2点によるもののようです。前者に関しては、そもそも前述のようにportをずらしたことによって解決しちゃってるのでとりあえずヨシとして(単体で動かすときには回避できてねぇだろというのはひとまずおいといて(わら)、後者に関しては書き出し先を/var/log,/var/run直下じゃなくてもう一つディレクトリをはさむようにして、そこにDNS-Balanceを動かすユーザが書き込めるようにしておく(owner/groupをそのユーザにしちゃっとく)というありがちな回避策をとりました。
具体的には...
- sudo mkdir /var/run/debian-cdn /var/log/debian-cdn
- sudo adduser cdnadmin
- sudo chown cdnadmin:cdnadmin /var/{run,log}/debian-cdn
- で、 dns_balance.rbの$process_fileと$logfileを前述のディレクトリ以下の指定に書き換えて
- cdnadmin権限でdns_balance.rbを実行
という感じになります。
ということで、どうでっしゃろか?