こんにちは、Shimaco(@shimacotrip)です。
Windows10でWSL2使っていたら、DNSエラーでどうにもこうにもならなくなってダウングレードしたら解決した話。
でも、後日(再起動後)にDockerにIPアドレスを奪われてDNS解決できなくなってジタバタした末に解決した記録をまとめていきます。
お役に立てれば幸いです。
VSCode+WSL開発環境つくり
仕事でAzure FunctionsでAPIを開発することが多いのですが、Pythonのときはホスティング環境はLinuxのみ。
(2年前くらいはWindowsでもホスティングできたんですけどね。)
そんな訳で、ローカルPC(Windows10)上のVSCodeでFunctionsを開発
→Azure Functionsにデプロイしたときに不整合とか生じないかな?と内心ドキドキしながら開発していました。
そんな私に朗報。自分のPCのVSCodeから自分のPCのWSLにリモート接続することで(リモートとは言うものの、自分のローカルPCのWSLに接続します。)
Window10のPC上でも快適にLinux環境で開発することができちゃいます。
構築に際してはこちらの記事が参考になりました。
まずはMicrosoft Storeから欲しいディストリビューションをインストールします。
私の場合はUbuntu20.04。
Pythonの環境構築(Pyenv等)はこちらの記事を参考に進めました。
また、私の会社ではプロキシによって色々阻まれますので、ありとあらゆるプロキシを設定しました。
そうして、無事環境構築ができました。
WSL2に上げてみる
確認するとWSL1でしたが、WSL2環境での記事が多いためWSL2の方が知見が貯まっているかな?と思い、上げておこうかなくらいの気持ちで上げてみました。
すると、タイミングは覚えていないが、下記の記事のようにapt-get updateしてもhostへ接続できないエラーが出現する。
$apt-get update
Err:1 http://archive.ubuntu.com/ubuntu focal InRelease
Temporary failure resolving ‘archive.ubuntu.com’
Err:2 http://security.ubuntu.com/ubuntu focal-security InRelease
Temporary failure resolving ‘security.ubuntu.com’
Err:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease
Temporary failure resolving ‘archive.ubuntu.com’
Err:4 http://archive.ubuntu.com/ubuntu focal-backports InRelease
Temporary failure resolving ‘archive.ubuntu.com’
Reading package lists… Done
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal/InRelease Temporary failure resolving ‘[会社のプロキシ]’
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease Temporary failure resolving ‘[会社のプロキシ]’
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal-backports/InRelease Temporary failure resolving ‘[会社のプロキシ]’
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease Temporary failure resolving ‘[会社のプロキシ]’
W: Some index files failed to download. They have been ignored, or old ones used instead.
エラーメッセージを調べると、この記事の方はザックリ以下の方法で解決していた。
- /etc/wsl.confに以下を記述して、resolve.confが自動書き換えされないようにする。
[network]
generateResolvConf = false - /etc/resolve.conf にGoogleのDNSサーバーを記述する。
nameserver 8.8.8.8
私も真似してみたが解決できませんでした。
※ちなみにこの状況だとping google.comは当たり前だが通る。
よく見てみると、そもそも会社のプロキシを解決できていない模様。ここでピンとくれば良かったのだが、その時は気付かなかった。
DNSも色々見て分からなかったのだが、そんなときこちらの記事に出会った。
WS1にダウングレードで解決しただと?
この時点で色々試してうまくいかなくてあらゆることに懐疑心を抱いていたが、対処法3で紹介されている「WS1にダウングレード」することで解決しました。
なんと。数時間溶かしたのに、いつも問題が解決するときは一瞬なのである。
しかし、DockerにIPアドレスを奪われる?
後日談。
再度、apt installができなくなった。勘弁して。
ping ホスト名では解決しないが、ping IPアドレス直打ちでは返ってくるため、どうやらホスト名が解決できなくなってしまったようです。
そして、この対応にも数時間溶かした。
この記事によると、
- WSLの/etc/resolv.conf のnameseverにIPv4 アドレスを記述
- Dockerを起動すると、↑で記述したIPv4 アドレスがDockerに奪われて名前解決できなくなる。
とのこと。私のPCもDocker動いているからそれっぽい!と思い、ipconfigコマンドで確認したIPv4 アドレスを
/etc/resolv.conf に記述する。
※ネットワークインターフェイスが複数あると思いますが、WSLのネットワークワークインターフェイスのIPv4を記述します(当たり前ですが、そうしないと解決しません)。
nameserver IPv4 アドレス
そして、apt installすると・・・できた!!!
今思えば、WSLにダウングレードする前にipconfigでIPアドレスを調べていたら、もしかしたら同じ原因できっとDockerにIPアドレスを奪われていたのではないかと思う。
今となっては確認する手段もないし、想像するしかないけど。
数時間溶かしたが、DNSのしくみを結構理解できた気がするので、よい勉強になったと思いたいです。
以上、ご参考になれば幸いです。