今更なネタではあるような気がするけど、dnsmasqで内向きDNSを立てた。
以前、ArchLinuxのリポジトリミラーをローカルに立てるという事で、ローカルにミラーを立てたのは良いけれど、家にいるときはローカルミラー、外にいるときは他のミラー…というように接続先を変えるのが面倒くさい。
実はネットワークに接続するたびに毎度毎度mirrorlistを手作業でいじっていたのだ。アホ。
これ自動化する手があるのかもしれないけど、それよりも、ドメイン登録して外からローカルミラーにアクセス出来るようにして、自宅からは内向きDNSで解決するようにして、mirrorlistにはいつも同じドメイン名書いておけばよいのでは?という結論にいたった。しょーもな。
という訳でそういうお話。
dnsmasqは/etc/hostsをもとに名前解決してくれるDNSサーバとして使う事が出来る(BINDみたいに面倒な設定書かずに済んで楽ちんなのだ)
やることをまとめると、
・それらしいドメイン名で自宅外から自宅内のマシンにアクセス出来る
・自宅内でも同じドメイン名でローカルマシンにアクセス出来る
今回は、repo.hoge.comを192.168.0.3とかにあててみようと思う。
まずはdnsmasqを導入する。
[bash]
$ sudo pacman -S dnsmasq
[/bash]
何も考える必要ないっすね。で、設定をいじる。/etc/dnsmasq.confにいる。
[bash]
domain-needed
bogus-priv
local=/hoge.com/
no-dhcp-interface=enp6s0
expand-hosts
domain=hoge.com
[/bash]
次、/etc/hosts
[bash]
$ cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost.localdomain localhost
192.168.0.3 repo.hoge.com
[/bash]
サーバの設定はおしまいなので起動設定(と起動)
[bash]
$ sudo systemctl enable dnsmasq
$ sudo systemctl start dnsmasq
[/bash]
気になるようだったらサーバでrepo.hoge.comにpingとかしましょう
/etc/hostsを設定した時点でサーバ内では名前解決出来るけど、ローカルネットワークの他のマシンからは名前解決出来ない。DNSにサーバを指定すればともかく、それをしたら他のネットワークに参加した時にまた対応せにゃならんでしょう(プロファイル作ってわけるってのもあるけど、手作業が面倒なのが根本なのでなしの方向で)
つー訳で、ルータから特定ドメインの名前解決リクエストだけサーバに飛ばすように設定する(たぶん)。我が家のルータはAterm WR8370Nなので、他の機種他のメーカーは知りません(
設定Web→詳細設定→DNSルーティング設定にルーティングエントリとして追加する
宛先ドメイン:repo.hoge.com
ゲートウェイ:192.168.0.3
プライマリDNS:192.168.0.3
あとは設定を保存して動作チェックだ。
最終的な状況は、
自宅LAN外からアクセス→おなまえどっとこむのDNSを使って名前解決→通常のサーバのようにポートマッピングでサーバへ接続
自宅LAN内からアクセス→LAN内メインDNSサーバたるルータへ要求→ルータは設定されたドメインなので192.168.0.3へ転送→192.168.0.3のdnsmasqが解決してくれる
という感じかしら?
これ、別にリポジトリミラーの話に限る必要は無くて、自宅鯖とかに普通に使えるんすよね…
自宅にあるマシンはどれも手作業でhostsいじってたけど、これからはこれ使って楽ちん設定だー。