前回wsl2上のdockerにプロキシサーバーを立てたのですが、昨日Windows Updateをしたらプロキシが動かなくなってしまいました。
調査
ホスト
念のためホストの状況を確認してみます。
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ curl -X GET -I -x localhost:8118 https://www.google.co.jp HTTP/1.1 404 No such domain Content-Length: 6589 Content-Type: text/html Cache-Control: no-cache Date: Fri, 14 Jan 2022 07:00:44 GMT Last-Modified: Wed, 08 Jun 1955 12:00:00 GMT Expires: Sat, 17 Jun 2000 12:00:00 GMT Pragma: no-cache Connection: close
404になってますね。
コンテナのログ
抜粋版です。
2022-01-14 06:58:46.630 7fdb3902c180 Info: Privoxy version 3.0.28, 2022-01-14 06:58:46.630 7fdb3902c180 Info: Program name: /usr/sbin/privoxy, 2022-01-14 06:58:46.631 7fdb3902c180 Info: Loading filter file: /etc/privoxy/default.filter, 2022-01-14 06:58:46.632 7fdb3902c180 Info: Loading filter file: /etc/privoxy/user.filter, 2022-01-14 06:58:46.632 7fdb3902c180 Info: Loading actions file: /etc/privoxy/match-all.action, 2022-01-14 06:58:46.632 7fdb3902c180 Info: Loading actions file: /etc/privoxy/default.action, 2022-01-14 06:58:46.634 7fdb3902c180 Info: Loading actions file: /etc/privoxy/easylistgermany.script.action, 2022-01-14 06:58:46.637 7fdb3902c180 Error: Missing content filter 'easylistgermany', 2022-01-14 06:58:46.637 7fdb3902c180 Error: Invalid action section in file '/etc/privoxy/easylistgermany.script.action', starting at line 1300: { +filter{easylistgermany} }, 2022-01-14 06:58:46.637 7fdb3902c180 Info: Loading actions file: /etc/privoxy/user.action, 2022-01-14 06:58:46.637 7fdb3902c180 Info: Listening on port 8118 on IP address 0.0.0.0, 2022-01-14 06:58:54.000 7fdb3902a700 Request: www.google.co.jp:443/, 2022-01-14 06:59:00.266 7fdb3902a700 Info: Can not resolve www.google.co.jp: Temporary failure in name resolution, 2022-01-14 06:59:00.267 7fdb3902a700 Crunch: DNS failure: www.google.co.jp:443, 172.17.0.1 - - [14/Jan/2022:06:59:00 +0000] "CONNECT www.google.co.jp:443 HTTP/1.1" 404 6589, 2022-01-14 06:59:14.543 7fdb3902a700 Request: www.google.co.jp:443/, 2022-01-14 06:59:20.746 7fdb3902a700 Info: Can not resolve www.google.co.jp: Temporary failure in name resolution, 2022-01-14 06:59:20.747 7fdb3902a700 Crunch: DNS failure: www.google.co.jp:443, 172.17.0.1 - - [14/Jan/2022:06:59:20 +0000] "CONNECT www.google.co.jp:443 HTTP/1.1" 404 6589, 2022-01-14 07:00:37.824 7fdb3902a700 Request: www.google.co.jp:443/, 2022-01-14 07:00:44.026 7fdb3902a700 Info: Can not resolve www.google.co.jp: Temporary failure in name resolution, 2022-01-14 07:00:44.027 7fdb3902a700 Crunch: DNS failure: www.google.co.jp:443, 172.17.0.1 - - [14/Jan/2022:07:00:44 +0000] "CONNECT www.google.co.jp:443 HTTP/1.1" 404 6589
curlのヘッダでもわかりますが、privoxyのログを見るとDNSが失敗しているようです。
名前引き
でもdig引けるし、何なんだ…
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ dig www.google.co.jp ; <<>> DiG 9.16.1-Ubuntu <<>> www.google.co.jp ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42409 ;; flags: qr rd ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;www.google.co.jp. IN A ;; ANSWER SECTION: www.google.co.jp. 0 IN A 172.217.161.67 ;; Query time: 20 msec ;; SERVER: 172.17.192.1#53(172.17.192.1) ;; WHEN: Fri Jan 14 16:09:15 JST 2022 ;; MSG SIZE rcvd: 66
Windows Updateが問題か?と調べてみるとwslのresolverが悪さする事例があるようです。
WSL2 DNS stops working · Issue #4285 · microsoft/WSL · GitHubgithub.com
確かにtcpの方だと失敗していますね。
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ dig www.google.co.jp +tcp ;; Connection to 172.17.192.1#53(172.17.192.1) for www.google.co.jp failed: timed out. ;; Connection to 172.17.192.1#53(172.17.192.1) for www.google.co.jp failed: timed out. ; <<>> DiG 9.16.1-Ubuntu <<>> www.google.co.jp +tcp ;; global options: +cmd ;; connection timed out; no servers could be reached ;; Connection to 172.17.192.1#53(172.17.192.1) for www.google.co.jp failed: timed out.
ほかのDNSサーバだとOKです。
原因はwslのresolverで確定ですね。
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ dig www.google.co.jp +tcp @1.1.1.1 ; <<>> DiG 9.16.1-Ubuntu <<>> www.google.co.jp +tcp @1.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11504 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;www.google.co.jp. IN A ;; ANSWER SECTION: www.google.co.jp. 234 IN A 142.250.207.35 ;; Query time: 20 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Fri Jan 14 16:21:09 JST 2022 ;; MSG SIZE rcvd: 61
修正
wslのresolv.confを書き換えれば解決するようですが、これはシステムで自動で作られるファイルの様です。
なのでissueの手順に沿って書き換えます。
wsl.confを作成
これでresolv.confがシステムから上書きされなくなります。
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ cat /etc/wsl.conf [network] generateResolvConf = false
ホスト停止、再起動
いったん再起動しないといけない様です。
PS C:\Users\masashi> wsl --list --running Linux 用 Windows サブシステム ディストリビューション: Ubuntu (既定) PS C:\Users\masashi> wsl --shutdown
手順は割愛しますが再起動完了。
resolv.conf修正
wslではresolv.confはシンボリックリンクが張られているので外して上書きします。
私はプロバイダのDNSサーバを書いてます。
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ sudo ls -l /etc/resolv.conf lrwxrwxrwx 1 root root 29 Oct 2 13:39 /etc/resolv.conf -> ../run/resolvconf/resolv.conf masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ sudo unlink /etc/resolv.conf masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ sudo ls -l /etc/resolv.conf ls: cannot access '/etc/resolv.conf': No such file or directory masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ sudo vim /etc/resolv.conf
名前引き(tcp)
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ dig -q www.google.co.jp +tcp ; <<>> DiG 9.16.1-Ubuntu <<>> -q www.google.co.jp +tcp ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20808 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.google.co.jp. IN A ;; ANSWER SECTION: www.google.co.jp. 22 IN A 142.250.196.131 ;; Query time: 10 msec ;; SERVER: (略) ;; WHEN: Fri Jan 14 16:30:52 JST 2022 ;; MSG SIZE rcvd: 61
OK。
引けるようになりましたので多分大丈夫でしょう。
コンテナ起動
コンテナ起動します。
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ sudo docker run -d -p 8118:8118 privoxy dccc24b68092c11a48e268cbc7cf16af690afc7122355435ad151f7d1d724c20
再度プロキシの疎通。
masashi@DESKTOP-HBP3520:/mnt/c/Users/masashi$ curl -X GET -I -x localhost:8118 https://www.google.co.jp HTTP/1.1 200 Connection established HTTP/2 200 (略)
OKですね。
これで直りました。
ブラウザからもOKになりました。
まとめ
作った矢先に疎通できなくなったのでwslやコンテナの起動方法、Windows Updateなど被疑箇所がたくさんありましたが、ログから調査したら割と早く解決できました。
issueはudpも通らないケースもありましたが、私はtcpのみNGだったのでresolv.confに辿り着くまで少しかかりました。
最近は便利な機能がたくさんありますが、レイヤが増える分切り分け方法を確立しておかないといけませんね。
見つけてくれる先人たちに感謝です。(自分もそうなりたい)