karubabuの日記

タイトルに解決と書いているものがあるけれど、別に付いていない物は解決していないというわけではないです。つまるところ記事を書いた後に解決してちょっと嬉しかったので付けました。

DNS over Torする

やってみたかっただけDNSネタまたやった
公式がめちゃ丁寧に解説してくれるので特に困らず設定が出来てえらい
折角なので残しておくけれど本当に公式を読めばよいだけになっています
とは言っても本当に出来ているのか不安になる不死はあるので、出来てないやん!みたいなやつはおしえて…
特にDNS over HTTPS over Tor with dnsmasqあたりは本当に不安になっています

よくよむ

Introducing DNS Resolver for Tor
DNS over Tor - Cloudflare Resolver

とくによむ

DNS over Tor · pi-hole/pi-hole Wiki · GitHub

ここすき

Your personal anonymity, however, is not the only reason why you should use this service. The power of Tor in ensuring everyone’s anonymity rests on the number of people who use it. If only whistleblowers, for instance, were to use the Tor network, then anyone connecting to the Tor network would automatically be suspected of being a whistleblower. Therefore the more people use Tor to browse memes or to watch cat videos on the Internet, the easier it will be for those who truly need anonymity to blend in with the traffic.

DNS over Torする

公式の通りにやれば問題なく出来た

/etc/resolve.conf

nameserver 127.0.0.1

そして以下のコマンドを実行する
私の環境だと全ての解決がUDPらしく(よく分かっていない)、UDP分のsocatだけ実行すれば使えた
socat UDP4-LISTEN:53,reuseaddr,fork SOCKS4A:127.0.0.1:dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion:253,socksport=9050
wiresharkで見ていると127.0.0.1間でTCPな通信が飛びまくっているし中を見るとそれっぽい文字列もあった

DNS over Tor しつつdnsmasqも使う

dnsmasqないと大儀すぎてこわくなってくる
/etc/dnsmasq.conf

no-resolv
server=127.0.0.1#5353
listen-address=127.0.0.1

dnsmasqを起動した後に
socat UDP4-LISTEN:5353,reuseaddr,fork SOCKS4A:127.0.0.1:dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion:253,socksport=9050
を実行しておくと出来た

DNS over HTTPS をTorへ通しつつdnsmasqも使う

これってDNS over HTTPS over Torでよいものなの 英語わからんね

DNS over HTTPSのclientには GitHub - m13253/dns-over-https: High performance DNS over HTTPS client & serverを使っています
dnsmasq側の設定は上記の物を変えなくとも問題なかった
dns-over-httpsは、upstream_googleとupstream_ietfの二つを下記の物以外全て取り除いておき、更にdnsmasqの設定との兼ね合いを見て使うportを決める
bootstrapの部分はなんか無視してよさそう
Timeoutは弄ってあるけれど別に初期設定の30でもなんら変わりはなかったのでそのままで良さ気だった
/etc/dns-over-https/doh-client.conf

# DNS listen port
listen = [
    "127.0.0.1:5353",
]
upstream_google = [
    "https://dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion/dns-query",
]
upstream_ietf = [
]

bootstrap = [
    #"8.8.8.8:53",
    #"8.8.4.4:53",
    "1.1.1.1:53",
    "1.0.0.1:53",

]
timeout = 30000
no_cookies = false
no_ecs = false
verbose = true

これら二つを立ち上げてから
\# PORT=443; socat TCP4-LISTEN:${PORT},reuseaddr,fork SOCKS4A:127.0.0.1:dns4torpnlfs2ifuz2s2yf3fc7rdmsbhm6rw75euj35pac6ap25zgqad.onion:${PORT},socksport=9050
すれぼよしなにTor越しに解決してくれるようになる
wiresharkを見た感じだとそれっぽくなっている様には見えるので、多分いけているでしょう!

不安なこと

digを叩いた時に出るquery timeが、DNS over HTTPSを噛ました時の方が噛まさない時に比べめちゃ短いこと
くっそ雑で大して調べていないけれども、 ☝️がover HTTPSでdigを叩いた時に出る値
👇がそうでない場合の値

dig hontodayo.net                                                                            

; <<>> DiG 9.12.1 <<>> hontodayo.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32676
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;hontodayo.net.         IN  A

;; ANSWER SECTION:
hontodayo.net.      3600    IN  A   157.7.201.105

;; Query time: 999 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 20 04:56:48 JST 2018
;; MSG SIZE  rcvd: 58
dig hontodayo.net                                                                            

; <<>> DiG 9.12.1 <<>> hontodayo.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64671
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
;; QUESTION SECTION:
;hontodayo.net.         IN  A

;; ANSWER SECTION:
hontodayo.net.      3600    IN  A   157.7.201.105

;; Query time: 2141 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 20 05:01:26 JST 2018
;; MSG SIZE  rcvd: 58

over HTTPSで1000msを超えるのは本当に稀で、500ms台すらザラに出るのでどうしてここまで差が出るのか気になっています…
HTTPSを噛ませる方が遅いイメージがあったので,そもそもover Tor出来ていないのでは…?
の様な不安まである不死あるよ

おわりに

問題なく出来ているのなら、DNS over HTTPS over Torは速度も許容範囲内だし特に気にせず使えるレベルになっていると感じています
後はdns-over-httpsの起動にあわせてsocatを起動するserviceファイルを作れば完璧そう