dig コマンドでプロトコルを指定する。
dig コマンドは UDP/53以外にもTCP / TLS(DoT) / HTTPS (DoH ) を指定できる。
dig g.co @dns.google +https dig gco @dns.google +tls dig g.co @dns.google +tcp
それぞれ、プロトコルを+オプションで付与してあげると通信ができて便利。
TCPの例
TCP で通信する例である。
; <<>> DiG 9.18.11 <<>> g.co @dns.google +tcp ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31758 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;g.co. IN A ;; ANSWER SECTION: g.co. 300 IN A 142.250.207.110 ;; Query time: 49 msec ;; SERVER: 8.8.8.8#53(dns.google) (TCP) ;; WHEN: Fri Jun 23 02:50:41 JST 2023 ;; MSG SIZE rcvd: 49
DoTで通信する例である
; <<>> DiG 9.18.11 <<>> g.co @dns.google +tls ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40964 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;g.co. IN A ;; ANSWER SECTION: g.co. 300 IN A 142.250.207.110 ;; Query time: 69 msec ;; SERVER: 8.8.4.4#853(dns.google) (TLS) ;; WHEN: Fri Jun 23 02:52:22 JST 2023 ;; MSG SIZE rcvd: 49
HTTPS(DoH)の場合
httpsでは、GETとPost(DoH)とプレーンがある。
$ dig g.co @192.168.2.2 +https $ dig g.co @192.168.2.2 +https-get
実行例
$ dig g.co +https-get @192.168.2.2 ; <<>> DiG 9.20.15 <<>> g.co +https-get @192.168.2.2 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62431 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;g.co. IN A ;; ANSWER SECTION: g.co. 534 IN A 142.250.207.110 ;; Query time: 9 msec ;; SERVER: 192.168.2.2#443(192.168.2.2) (HTTPS-GET) ;; WHEN: Sun Dec 14 04:51:10 JST 2025 ;; MSG SIZE rcvd: 49
あと重ねがけで、TLSとつかえるっぽいけど、これはどういう問い合わせなんだろうか
dig g.co +tls +http-plain @192.168.2.2
たんなるTLSなのかな?
DoQ について
DoTとDoQは次のような関係になっている。
なので、TCPとUDPの違いがあり、同時にリッスンが可能。ポートを分ける必要はない。 dig ( dnsutils-dige )では、現在(2025-12-14) で DoQをサポートをしておらず、実験には kdig を使う ( kdig を使うと dig と同じ使い方でわかりやすい。
takuya@:~$ kdig @192.168.2.2 +quic g.co ;; QUIC session (QUICv1)-(TLS1.3)-(ECDHE-X25519)-(RSA-PSS-RSAE-SHA256)-(AES-128-GCM) ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 0 ;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1 ;; EDNS PSEUDOSECTION: ;; Version: 0; flags: ; UDP size: 4096 B; ext-rcode: NOERROR ;; QUESTION SECTION: ;; g.co. IN A ;; ANSWER SECTION: g.co. 420 IN A 142.250.206.238 ;; Received 49 B ;; Time 2025-12-14 05:08:49 JST ;; From 192.168.2.2@853(UDP) in 28.3 ms
DoQも使えることがわかる。
ちょっと便利。
dot で通信(853)とかで疎通がするのがわかるのがちょっと楽しい。
2025-12-14 追記
- https と http に付いて追記
- DoQ に付いて追記