CoreDNSで自宅LANドメインを作る

自宅サーバーを運用していると、IPアドレスでの接続に不便を感じることが多くなります。

192.168.0.10

192.168.0.23

192.168.0.45

といったIPを覚えて接続するのは面倒ですし、サーバーが増えると管理が破綻します。

さらにVPNを使う環境では、接続先のネットワークと自宅ネットワークのIPが衝突することもあります。

そこで便利なのが ローカルDNS です。

今回はDNSサーバーとして BINDではなくCoreDNS を使います。

理由は非常にシンプルで、

設定が圧倒的に簡単だからです。

BINDは設定ファイルやゾーンファイルが複数必要ですが、CoreDNSなら基本的に1ファイルで設定できます。


想定するネットワーク構成

この記事では以下のような構成を例にします。

192.168.0.X : DNSサーバー

192.168.0.Y : サーバーY

192.168.0.Z : サーバーZ

作成するドメイン

y.example.com → サーバーY

z.example.com → サーバーZ

なおこの記事ではIPアドレスの末尾を

X / Y / Z

という記号で表しています。

実際の環境では任意の数値に置き換えてください。


CoreDNSをインストール

Macの場合はHomebrewで簡単にインストールできます。

brew install coredns

インストール確認

coredns -version

CoreDNS-1.14.x

darwin/amd64

通常バイナリは次の場所にインストールされます。

/usr/local/bin/coredns


設定ディレクトリを作成

CoreDNSの設定用ディレクトリを作ります。

mkdir ~/coredns

cd ~/coredns


Corefileを作成

CoreDNSの設定は Corefile というファイルに書きます。

nano ~/coredns/Corefile

内容

.:53 {

hosts {

192.168.0.Y y.example.com

192.168.0.Z z.example.com

fallthrough

}

forward . 1.1.1.1 8.8.8.8

cache 3600

log

}


この設定の意味

hosts セクションでは

y.example.com → 192.168.0.Y

z.example.com → 192.168.0.Z

という名前解決を定義しています。

fallthrough を指定することで、

hostsにない問い合わせは次のDNS処理へ渡されます。

forward . 1.1.1.1 8.8.8.8

は、外部のDNS問い合わせを

Cloudflare DNS

Google DNS

に転送する設定です。


CoreDNSを起動

次のコマンドでDNSサーバーを起動します。

sudo coredns -conf ~/coredns/Corefile

正常に起動すると次のような表示になります。

.:53

CoreDNS-1.14.x

これでDNSサーバーがポート53で待ち受けます。


動作確認

DNSサーバーが正しく動いているか確認します。

dig @127.0.0.1 y.example.com

成功例

ANSWER SECTION

y.example.com IN A 192.168.0.Y


MacのDNSを変更

次にMacがこのDNSサーバーを使うように設定します。

システム設定

ネットワーク

使用中のネットワーク

DNS

DNSサーバーに

192.168.0.X

を追加します。

確認

scutil –dns | grep nameserver

nameserver : 192.168.0.X


接続テスト

これでIPを使わず接続できるようになります。

ping y.example.com

または

ssh y.example.com

Webサービスの場合

http://y.example.com:ポート番号

この方法で

Webサーバー

SSH

VNC

アプリケーションサーバー

などに接続できます。


VPN環境でも利用できる

WireGuardなどのVPNを使っている場合は

DNS = 192.168.0.X

を設定すると、外出先からでも

ssh y.example.com

vnc y.example.com

http://y.example.com:ポート番号

のようにアクセスできます。


BINDよりCoreDNSが簡単な理由

BINDの場合

named.conf

zoneファイル

reverse DNS

など複数の設定が必要です。

CoreDNSなら

hosts

IP ドメイン

という形で書くだけなので、設定が非常にシンプルです。


短い名前でも接続できるようにする

Corefileを次のように書くこともできます。

192.168.0.Y Y y.example.com

192.168.0.Z Z z.example.com

こうすると

ssh Y

http://Y:ポート番号

のような短い名前でも接続できます。


CoreDNSを自動起動する

MacではLaunchAgentを使うと自動起動できます。

nano ~/Library/LaunchAgents/com.coredns.plist

設定内容

Label com.coredns

ProgramArguments

/usr/local/bin/coredns

-conf

/Users/username/coredns/Corefile

RunAtLoad true

読み込み

launchctl load ~/Library/LaunchAgents/com.coredns.plist

これで

Mac起動

CoreDNS起動

となります。


まとめ

CoreDNSを使うと

y.example.com

z.example.com

nas.example.com

gpu.example.com

のような 自宅用ドメイン環境を簡単に作れます。

BINDと比べて

設定が簡単

トラブルシュートが簡単

管理がシンプル

という大きなメリットがあります。

自宅サーバーやホームラボ環境を構築する場合、非常におすすめのDNSサーバーです。