【Ubuntu】自宅用のローカルDNSを構築する
はじめに
管理する端末数が増えてきて、ssh等で接続するときにどのipがどの端末か覚えるのが面倒になってきた
そこで、前からやってみたかったDNSをLAN環境に構築する
DNSサーバー用のPCは特に用途のなかったLaptopを流用した
IPアドレスの固定
IPもDHCP割り当てにしてたので、これを機によく使うものは静的IPを割り当てることにした
Ubuntuであれば、ネットワーク設定は/etc/netplan/内のxxx.yamlファイルで定義されている
このyaml形式のファイルは(数値)_xxx.yamlのようになっているが、
冒頭の数値が大きいものを参照するらしい
デフォルトのyamlファイルの名前は環境によってまちまちな印象がある
特に名前はなんでもよさそう
本題となるdhcpによる割り当てを停止して、静的IPを割り当てるには下記のように設定するとよい
# #でコメントアウト可能
# <>は適宜書き換えること.<>は不要
# なおwifiの場合は、接続名やパスワード等の情報も入れる必要がある
network:
ethernets:
<NETWORK-NAME>:
dhcp4: false
addresses: [<設定したいIPアドレス>/<サブネットマスク>]
routes:
- to: default
via: <デフォルトゲートウェイIP>
nameservers:
addresses: [<DNSのIP>]
version: 2
#今回は下記のように設定した
network:
ethernets:
enp5s0:
dhcp4: false
addresses: [192.168.0.2/24]
routes:
- to: default
via: 192.168.0.1
nameservers:
addresses: [192.168.0.2]
version: 2
設定が終わったらnetplan applyで反映させる
ssh等で端末操作している場合は、接続が切れるので注意する
設定したIPアドレスで接続しなおせば問題ない
# generateはapplyに含まれるらしいのでapplyのみでも変更反映される
sudo netplan generate
sudo netplan apply
bind9でDNS設定
DNSは情報の多かったbind9を使って構築することにした
はじめにbind9をaptからインストールする
sudo apt-get update
sudo apt-get install bind9 bind9utils bind9-doc
bind9関連の設定ファイルは基本的に/etc/bind/にデフォルトで作成される
いくつかデフォルトファイルがあるので、それをコピペして自分の設定ファイルのベースにするとよい
はじめに/etc/bind/named.confを確認すると下記のようにファイルをincludeしていることがわかる
このincludeファイルにゾーン設定を行っていく
今回は下記のうち/etc/bind/named.conf.default-zonesに設定を追記した
cat /etc/bind/named.conf
# name.confの中身
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
/etc/bind/named.conf.default-zonesにゾーン設定を追加する
今回は下記のように設定した
なお、上側がフォワードルックアップの設定で下側がリバースルックアップの設定になる
また、それぞれのゾーンの設定がさらにfileの後の部分のファイルに追記することになる
zone "home.local" {
type master;
file "/etc/bind/db.home.local";
};
zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.0.168.192";
};
つづいて、/etc/bind/db.home.localを編集する
このファイルはデフォルトでは作成されないので、適当なdb.~ファイルをコピペして作るとよい
実際に書き換えた内容は下記
$TTL 604800
@ IN SOA home.local. root.localhost. (
5 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
gw IN A 192.168.0.1
dns IN A 192.168.0.2
serverr IN A 192.168.0.3
serverb IN A 192.168.0.4
pi-u20s IN A 192.168.0.10
pi-u22s IN A 192.168.0.11
さらに、/etc/bind/db..0.168.192を編集する
こちらも、適当なdb.~ファイルをコピペして作ること
実際に書き換えた内容は下記
$TTL 604800
@ IN SOA home.local. root.localhost. (
4 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
1 IN PTR gw.home.local
2 IN PTR dns.home.local
3 IN PTR serverr.home.local
4 IN PTR serverb.home.local
10 IN PTR pi-u20s.home.local
11 IN PTR pi-u22s.home.local
書き換えが終わったら下記のコマンドで設定が適切かチェックする
sudo named-checkconf
sudo named-checkzone home.local /etc/bind/db.home.local
sudo named-checkzone 0.168.192.in-addr.arpa /etc/bind/db.0.168.192
問題なければ、bind9をリスタートする
sudo systemctl restart bind9
設定が通っているか確認するにはnslookupを使う
#下記で名前解決するか確認する
#nslookup "検索アドレス or PC名" "DNSサーバーアドレス"
nslookup 192.168.0.1 192.168.0.2
nslookup gw.home.local 192.168.0.2
さらに、dns設定がnetplanで正しく出来ていればdnsの指定がなくとも名前解決できる
#下記で名前解決するか確認する
nslookup 192.168.0.1
nslookup gw.home.local
Discussion