ドメイン名前解決

提供: ArchWiki
2016年8月16日 (火) 21:14時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

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 を編集して、一番最初に使われるようにファイルの一番上にサーバーを追加してください。任意で、記載されているサーバーを削除したりコメントアウトすることもできます。

ノート: /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
警告: OpenDNS サーバーはクエリに対して、たとえドメインや DNS レコードが存在していなかったとしても、いつでも IP アドレスを返します。ネットワークの問題をデバッグするときにこれが問題になるかもしれません (OpenDNS ダッシュボードで特定の IP アドレスについてこれを無効にすることができます)。

Google の問題を修正する

OpenDNS は全てのクエリを最初に自身のサーバーに通してルーティングすることで Google の検索をハイジャックします。これによって Google の検索が明らかに遅くなったり、Google の FeelingLucky 機能が使えなくなったりすることがあります。後者の場合、元の挙動に戻す Firefox アドオンが存在します。もっとも賢い解決方法は Google へのクエリを全て ISP の DNS サーバーにリダイレクトすることです。これは dnsmasq を使うことで可能です。

Google

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 resolvconfman 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 コマンドを実行するときはルックアップを実行するため完全修飾ドメイン名が必要になります。