概要
- ホストとipの結びつきや、固定ipの利用状況の管理が
~/.ssh/config
頼りだったので改善したかった - とりあえず善は急げでdnsmasqを建てた
- Ubuntu 18.04ではsystemd-resolvedが53をLISTENしていて手間取った
環境
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"
動機
ふとRaspberry pi で遊びたくなったんです。そんな日もありますよね。
IPアドレスどれにしていたかなーと思いつつ、WiresharkでDHCPのパケットを見張って特定して無理やりSSHするなどして、とりあえずアクセスはできました。
あとのことも考えて、そうだIPアドレスを固定しようと思った時に、気づいたわけです。
「どのアドレスが空いてるんだっけ?」
まあ、手元の端末の ~/.ssh/config
を参照すればだいたい書いてあったので、そこから適当に選んでIPを振ったのはよかったのですが、本当はかっこよくDNSでシュッと引けたら気分がいいですよね?そうしましょう!
やったこと
dnsmasq を使うことにしました。bindっていう規模でもなかったので。aptですぐ入るのが便利。
sudo apt install dnsmasq
ところがインストール直後に不穏なメッセージが。
dnsmasq: failed to create listening socket for port 53: アドレスは既に使用中です
え?いつの間にDNSサーバーが!?誰だ建てたのは!外部からの侵入か?と冷や汗をかいたが犯人は systemd-resolved
でした。
(127.0.0.1:53 だけだったので、外からはアクセスできませんでしたが。)
以下の記事も同じような状況に遭遇して同じような反応をしていました。
結局 systemd-resolved
をdisableすることにしました。以下の投稿の通りにすればOKだった。
設定は基本的に以下で述べられている例を参考にすれば良いと思います。
また、 /etc/hosts
をdnsmasq用に使うと、dnsmasq自体を走らせているサーバーのホストについて127.0.0.1を返すことになります。これでは悲しいので、/etc/dnsmasq.conf
に
no-hosts addn-hosts=/etc/hosts-dnsmasq
と記述し、/etc/hosts
は読み込まず、代わりに/etc/hosts-dnsmasq
を利用するように設定しました。
おまけ:DHCPサーバにDNSサーバとドメイン名を設定する(Ciscoのルーターの場合)
ここまで設定したら、端末側のDNSサーバ設定もDHCP経由で自動的に設定してあげたいですよね。私のネットワークでは、CiscoのルーターがDHCPサーバーになっているので、その設定も変更しておくことにします。
ルータのバージョンは以下の通りです。
Cisco IOS Software, C800M Software (C800M-UNIVERSALK9-M), Version 15.7(3)M2, RELEASE SOFTWARE (fc2)
手順
show ip dhcp pool
でdhcp poolの名前を確認しておきます。configure terminal
に入って、ip dhcp pool <dhcp pool名>
を実行して該当poolの設定に入ります。dns-server <DNSサーバのアドレス>
domain-name <ネットワークのドメイン名>
としたのち、exit
してwrite mem
します。
これで、各端末のDHCPリースを更新すれば、ホスト名だけでsshしたりできるようになっているはずです。やったね!
まとめ
- dnsmasqをインストールして、かんたんな内部向けDNSサーバを建てた。
- 新しいUbuntuでは、
systemd-resolved
がすでにPort 53をLISTENしているので、これをdisableにした。 /etc/dnsmasq.conf
はこんな感じ。
domain-needed bogus-priv local=/local.hikalium.com/ no-hosts addn-hosts=/etc/hosts-dnsmasq expand-hosts domain=local.hikalium.com
- DHCPサーバの設定もいじっておきましょう!