ドメイン名前解決
関連記事
DNS リゾルバの設定ファイルが /etc/resolv.conf
です。resolv.conf(5) man ページより:
- resolver は、インターネットのドメインネームシステム (DNS) へのアクセスを提供する C ライブラリのルーチン群である。 レゾルバ設定ファイルには、レゾルバルーチンがプロセスによって最初に 起動されたときに読み込まれる情報が格納されている。 このファイルは人間に可読なように設計されている。 キーワードと値のリストが含まれ、いろいろなタイプのレゾルバ情報を提供する。
- このファイルが存在しない場合、問い合わせはローカルマシン上の ネームサーバに対してのみ行われる。ドメイン名はホスト名から決定され、 ドメインの検索パスはドメイン名から作成される。
目次
Linux における DNS
(通常は) あなたの使っている ISP が DNS サーバーを提供しており、キャッシュサーバーを持っている場合はルーターに DNS サーバーを追加することができます。DNS サーバーの切り替えは Windows のユーザーにとっては問題になりません、なぜなら DNS サーバーが遅かったり動作していなかったりする場合、すぐに他のサーバーに切り替えられるからです。しかしながら、通常 Linux はタイムアウトに多くの時間をかけるので、遅延が発生する原因となりえます。
変更を加える前に drill (ldns パッケージに入っています) を使ってください。下のセクションで調整を行ったらクエリ時間を比較するためにもう一度実行してください:
$ drill www5.yahoo.com
また、ネームサーバを指定することもできます:
$ drill @ip.of.name.server www5.yahoo.com
代替 DNS サーバー
他の DNS サーバーを使うには、/etc/resolv.conf
を編集して、一番最初に使われるようにファイルの一番上にサーバーを追加してください。任意で、記載されているサーバーを削除したりコメントアウトすることもできます。
OpenDNS
OpenDNS はフリーの代替ネームサーバを提供しています:
# OpenDNS nameservers nameserver 208.67.222.222 nameserver 208.67.220.220
IPv6 サーバーも利用可能です:
nameserver 2620:0:ccc::2 nameserver 2620:0:ccd::2
Google の問題を修正する
OpenDNS は全てのクエリを最初に自身のサーバーに通してルーティングすることで Google の検索をハイジャックします。これによって Google の検索が明らかに遅くなったり、Google の FeelingLucky 機能が使えなくなったりすることがあります。後者の場合、元の挙動に戻す Firefox アドオンが存在します。もっとも賢い解決方法は Google へのクエリを全て ISP の DNS サーバーにリダイレクトすることです。これは dnsmasq を使うことで可能です。
Google のネームサーバを代わりに使うこともできます:
# Google nameservers nameserver 8.8.8.8 nameserver 8.8.4.4
IPv6 サーバーも利用可能です:
nameserver 2001:4860:4860::8888 nameserver 2001:4860:4860::8844
Comodo
Comodo も IPv4 のセットを提供しており、任意で(無料ではありませんが)ウェブフィルタリングもできます。つまりこの機能は OpenDNS がやっているようにクエリをハイジャックすることを意味しています。
# Comodo nameservers nameserver 8.26.56.26 nameserver 8.20.247.20
Yandex
Yandex.DNS には3つの選択肢があります:
# Basic Yandex.DNS - Quick and reliable DNS nameserver 77.88.8.8 # Preferred IPv4 DNS nameserver 77.88.8.1 # Alternate IPv4 DNS nameserver 2a02:6b8::feed:0ff # Preferred IPv6 DNS nameserver 2a02:6b8:0:1::feed:0ff # Alternate IPv6 DNS
# Safe Yandex.DNS - Protection from virus and fraudulent content nameserver 77.88.8.88 # Preferred IPv4 DNS nameserver 77.88.8.2 # Alternate IPv4 DNS nameserver 2a02:6b8::feed:bad # Preferred IPv6 DNS nameserver 2a02:6b8:0:1::feed:bad # Alternate IPv6 DNS
# Family Yandex.DNS - Without adult content nameserver 77.88.8.7 # Preferred IPv4 DNS nameserver 77.88.8.3 # Alternate IPv4 DNS nameserver 2a02:6b8::feed:a11 # Preferred IPv6 DNS nameserver 2a02:6b8:0:1::feed:a11 # Alternate IPv6 DNS
3つのモードのどれでも Yandex.DNS の速度は同じです。"Basic" モードでは、トラフィックフィルタリングは存在しません。"Safe" モードでは、問題のあるサイトからの保護が提供されます。"Family" モードでは、未成年に悪影響を及ぼすサイトをブロックします。
UncensoredDNS
UncensoredDNS はフリーの無検閲 DNS リゾルバで、ファイアウォールによってポート53がブロックされている場合でもポート5353を使ってクエリを送信できます。
# censurfridns.dk IPv4 nameservers nameserver 91.239.100.100 ## anycast.censurfridns.dk nameserver 89.233.43.71 ## ns1.censurfridns.dk
# censurfridns.dk IPv6 nameservers nameserver 2001:67c:28a4:: ## anycast.censurfridns.dk nameserver 2002:d596:2a92:1:71:53:: ## ns1.censurfridns.dk
DNS 設定の保護
dhcpcd, netctl ,NetworkManager などの様々なプロセスによって /etc/resolv.conf
が上書きされることがあります。これは通常は望ましいことですが、場合によっては DNS 設定を手動で設定する時もあります (例: 固定 IP アドレスを使う場合)。DNS 設定を保護する方法は複数存在します。
- dhcdpcd を使っている場合、下の #dhcpcd 設定の修正 を見て下さい。
- netctl を使って固定 IP アドレスを割り当てる場合、プロファイルで
DNS*
オプションは使わないで下さい。このオプションを使うと resolvconf が呼び出されて/etc/resolv.conf
が上書きされます。
NetworkManager を使う
NetworkManager が /etc/resolv.conf
を変更しないようにするには、/etc/NetworkManager/NetworkManager.conf
を編集して [main]
セクションに以下を追加します:
dns=none
上記の設定後 /etc/resolv.conf
が壊れたシンボリックリンクになる場合は削除して、それから新しい /etc/resolv.conf
ファイルを作成してください。
openresolv を使う
openresolv には resolvconf ユーティリティが入っています。これは複数の DNS 設定を管理するためのフレームワークです。詳しくは man 8 resolvconf
や man 5 resolvconf.conf
を見て下さい。
設定は /etc/resolvconf.conf
で行い、resolvconf -u
を実行すると /etc/resolv.conf
が生成されます。
dhcpcd 設定の修正
dhcpcd の設定ファイルを編集することで dhcpcd デーモンが /etc/resolv.conf
を上書きするのを止めることができます。/etc/dhcpcd.conf
の最後のセクションに次を加えて下さい:
nohook resolv.conf
または、/etc/resolv.conf.head
という名のファイルを作ってあなたの DNS サーバーを記入することができます。dhcpcd はこのファイルを /etc/resolv.conf
の先頭に挿入します。
/etc/resolv.conf の書き込み保護
/etc/resolv.conf
が何かによって修正されてしまうのを止める他の方法として書き込み保護属性を設定する方法があります:
# chattr +i /etc/resolv.conf
timeout オプションを使ってホスト名の検索時間を減らす
ホスト名の解決にとても長い時間がかかっている場合 (pacman やブラウザで)、短い timeout を設定するとよいかもしれません。タイムアウトを設定するには、/etc/resolv.conf
に次の行を追加してください:
options timeout:1
Tips and tricks
ローカルドメイン名
完全修飾ドメイン名を使わずにローカルマシンのホストネームを使いたい場合、以下のように resolv.conf
にローカルドメインを追加してください:
domain localdomain.com
上記の設定によって ssh コマンドを使用する際に mainmachine1.localdomain.com
とローカルホストを指定するところを mainmachine1
だけで参照できるようになります。ただし、drill コマンドを実行するときはルックアップを実行するため完全修飾ドメイン名が必要になります。