問題
- 公開したくないサーバーがある
- ユーザー数は複数いる
- ユーザーはプログラマーではない(操作は簡単でないとだめ)
- サブドメインを使いたいのでtailscaleのmagicDNSでは不十分
解決
- tailscaleでプライベートなネットワークを作る
- tailscale内で機能するDNSを動かす
- ユーザーはプライベート内のサーバーに
test.domain.dev
みたいな感じでアクセスできる
coredns
dockerでサクッとDNSを動かしたかったのでこれを使った。
version: '3.1'
services:
coredns:
build: .
container_name: coredns
restart: on-failure
expose:
- '53'
- '53/udp'
ports:
- '53:53'
- '53:53/udp'
volumes:
- './config:/etc/coredns'
./config
にCorefile
を入れて設定。
参考
tailscale
これは説明通りにインストールすれば大抵どの端末でも使用可能。
あとはDNS->NameserversにcorednsのホストIPを入れる。
困ったところ
corednsを動かしてるホストはUbuntu 20.04.2 LTSでsystemd-resolved
というのが127.0.0.53でDNSの53番ポートでLISTENしていた。
この辺りに全然詳しくないが、これを読むと歴史的な背景から/etc/resolv.conf
があらゆるプログラムから書き込まれる可能性があり、これの全体の調和を取るためにsystemd-resolved
というデーモンが管理している様子。
これがあると自前のDNSを動かすには...?と訳がわからない事になりそうだったので、53版ポート使われないように設定した。
これであとはtailscale側でnameserversにDNSのIPを入れればいいだけかと思ったが、どうもubuntuではまだ/etc/resolv.conf
がThis file is managed by man:systemd-resolved(8). Do not edit.
とあり、ルーターからのDNSを引っ張って来て尚且優先順位がそっちのほうが上...となっていた。
# こういう感じ
nameserver 192.168.0.1
nameserver 240b:353:fe7b:cd00:ae9e:12ff:30a0:2b40
# Too many DNS servers configured, the following entries may be ignored.
nameserver 102.3.4.5 # <- これがcoredns
nameserver 8.8.8.8
nameserver 8.8.4.4
仕方がないので/etc/systemd/resolved.conf
のDNSを127.0.0.1
にして自分をまずは参照するようにした。
(MacやRaspberry Piだと素直にtailscaleのnameservers = /etc/resolv.conf)
# 素直にtailsacleの設定と同じ
nameserver 102.3.4.5
nameserver 8.8.8.8
nameserver 8.8.4.4