自宅サーバfedora30に内部DNSサーバを立てたくなった。きっかけはwordpress。
インストールはすんなり終わったけど、名前解決に難がある。ヘアピンNATが必要。
要はこうしたい。仮にDDNSサービス(dip.jpとか)でグローバルIPを取得して自宅サーバを公開しているとして
家の外(職場とか)から接続する時はdip.jpはグローバルIPとして解決してほしい
家の中(自宅内部)から接続する時はdip.jpは自宅内WebサーバのIPにしてほしい
そうしないと、自宅サーバにあるWordPressアドレスとサイトアドレスがこんな設定になっている場合に
家の外(職場)からは接続できるのに
家の中(自宅内)から接続できない という状況に陥ってしまう。
<結論>
自宅に内部DNSを立てて解決できる。設定はこれ。
sudo vim /etc/named.conf
内部DNS:192.168.3.11 今回立てるfedora30 ← まずこれでdip.jpを名前解決して
外部DNS:192.168.3.1 NTTのルータ ← 無理だった場合に初めてこっちに行く
似たような相談がネットにもあった。
この回答者のいう「ローカルネットワークに内部DNSを用意する」が今回の対応。
<詳細>
BINDで内部DNSを立てる。
この記事そのままで my.net というドメインを名前解決してみる。これがうまくいけば、my.net を dip.jp に書き換えるだけでうまくいくはず。
まずはBINDをインストールする。
$ yum -y install bind
sudo -s して進める。
$ cd /etc
$ sudo -s
# cp named.conf named.conf_original
# vim /etc/named.conf
recursion yes にしておくことで内部DNSで名前解決できないときに外部DNS(NTTのルータ)に聞きに行ってくれるようになる。
# cat /etc/named.conf | grep directory
# vim /var/named/my.net.zone
# vim /var/named/my.net.zone
設定をチェック。
# sudo named-checkconf
# sudo named-checkzone my.net /var/named/my.net.zone
ファイアウォールに穴あけする。
# sudo firewall-cmd --add-service=dns --permanet
# sudo firewall-cmd --reload
namedの自動起動を設定する。
# sudo systemctl enable named
# sudo systemctl start named
クライアントになるPCを設定する(Linuxの場合はresolv.confで名前解決設定)
# cat /etc/resolv.conf
# cp /etc/resolv.conf /etc/resolv.conf_original
# sudo vim /etc/resolv.conf
search と nameserver の組みを登録する。
pingでテスト。
# ping -c 4 fedora30.my.net
素晴らしい。
同じくクライアントでも、macOSの場合は(resolve.confではなくて)画面からDNSを設定する。こうなる。
内部DNS:192.168.3.11 今回立てるfedora30 ← まずこれでdip.jpを名前解決して
外部DNS:192.168.3.1 NTTのルータ ← 無理だった場合に初めてこっちに行く
末尾1(NTTルータ)を設定しておく必要はない。/etc/named.conf で recursion yes にしたから。
digで自宅内のクライアント(macOS)から名前解決してみる。
グローバルに晒してる名前(***.dip.jp)にdigしたのに、しっかりと自宅内サーバ(192.168.3.11)で名前解決されている。Linux最高すぎる。
次回はポート変換(NAT)も試してみる。
参考)
SOAのMNAMEの末尾のドット忘れるとdigが何かおかしくなる気がする。