NextCloud+CloudBeatsで出先から自宅の音楽データを再生 (4)内部向けDNSサーバ構築

前回までに,プライベートなオンラインストレージを構築できるNextCloudをHTTPSでセットアップする手順を記載しました.


ここまでくれば,後は初回に紹介したCloudBeatsアプリを使ってNextCloudにアクセスすれば,やりたいことはほとんど実現できたようなものなのですが,1つ問題となるのが「自宅のLANからはドメイン名でサーバへのアクセスができない」点です.

外部ネットワークからはドメイン名(xxxx.mydns.jp)でアクセスすると自宅のルーターでポートフォワーディングされてサーバにアクセスできるのですが,LANからxxxx.mydns.jpにアクセスしようとしてもルーターで止められてアクセスできない,あるいはルータ自身へのアクセスと認識されてしまう,といった現象が起こります.

これだとクライアントアプリ側では自宅内か外かでアクセス先を変えねばならず,かなり不便を強いられることになります.これを回避するため,今回は内部向けDNSサーバを構築し,DNSサーバで名前解決してもらうことで,LANからでもドメイン名でNextCloudにアクセス可能とします.

DNSサーバもNextCloudと同様にRaspberry Piに構築することにします.Linuxで動作するDNSサーバソフトウエアにもいくつか種類があり,設定が簡易なのがdnsmasq, Unbound,本格的な設定をする場合にはBINDなどがあるようです.今回はUnboundを用いてDNSサーバを構築します.

1. Unboundのインストール

インストール自体は以下の一行で済みます.
sudo apt install -y unbound

2. 設定ファイルの編集

/usr/share以下に設置されたサンプルの設定ファイルをコピーしてきて編集します.
sudo cp /usr/share/doc/unbound/examples/unbound.conf etc/unbound/unbound.conf.d/unbound.conf
sudo nano /etc/unbound/unbound.conf.d/unbound.conf
設定ファイルには以下を記述します.
verbosity: 1
#デフォルトポートで受け付け
interface: 0.0.0.0
interface: ::0 # IPv6
#ローカルネットのみ受け付け
access-control: 127.0.0.0/23 allow
access-control: 192.168.0.0/23 allow
access-control: fe80::/10 allow #IPv6ローカルアドレス
local-data: "xxxx.mydns.jp. IN AAAA fe80::xxxx:xxxx:xxxx:xxxx"
local-data-ptr: "fe80::xxxx:xxxx:xxxx:xxxx xxxx.mydns.jp."
local-data: "xxxx.mydns.jp. IN A 192.168.0.xx"
local-data-ptr: "192.168.0.xx xxxx.mydns.jp."
python:
remote-control:
forward-zone:
    name: "."
    forward-addr: 8.8.8.8 # Google DNS サーバー
"access-control"に名前解決を受付けする対象のネットワークを記述します.また,"local-data"に転送先のサーバ(Raspberry Pi)のIPアドレスとの対応を記述します."forward-zone"には,本DNSサーバでは名前解決できなかったドメインを別のパブリックDNSサーバに転送する設定を記述します.

今回はIPv6にも対応するため,IPv6のリンクローカルアドレスも記載していますが,正直これで動いているのかよくわかっていません.

設定ファイルの編集が終わったら,unboundをrestartします.
subo systemctl restart unbound
sudo systemctl enable unbound

3. systemd-resolvedの停止

DNSサーバの利用にあたりポート53を開放する必要がありますが,Ubuntuではsystemd-resolvedがすでにこのポートを使用してしまっているため,systemd-resolvedを無効化しておきます.
sudo systemctl disable systemd-resolved --now

4. ポート開放

NextCloud構築時と同様の方法で,tcpおよびudpのポート53を開放します.
sudo ufw allow 53/udp
sudo ufw allow 53/tcp

5. NextCloudにアクセスするiPhoneやPCのDNSサーバ設定を変更

通常LAN内はDHCPなどでアクセスしていると思いますが,デフォルトのままだとDNSサーバはルーターからフォワーディングされたプロバイダなどが提供するDNSサーバにアクセスしに行く形になっています.そこで,クライアント側の端末のLAN設定を編集し,今回構築したDNSサーバに問い合わせしに行くように変更します.端末のOSによって設定方法が異なりますので,OS別に手順を記載します.
    1) iPhone(iOS)の場合
        a) 設定->Wf-Fi->接続中のSSIDの(i)ボタンを押す
        b) 下のほうのDNSを構成を自動→手動に
        c) DNSサーバからもともと登録されていたものを削除し,新設したローカルDNSサーバのIPv4アドレスを記載
    2) Androidの場合
        a) 設定->ネットワークとインターネット->Wi-Fi->接続中のSSIDを選択
        b) 右上のペンボタン->詳細オプション->IP設定を固定に
        c) IPアドレスゲートウェイDNSサーバのIPv4アドレスを記載
    3) Windows 10の場合
        a) 設定->ネットワークとインターネット->状態->ネットワークの詳細設定->アダプターのオプションを変更する
        b) 接続中のネットワークアダプターを右クリック→プロパティでTCP/IPv4・TCP/IPv6のプロパティを開く
        c) "次のDNSサーバーのアドレスを使う"を選択し,新設したDNSサーバーのIPv4, v6アドレスを記載

これで,LAN・WANどちらからも同じドメイン名を用いてNextCloudにアクセスできるようになりました.

参考サイト: