LoginSignup
3
1

More than 1 year has passed since last update.

tailscale + corednsで名前解決できるプライベートなネットワーク

Posted at

diagram.png

問題

  1. 公開したくないサーバーがある
  2. ユーザー数は複数いる
  3. ユーザーはプログラマーではない(操作は簡単でないとだめ)
  4. サブドメインを使いたいのでtailscaleのmagicDNSでは不十分

解決

  1. tailscaleでプライベートなネットワークを作る
  2. tailscale内で機能するDNSを動かす
  3. ユーザーはプライベート内のサーバーにtest.domain.devみたいな感じでアクセスできる

coredns

dockerでサクッとDNSを動かしたかったのでこれを使った。

docker-compose.yml(参考)
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'

./configCorefileを入れて設定。

参考

tailscale

これは説明通りにインストールすれば大抵どの端末でも使用可能。
あとはDNS->NameserversにcorednsのホストIPを入れる。

Tailscale.png

困ったところ

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.confThis file is managed by man:systemd-resolved(8). Do not edit.とあり、ルーターからのDNSを引っ張って来て尚且優先順位がそっちのほうが上...となっていた。

/etc/resolv.conf
# こういう感じ
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)

/etc/resolv.conf(macなど)
# 素直にtailsacleの設定と同じ
nameserver 102.3.4.5
nameserver 8.8.8.8
nameserver 8.8.4.4
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1