現象
同じネットワーク内の他のパソコンはインターネットに接続できるのに、Ubuntuでインターネットに接続できない場合は、名前解決に失敗している可能性があります。
確認する方法はいくつかあります。
名前の解決に失敗している場合は、このようなエラーが発生します。
◆Webサイトに接続できない
$ curl -sS https://www.google.co.jp
curl: (6) Could not resolve host: www.google.co.jp
◆pingが届かない
$ ping www.google.co.jp
ping: www.google.co.jp: 名前またはサービスが不明です
◆名前解決ができない
$ nslookup www.google.co.jp
Server: 127.0.0.53
Address: 127.0.0.53#53
** server can't find www.google.co.jp: SERVFAIL
原因
基礎知識をざっくり説明(IPアドレス/ホスト名)
DNS(Domain Name System)は、ネットワーク上でコンピュータの名前を解決するためのシステムです。
ネットワークに接続するコンピュータは、IPアドレスというユニークな番号で識別します。例えば、192.168.1.10と言った3桁の数字が4セットつながったものです(IPv4)。
簡単に言ってしまうと、人間様は数字の羅列を覚えるのが苦手なので、名前付けて呼ぶからそっちでうまくやってくれや、ということでそこをうまくやってくれるのがDNSなんだ。よく「名前解決」って言っているよ。
人間の世界で例えるならば、人がコンピュータで、携帯電話番号がIPアドレスに当たります。つまりDNSが電話帳です。
接続できない原因
DNSサーバがどこにあるのかセットできていないと、名前解決ができなくなります。先の例えで言うならば、電話帳がどこにあるのかわからない状態で、だれだれに電話してと言われても電話かけられないですよね。それと同じことが起きています。
解決方法
DNSサーバのIPアドレスをセットする
resolved.confファイルを編集する
DNSサーバのIP指定場所はこのファイルです。
/etc/systemd/resolved.conf
設定ファイルは編集する前にバックアップを取ってね。
$ sudo vi /etc/systemd/resolved.conf
ファイルをエディタで開くとDNS=という部分があると思います。ちなみにこれは指定していないので、名前解決ができない状態です。
[Resolve]
#DNS=
DNSサーバのIPを指定
DNSサーバに所属するネットワーク内のDNSサーバのIPアドレスをセットします。よくわからないという場合は、下のようにGoogleのパブリックDNS(8.8.8.8)を指定して、ファイルを保存します。
[Resolve]
DNS=8.8.8.8
サービスを再起動して、設定を有効にする
サービスを再起動します。
$ sudo systemctl restart systemd-resolved
確認方法
名前が解決できるか確認してみましょう。
この例では、www.google.co.jpという名前のIPが確認できました。
nslookupコマンドでIPアドレスが表示されれば、指定したDNSサーバを使って名前解決ができています。
$ nslookup www.google.co.jp
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: www.google.co.jp
Address: 172.217.31.163 ← DNSによってIPが判明
Name: www.google.co.jp
Address: 2404:6800:4004:80c::2003
お疲れさまでした。
コメント