自宅にセカンダリDNSを作った話
社長が言う。
東京都知事も言ってるし、明日から基本テレワークな!
そうと決まればさっさと家に帰る。
しばらく自宅作業なので、ネームサーバーが家に必要(嘘)だよね・・・ってことで、この間作ったセカンダリDNSを作った手順をまとめる。
- 知識の薄い自分でも色んな方が公開している情報を参考に Ubuntu + dnsmasq のセットアップできたから自分もその情報を公開(還元)しないとな・・・と思ったし。
- Ubuntu の話だから Raspbian(Raspberry Pi)にも応用できるし。
- 本音は自分用のメモ。
- そもそも、Beagle Bone Black 持ってる人ってどれだけいるんだろ?
以降、Beagle Bone Black は BBBと略。
事前準備
Ubuntu 18.04 LTS を BBB にインストール
イメージファイルの入手
以下のサイトをブラウザで開き、eMMC に書き込むための OS イメージを取得。
上記のサイトを開いた後で、 任意の日付/flasher/
とたどるとイメージの一覧が表示される。
今回ダウンロードしたのはこれ。
https://rcn-ee.com/rootfs/2020-03-12/flasher/bone-eMMC-flasher-ubuntu-18.04.4-console-armhf-2020-03-12-2gb.img.xz
イメージファイルをマイクロSDに書き込む
詳細は割愛。
自分は、『balenaEtcher』というソフトウェアを使用。
マイクロSDの内容を書き込む
BBBにマイクロSDを差し込み、通電。
(「マイクロSD裏面のボタン押しながら」って記事も散見するけど、押さなくてもマイクロSDからブートした。)
しばらくすると青色LEDが点滅し始め、インストールが終わると電源が自動で切れる。
この時点で、Ubuntu のインストールは終了。
(LEDが消えない時は、インストールに失敗している時とか。BBBとディスプレイをマイクロHDMIでつないで確認すれば、エラーログとか見えるかも。)
セットアップ
IPアドレス固定
BBB起動時は、DHCPサーバからIPを自動取得する。
以下の方法で、IPアドレスを固定化。
まずは、どうにかして BBB の IP アドレスを調査。(DHCPサーバのリース情報とか。)
判明したら、ssh ubuntu@xxx.xxx.xxx.xxx
で接続。(パスワードはtemppwd
)
接続後、以下を実行。(例:IPアドレス=192.168.0.100、サブネットマスク=255.255.255.0、デフォルトゲートウェイ=192.168.0.1)
$ sudo connmanctl
connmanctl> services
*AO Wired ethernet_d0c5bd5144db_cable
connmanctl> config ethernet_d0c5bd5144db_cable ipv4 manual 192.168.0.100 255.255.255.0 192.168.0.1
ここで切断されるので、再接続(ssh ubuntu@192.168.0.100
)後、以下を実行。
$ sudo connmanctl
connmanctl> config ethernet_9059af5cc6c4_cable --nameservers 8.8.8.8 8.8.4.4
connmanctl> quit
以下で確認。
$ cat /etc/resolv.conf
# Generated by Connection Manager
nameserver 8.8.8.8
nameserver 8.8.4.4
後で dnsmasq 入れるからこの段階では上のでよいけど、このまま Google パブリック DNS で行く&IPv6も使うなら、ネームサーバ指定のコマンドは以下で良いかも。(未検証)
$ sudo connmanctl
connmanctl> config ethernet_9059af5cc6c4_cable --nameservers 8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
connmanctl> quit
デフォルトユーザーの名前変更
デフォルトユーザー&パスワードのままだと、セキュリティ的にどうなの?って思うので、変更。
参考URL https://jyn.jp/raspberrypi-username-change/
(参考というか、ほぼそのままです。)
# 仮のユーザ(tmp)を作成する
sudo useradd -M tmp
# tmpユーザをsudoグループに追加(そうしないとsudoが使えない)
sudo gpasswd -a tmp sudo
# tmpユーザのパスワードを設定
sudo passwd tmp
# ログアウトする
exit
tmpユーザーで再接続後、以下。
# usermod -lでユーザ名をubuntuからoreに変更
sudo usermod -l ore ubuntu
# usermod -dでホームディレクトリを/home/ubuntuから/home/oreに変更
sudo usermod -d /home/ore -m ore
# groupmod -nでubuntuグループをoreグループに変更
sudo groupmod -n ore ubuntu
# ログアウト
exit
newpiユーザーで再接続後、以下。
# 仮ユーザを削除(警告的なのが出るかと思いますが、構わず削除して下さい)
sudo userdel tmp
# oreユーザのパスワードを変更
sudo passwd ore
ソフトウェアアップデート
参考URL https://jyn.jp/raspbian-setup/
$ sudo apt update && sudo apt -y dist-upgrade && sudo apt -y autoremove && sudo apt autoclean
※日本国内のサーバに接続だと、BBB用のパッケージが無い?感じなので、ミラーサーバ設定はしない。
sudoedit エディタ変更
この後、設定ファイルを変更する操作が多いので、自分の使いやすいエディタでsudoeditできるようにする。
nano好きな方は、デフォルトの sudoedit で nano 起動するから、何も変える必要なし。
Emacs派の方は、vim 個所を emacs に読み替えれば、たぶん大丈夫。(未検証)
Vim インストール
$ sudo apt -y install vim
sudoedit エディタを Vim に変更
参考URL https://linuxfan.info/sudoedit
$ sudo update-alternatives --config editor
alternative editor (/usr/bin/editor を提供) には 3 個の選択肢があります。
選択肢 パス 優先度 状態
------------------------------------------------------------
* 0 /bin/nano 40 自動モード
1 /bin/nano 40 手動モード
2 /usr/bin/vim.basic 30 手動モード
3 /usr/bin/vim.tiny 15 手動モード
現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 2
自動更新
参考URL https://jyn.jp/raspbian-setup/
$ sudo apt install -y unattended-upgrades
日本語化
参考URL https://www.atmarkit.co.jp/ait/articles/1806/28/news043.html
# 日本語言語パックのインストール
$ sudo apt -y install language-pack-ja
# ロケールを日本語に設定
$ sudo update-locale LANG=ja_JP.UTF8
# タイムゾーンをJSTに設定
$ sudo dpkg-reconfigure tzdata
# 日本語マニュアルのインストール
$ sudo apt -y install manpages-ja manpages-ja-dev
# 再起動
$ sudo reboot now
時計同期
参考URL https://qiita.com/tukiyo3/items/c847d443a6d977083de9
$ sudoedit /etc/systemd/timesyncd.conf
以下を入力。
[Time]
NTP=ntp.nict.jp
FallbackNTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp
入力後、サービス再起動。
$ sudo systemctl restart systemd-timesyncd
その他ソフトインストール
仕事で使うものとか、念のため入れておく。
dig インストール
$ sudo apt -y install dnsutils
他にも使うものあるだろうけど、思い出したら追加しよう。
(BBB の内臓 eMMC の容量に余裕ないから、たぶん何も足さないけど。)
dnsmasq インストール
既にインストール済みなので、使用可能な状態に設定変更。
SoftAp0 の自動生成を停止
BBBは、USBでPC(macも?)に接続すると、USBにIPアドレスを割り当てる。
この辺の設定が /etc/dnsmasq.d/SoftAp0
にあるけれど、邪魔だから無効化する。
参考URL https://groups.google.com/forum/#!topic/beagleboard/H1rFzlj6rV0
# /etc/dnsmasq.dREADME に書いてあるけど、特定の拡張子だと dnsmasq は無視する。
$ sudo mv /etc/dnsmasq.d/SoftAp0 /etc/dnsmasq.d/SoftAp0.dpkg-dist
# 上だけだと、再起動時に SoftAp0 が再生成されるので、以下ファイルを修正する。
$ vim /opt/scripts/boot/am335x_evm.sh
以下(732行目付近のIF文内)を全てコメント化
wfile="/etc/dnsmasq.d/SoftAp0"
echo "interface=usb0" > ${wfile}
if [ "x${USB1_ENABLE}" = "xenable" ] ; then
echo "interface=usb1" >> ${wfile}
fi
echo "port=53" >> ${wfile}
echo "dhcp-authoritative" >> ${wfile}
echo "domain-needed" >> ${wfile}
echo "bogus-priv" >> ${wfile}
echo "expand-hosts" >> ${wfile}
echo "cache-size=2048" >> ${wfile}
echo "dhcp-range=usb0,${USB0_SUBNET}.1,${USB0_SUBNET}.1,2m" >> ${wfile}
if [ "x${USB1_ENABLE}" = "xenable" ] ; then
echo "dhcp-range=usb1,${USB1_SUBNET}.1,${USB1_SUBNET}.1,2m" >> ${wfile}
fi
echo "listen-address=127.0.0.1" >> ${wfile}
echo "listen-address=${USB0_ADDRESS}" >> ${wfile}
if [ "x${USB1_ENABLE}" = "xenable" ] ; then
echo "listen-address=${USB1_ADDRESS}" >> ${wfile}
fi
echo "dhcp-option=usb0,3" >> ${wfile}
echo "dhcp-option=usb0,6" >> ${wfile}
if [ "x${USB1_ENABLE}" = "xenable" ] ; then
echo "dhcp-option=usb1,3" >> ${wfile}
echo "dhcp-option=usb1,6" >> ${wfile}
fi
echo "dhcp-leasefile=/var/run/dnsmasq.leases" >> ${wfile}
上記変更後、再起動。
$ sudo reboot now
再起動後、自動生成されていないことを確認。
$ ls -l /etc/dnsmasq.d/
合計 8
-rw-r--r-- 1 root root 211 2月 17 2018 README
-rw-r--r-- 1 root root 391 3月 26 20:42 SoftAp0.dpkg-dist
systemd-resolvedのスタブDNS使用を停止
これをやらないと、dnsmasq がDNSサーバとして外部からの問い合わせに応答しないので、設定変更。
参考URL http://moguno.hatenablog.jp/entry/2018/06/17/155921
$ sudoedit /etc/systemd/resolved.conf
以下に変更。
#DNSStubListener=yes
DNSStubListener=no
修正後、サービス再起動。
$ sudo systemctl restart systemd-resolved
hostsファイル作成
dnsmasq 用に hosts ファイルを作成。
$ sudoedit /etc/hosts.dnsmasq
以下を入力。
192.168.0.1 server1
192.168.0.2 server2
192.168.0.3 server3
dnsmasq設定
*.confファイルのみを設定ファイルと定義
$ sudoedit /etc/dnsmasq.conf
最終行の以下を有効化
# Include all files in a directory which end in .conf
conf-dir=/etc/dnsmasq.d/,*.conf
設定ファイル作成
sudoedit /etc/dnsmasq.d/custom.conf
以下を入力。
interface=eth0
domain-needed
bogus-priv
strict-order
no-resolv
no-poll
server=/jitaku.local/192.168.0.99
server=8.8.8.8
server=8.8.4.4
server=2001:4860:4860::8888
server=2001:4860:4860::8844
local=/jitaku.local/
no-hosts
addn-hosts=/etc/hosts.dnsmasq
listen-address=127.0.0.1
listen-address=192.168.0.100
expand-hosts
domain=jitaku.local
cache-size=1024
以前に作ったプライマリDNSのIPアドレスは 192.168.0.99
で、そいつがDHCPサーバも兼ねているから、ローカルの名前解決はそっちに向けてる。
設定確認
$ sudo dnsmasq --test
dnsmasq: syntax check OK.
サービス再起動
$ sudo systemctl restart dnsmasq
ネームサーバ変更
ローカルの名前解決できるように&自分自身のDNS参照するように、設定変更。
$ sudo connmanctl
connmanctl> services
*AO Wired ethernet_d0c5bd5144db_cable
connmanctl> config ethernet_9059af5cc6c4_cable --nameservers 127.0.0.1
connmanctl> quit
ホスト名変更
タイミング的にここじゃない気もするけど、ホスト名の変更。
参考URL https://linuxpropaganda.wordpress.com/2018/10/10/beaglebone-black-rename-server-in-ubuntu-server/
hostname 変更
$ sudoedit /etc/hostname
ホスト名を入力する。
dns2
hosts 変更
$ sudoedit /etc/hosts
ホスト名を入力する。
127.0.0.1 localhost
127.0.0.1 dns2 dns2.jitaku.local
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
再起動。
$ sudo reboot now
最後に
BBB は、青色LED x4 が派手で夜中うるさいから、起動時に消えるように細工。
エディタを開いて
$ sudoesit /etc/rc.local
「LEDを消す」内容を追加して
#!/bin/sh -e
echo none > /sys/class/leds/beaglebone:green:usr0/trigger
echo none > /sys/class/leds/beaglebone:green:usr1/trigger
echo none > /sys/class/leds/beaglebone:green:usr2/trigger
echo none > /sys/class/leds/beaglebone:green:usr3/trigger
exit 0
実行権限付けて再起動!
$ sudo chmod +x /etc/rc.local
$ sudo reboot now
以上で、今回のお話終わり。