0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

おうちサーバー構築報告:LAN内DNSサーバー Unbound

Posted at

能書き

おうちサーバー構築報告:予告からのおうちサーバー構築の続きです。

Unboundは以前も何度か取り扱っている訳ですが、今回はUbuntu24.04LTSにシェルスクリプトで自動的に導入します。対象が1マシンだけなのでAnsibleは止めました。

目標

Unboundで家庭内DNSサーバーを実現します。

参考文献

少し調べました。mDNS用には.localが予約されているとか。情報源がWikipediaというのは感心しませんが。

準備

家庭内ドメイン

能書きは以前の記事に任せて、端的に要点だけ書いときます。

  • 公開するサーバーを立てるつもりなら、きちんと年間予算を捻出してドメインを買おう
  • 家庭内限定ドメインという事で、今回はお手軽に.localにする
    • 本当は家庭内の非公開サーバーでも購入したドメインを使う方が良い(けど今回はゴニョゴニョ)

スナップショット

対象コンテナの名前はnetwork、IPアドレスは172.16.1.101です
該当コンテナのスナップショットを撮ります。ProxmoxVEはGUIでスナップショットを撮れます。分かり易いので手順の詳細は省略。

念の為に該当コンテナをシャットダウンして、それからスナップショットを撮り、その後開始しておきます。

インストールと基本設定

踏み台サーバーとして172.16.1.100を使用します。

普段使いのクライアントマシン
ssh ansible@172.16.1.100
サーバー172.16.1.100:ユーザーansible
ssh root@172.16.1.101

今回は手順をシェルスクリプトにまとめました。

サーバー172.16.1.101
cd
cat <<___ >install_unbound.sh
SUBNET=\$1
IPADDR=\$2
PARENT=\$3

apt update
apt upgrade -y
apt install -y unbound

cd /etc
svn st | grep "^?" | cut -b9- | xargs -I{} find {} -type f -or -type d -or -type l | xargs -r svn add
svn ci -m"installed Unbound"
sed -i -e"/^#DNS=/c DNS=\$IPADDR" -e"/^#Domains=/c Domains=local" /etc/systemd/resolved.conf
systemctl restart systemd-resolved
svn ci -m"setting systemd-resolved"

cd /etc/unbound/unbound.conf.d/
cat >local.conf <<___A
server:
  username: unbound
  verbosity: 1
  interface: \$IPADDR
  access-control: \$SUBNET allow
  root-hints: "/etc/unbound/unbound.conf.d/parent.hints"
  include: "/etc/unbound/unbound.conf.d/machines.list"
  hide-identity: yes
  hide-version: yes
remote-control:
  control-enable: no
___A
touch machines.list
cat >parent.hints <<___B
.             3600000 NS ROUTER.LOCAL.
ROUTER.LOCAL. 3600000 A  \$PARENT
___B
systemctl enable unbound
systemctl restart unbound

cd /etc
svn st | grep "^?" | cut -b9- | sudo xargs -rt svn add
svn ci -m"Unbound initial settings"
___
chmod 755 install_unbound.sh
./install_unbound.sh 172.16.0.0/16 172.16.1.101 172.16.2.1

内向きDNS

設定

マシン名は/etc/unbound/unbound.conf.d/machines.listに追加します。正引きと逆引きの両方が必要です。構築したコンテナと仮想マシンの名前とIPアドレスをまとめて全部設定しておきます。

サーバー172.16.1.101
cd /etc/unbound/unbound.conf.d/
cat >>machines.list <<___
local-data: "network.local. 3600000 IN A 172.16.1.101"
local-data-ptr: "172.16.1.101 3600000 network.local."
local-data: "mail.local. 3600000 IN A 172.16.1.102"
local-data-ptr: "172.16.1.102 3600000 mail.local."
local-data: "proxy.local. 3600000 IN A 172.16.1.103"
local-data-ptr: "172.16.1.103 3600000 proxy.local."
local-data: "docker.local. 3600000 IN A 172.16.1.104"
local-data-ptr: "172.16.1.104 3600000 docker.local."
___

文法チェックします。

サーバー172.16.1.101
unbound-checkconf

確認

設定ファイルを読み込みます。

サーバー172.16.1.101
systemctl restart unbound

ちょっと確認。別のマシンからnslookupコマンドを実行してみます。

クライアントマシン:Windows
nslookup network.local 172.16.1.101
クライアントマシン:Windows
nslookup mail.local 172.16.1.101
クライアントマシン:Windows
nslookup proxy.local 172.16.1.101
クライアントマシン:Windows
nslookup docker.local 172.16.1.101

外部のドメイン名(example.com等)も、引き続き名前解決できる事を確認します。

クライアントマシン:Windows
nslookup example.com 172.16.1.101

設定保存

うまくいったらSubversionコミットしておきます。

サーバー172.16.1.101
cd /etc
svn st | grep "^?" | cut -b9- | sudo xargs -rt svn add
svn ci -m"DNS setting: network,mail,proxy,docker"

その他の設定

無線LAN親機など

通常の家庭の場合、無線LANの親機がルータやDHCP等の設定も持っているでしょう。この内DNSを、我が家で言えば172.16.1.101に向けるように設定します。

  1. DHCPサーバから通知するDNSサーバアドレスを設定
  2. DNSルーティング設定とかいう機能で、家庭内で解決する名前のドメイン毎に、Unboundを立てたサーバのIPアドレスを設定

これは機種によって異なります。それぞれのマニュアルを確認して下さい。

但し。我が家のマシン NUC13ANHI5000 はどういう訳か不安定で、電源を数日入れっ放しにしておくと、意味不明なエラーが発生します。たまに再インストールを余儀なくされます。余りにも不安定なので、我が家ではこの設定はしません。家人に不評なので。私のクライアントマシンに手作業で設定する事にします。

起動失敗は今回は発生せず

前回問題になった起動失敗は、今回は発生しませんでした。コンテナにしたからでしょうか。

と言う訳で起動失敗への対応は実施しません。

仕舞い

これで家庭内の名前解決が出来るようになりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?