内部ネットワークから参照するDNSを作ったよ!
それって、どんなDNSなの?
例えば、example.jpだと192.168.1.1にアクセスできるようにするとかできるよ
UターンNAT対策?
そうなんですよねー。UターンNAT対策で内部DNSが欲しかったんです。
内部DNSを低消費電力サーバのスマホtermuxで動かしたいなと思って、いろいろ格闘していました。先日はOpenWrtというルータ上で動かしていましたが、今回は、root化したスマホ上のtermuxで動かしてみました。53ポートで動かすのでroot化が必要ですが、termuxのrootパッケージの1つ、dnsmasqを使って内部DNSを作ろうと思います。
dnsmasqとは?
公式:Dnsmasq
http://www.thekelleys.org.uk/dnsmasq/doc.html
比較的、軽量でDHCP、BOOTPやPXEにも対応しているDNSサーバでOpenWrtにも使われていたります。自ドメイン以外は指定のDNSに転送して応答してくれます。内部ネットワーク向けの簡易なDNSとしては十分な機能をもっていますね。
今回は、IPv4で自ドメインの応答とそれ以外は8.8.8.8のDNSにフォワードして応答してもらうだけのシンプル設定です。DHCPなどそれ以外の機能はつかいません。
Termuxのdnsmasqは?
ポート53で動かすので、root化したスマホにtermuxを動かしている必要があります。1024番ポート以下はrootじゃないとバインドできません。パッチ内容は以下から参照できます。
termux-root-packages:dnsmasq
URL
やってみましょうか!
ステップ1 インストール
インストール自体は簡単です。root-repoパッケージを入れてから、dnsmasqを入れるだけです。
$ pkg install root-repo -y
$ pkg install dnsmasq -y
本体とmanなどが入ります。サイズは264Kと小さいですね。
$ ll /data/data/com.termux/files/usr/bin/dnsmasq
-rwx------ 1 u0_a143 u0_a143 264K Aug 17 02:40 /data/data/com.termux/files/usr/bin/dnsmasq*
ステップ2 設定
Termuxのdnsmasqだと、設定ファイルはデフォルトで無いので作ります。
$ cd $PREFIX/etc
$ vi dnsmasq.conf
内容は以下です。ほどよく読み替えてください。
ホスト設定:$PREFIX/etc/hosts-dnsmasq
ログ:$PREFIX/var/log/dnsmasq.log
このホストIP:192.168.1.38
Termuxユーザ:u0_a143
ドメイン:gpl.jp
フォワードするDNS:8.8.8.8
listen-address=127.0.0.1,192.168.1.38
port=53
bind-interfaces
user=u0_a143
group=u0_a143
no-poll
# プライベートIPアドレスの逆引きを上位DNSサーバに転送しない
bogus-priv
# ドメインの無いホスト名のみ問い合わせの場合、上位DNSサーバに転送しない
domain-needed
# ローカルエリア内のドメインを指定
local=/gpl.jp/
# ホスト名で問合せされた時、下記のdomain=で指定されたドメイン名を補完
expand-hosts
# 補完するドメイン名
domain=gpl.jp
# LocalDNS
addn-hosts=/data/data/com.termux/files/usr/etc/hosts-dnsmasq
server=/gpl.jp/192.168.1.38
server=/1.168.192.in-addr.arpa/192.168.1.38
log-queries
log-facility=/data/data/com.termux/files/usr/var/log/dnsmasq.log
server=/localnet/192.168.1.38 # change ip for your ip-server
server=8.8.8.8
no-resolv
ホスト設定:$PREFIX/etc/hosts-dnsmasq は以下となります。
192.168.1.38 f2
192.168.1.47 p3
192.168.1.47 hack
192.168.1.47 junkhack
resolvファイルは自サーバを参照するよう以下にしておきます。
$ cat resolv.conf
#nameserver 8.8.8.8
nameserver 192.168.1.38
ステップ3 起動
53ポートでバインドさせるので、rootで起動します。
$sudo dnsmasq -C $PREFIX/etc/dnsmasq.conf
ステップ4 確認
確認です。明示的に dig @hostip domain と@でdnsを指定するとより良いです。
$ dig f2 +short
192.168.1.38
$ dig -x 192.168.1.38 +short
f2.gpl.jp.
$ dig hack.gpl.jp +short
192.168.1.47
$ dig yahoo.co.jp +short
182.22.59.229
183.79.135.206
ホスト名のみでも大丈夫ですね。FQDN自ドメインも引けますし、逆引きもできます。管理外はフォワードして応答してきました。
例えばまったく違うドメインを指定
$ cat hosts-dnsmasq
192.168.1.38 f2
192.168.1.47 p3
192.168.1.47 hack
192.168.1.47 junkhack
192.168.1.111 test.example.jp
このように、違うドメイン名をFQDNで記載したら参照できるのでしょうか?
設定変更・再起動
$ sudo killall dnsmasq
$ sudo dnsmasq -C $PREFIX/etc/dnsmasq.conf
参照できるか引いてみます。
$ dig test.example.jp +short
192.168.1.111
$ dig -x 192.168.1.111 +short
test.example.jp.
参照できますね。これって設定ファイルのserver行でドメイン指定しなくてもいいんですかね? 設定項目はもっとシンプルにできるのかもしれませんが、追求するのはヤメにしておきます。
まとめ
同じ設定を、UmidigiF2では動きましたが、Pixel3ではフォワーダーが動かなかったです。
・UmidigiF2では動作し、Pixel3ではフォワーダーが動かない原因は不明
・機会があれば、BOOTPやPXEも試してみたい
・FQDNで記載すれば違うドメイン名でもOK
・MXやテキストレコードなどはどうやって指定するのだろう?
あとがき
今の所不具合はなさそうです。もう1週間ほど動かして問題なさそうであれば今のWordPressサーバを統合しようかなと思います。メインPCからもこのDNSを参照していますが速度的にも特に問題はない感じです。
著者にメッセージ
間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。