思い立っておうちネットワークにdnsmasqを建てた話

概要

  • ホストと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アドレスどれにしていたかなーと思いつつ、WiresharkDHCPのパケットを見張って特定して無理やり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 だけだったので、外からはアクセスできませんでしたが。)

以下の記事も同じような状況に遭遇して同じような反応をしていました。

qiita.com

結局 systemd-resolvedをdisableすることにしました。以下の投稿の通りにすればOKだった。

askubuntu.com

設定は基本的に以下で述べられている例を参考にすれば良いと思います。

int128.hatenablog.com

また、 /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)

手順

  1. show ip dhcp pooldhcp poolの名前を確認しておきます。
  2. configure terminal に入って、ip dhcp pool <dhcp pool名>を実行して該当poolの設定に入ります。
  3. 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サーバの設定もいじっておきましょう!