自宅用内部DNSサーバーの構築
khws4v1.myhome.cxは自宅サーバーでやっているわけですけども、LANの外からアクセスする時は普通に外部のDNSサーバーが名前解決してアクセスできる。
一方でLANの中からアクセスするにはローカルIPアドレスでないといけないが、外部のDNSサーバーからはグローバルIPアドレスしか教えてくれないのでアクセス不能になるのだ。
ならばLAN内に内部のDNSサーバーを作り、それを使うことで自宅サーバーにアクセスできるようにしようというわけだ。
dnsmasq
DNSサーバーといえばbindだが、所詮内部DNSサーバーにbindは大げさすぎる。
導入が簡単なdnsmasq程度で済ましておくのが良さそうだ。
設定
まずはインストールする。
1 |
yum install dnsmasq |
/etc/dnsmasq.conf
の設定ファイルを書く。
初期状態で長いが、少しだけ書き加えたりするだけで済む。
1 2 3 4 5 6 7 |
# Never forward addresses in the non-routed address spaces. bogus-priv # Add local-only domains here, queries in these domains are answered # from /etc/hosts or DHCP only. #local=/localnet/ local=/khws4v1.myhome.cx/ |
bogus-priv
はローカルIPアドレスの逆引きを上位のDNSサーバーに転送しない。
local
は/etc/hosts
かDHCPでのみ名前解決するドメインを指定する。
/etc/hosts
に自宅サーバーのIPアドレスを書く。
1 |
x.x.x.x khws4v1.myhome.cx |
DNSサーバーの設定
内部DNSサーバーが使う外部DNSサーバーの設定をする。
これをしないとDHCPのDNSサーバーを設定した時に無限ループして死ぬ。
- DHCPで設定されているDNSサーバーの設定を無視するようにする
1 |
nmcli con mod enp0s0 ipv4.ignore-auto-dns yes |
- DNSサーバーを指定する
1 |
nmcli con mod enp4s0 ipv4.dns '192.168.0.1 8.8.8.8 8.8.4.4' |
- NetworkManagerを再起動する
1 |
systemctl restart NetworkManager |
起動&自動起動
1 2 |
systemctl start dnsmasq systemctl enable dnsmasq |
動作確認
1 |
dig @サーバーのIPアドレス khws4v1.myhome.cx |
複数回やると結果がキャッシュされているので、爆速で返答してくれるはず。
動作確認が終わったらDHCPのDNSサーバーをルーターの方で設定しておくと各クライアントの設定の手間が省ける。