はじめに
先日、自宅のWiFi環境が使えずに困っていましたが、結論としてWiFiルーターが持つDNS機能の不具合が原因でした。自宅のネットワークにおいてどこで名前解決しているかは確認しておいた方がよいと思うので調査方法等をメモしておきます。
事象
自宅のWiFiでインターネットが接続できなくなる。
Androidスマホで見ると電波マークは立っているものの「インターネット」に接続できない旨が表示されている。確かにネットサーフィンもYouTubeも見れない。
原因と解決策
WiFiルータが備えているDNS機能の不具合。
WiFiルータの再起動で復活。
以下、調査メモとnslookupコマンドによるDNSサーバの変更方法の解説です。
調査メモ
Cygwinを起動(コマンドプロンプトでも可能)しました。
まずは本当にインターネットに出ることができないのか、Googleが提供しているDNSサーバとの疎通を確認します。
$ tracert 8.8.8.8 8.8.8.8 へのルートをトレースしています。経由するホップ数は最大 30 です 1 1 ms 1 ms 2 ms aterm.me [192.168.10.1] 2 6 ms 6 ms 6 ms 61.211.191.XXX 3 8 ms 6 ms 6 ms 61.211.191.XXX 4 7 ms * 6 ms 61.211.191.XXX 5 9 ms 12 ms 7 ms 61.211.190.XXX 6 9 ms 8 ms 8 ms 219.124.151.XXX 7 * * * 要求がタイムアウトしました。 8 6 ms 7 ms 6 ms 8.8.8.8
ここで疎通しているので、少なくとも上記経路を通ったインターネット接続は問題ないことが分かります。
次にドメインを解決できるかの確認です。
$ tracert yahoo.co.jp ターゲット システム名 yahoo.co.jp を解決できません。
インターネットが通じない問題はドメイン名解決ができないことが原因という確度がかなり高いことが分かります。今回利用したスマホはインターネットへの接続チェックに名前解決のフローも含んでいるんでしょうね。
念のため
グローバルIPアドレスをスマホで確認して該当のIPに対してwgetコマンドを押下します。
$ wget -O - 183.79.135.206 2>/dev/null | more --2019-XX-XX XX:XX:XX-- http://183.79.135.206/ 183.79.135.206:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK ... <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> ....
やはりドメイン名を使わなければyahoo.co.jpにもアクセスは可能です。
ここで改めてDNSサーバがどのようになっているかをAndroid端末で確認しました。
意識したことはなかったですが、WifiルータがDNSを兼ねていました。
よってWiFiルータの電源落とし上げ及び線の抜き差しを行うと無事にWifi環境が復活しました。
無事に、名前解決ができていることが分かります。
$ ping yahoo.co.jp PING yahoo.co.jp (183.79.135.206): 56 data bytes 64 bytes from 183.79.135.206: icmp_seq=0 ttl=52 time=19 ms 64 bytes from 183.79.135.206: icmp_seq=1 ttl=52 time=23 ms ...
nslookupで情報確認/変更
nslookupコマンドでDNS周りを確認できます。
$ nslookup > www.yahoo.co.jp Server: 192.168.10.1 Address: 192.168.10.1#53 Non-authoritative answer: www.yahoo.co.jp canonical name = edge12.g.yimg.jp. Name: edge12.g.yimg.jp Address: 183.79.250.123
「server IPアドレス」という構文にてDNSを変更できるのでGoogleのものに変更しておきました。
> server 8.8.8.8 Default server: 8.8.8.8 Address: 8.8.8.8#53 > www.yahoo.co.jp Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: www.yahoo.co.jp canonical name = edge12.g.yimg.jp. Name: edge12.g.yimg.jp Address: 183.79.250.251
これで少なくともパソコンとスマホでDNSが異なるので障害切り分けができそうです。
終わりに
今回は再起動で復旧しましたが、インターネットが使えない時は自宅の話なのか回線側の話なのかの切り分けは重要なので、ぜひこのあたりのコマンド周りは覚えておくとよいと思います。
以上、ご参考になれば幸いです。