自宅サーバーを立てているが、家の中だと192.168.*、外出先だとtailscaleを使ってtailscaleのIPになる。immichのアプリだとssidで判定して切り替えてくれるが、ssidは一つしか登録できないので、2.5GHzと5GHzでssid変わると機能しない。他にもsshとかブラウザのブックマークは全部2通り登録して切り替えないといけないのでめんどくさい。なんとかならないかと思って試行錯誤。
とりあえず家の中のwifiに繋がっている間は自宅サーバーのDNSを見に行って、その他は5Gかtailscale dnsを見に行ってくれればいいので、ルーターが配信するDNSを自宅サーバーで動かすDNSに切り替えてみることにした。
やったこと
自宅サーバーであるraspberrypiにdnsmasqを入れる
apt install dnsmasq
systemctl start dnsmasq
systemd/resolvdとやらがdnsを使っているのでエラーになる。いらないのでdns機能を停止。
vi /etc/systemd/resolvd.conf.d/98-disabledns.conf
[Resolve]
DNSStubListener=no
vi /etc/dnsmasq.d/dns.conf
no-resolv
# サーバのホスト名とローカルIPを設定
address=/tailscaleと同じホスト名/192.168.11.50
# ルータのIP (親DNSになる)
server=192.168.11.1
# 念の為のgoogledns
server=8.8.8.8
動かしてみる
systemctl start dnsmasq
systemctl enable dnsmasq
digとかnslookupで確認し、ルータのDHCP設定のDNSをこのサーバのIPにする
結果
PCではこれでうまく行った。自宅内ならtailscaleに繋いでても繋いでなくても192.168.11.50に行く。
スマホで5Gにしてtailscaleに繋げばtailscale dnsでつながる。
ただし、PCではうまく行くのにスマホ(android)の場合だけ自宅内のdnsがうまく行かなかった。どうやらプライベートDNSとやらのせいのようだ。
androidの場合、wifiに繋いでdnsを使う際にプライベートDNSを有効にしてあるとルータから指定されたDNSではなく勝手に独自のDNSを見に行くようになっているようだ。このせいでせっかく立てたDNSサーバーが意味をなさなくなる。
プライベートDNSとして DNS over TLSが使えなかったら普通のDNSになるという話を見てtcp853をブロックしたりしてみたが、どうも思った動きをしていない。アプリによってはやっぱり自宅内DNSを見に行かないようだ。プライベートDNSを無効にすると思った通りの動作となる。
ブロックされたらOS?としてのプライベートDNSは無効になるけど、webviewとかはプライベートDNS有効の設定が生きていて DNS over SSLとかで引いてきてしまうとかかもしれないが、SSLは流石にブロックできない。どうにもこうにもうまく行かないので諦めた。プライベートDNSを無効にすれば思った通り動作するが、偽サイトに誘導されそうでやっぱりちょっと怖い。全部2通りのアドレスをブックマークするかしかないのか。
というか特定のwifiではプライベートDNS無効にするとかできてもいいと思うんだけど。ネットを漁った感じでは5年以上進歩しないようなので期待薄な感じ。
0 件のコメント:
コメントを投稿