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サーバーです。
