web-dev-qa-db-ja.com

Ubuntu Serverで静的DNSネームサーバーアドレスを設定するにはどうすればよいですか?

仮想マシンとして実行されているUbuntuサーバーでDNSサーバーアドレスを静的に設定しようとしています。 Ubuntuの公式サポートページにあるすべての推奨事項に従いましたが、DHCPによって設定されたISPのDNSサーバーを取り除くことはできません。

ホストマシンの静的IPアドレスにbr0インターフェイスを割り当て、VMにeth0を割り当てて、/etc/network/interfacesに設定することにより、2番目の仮想マシンで実行されているGoogle DNSと独自のローカルDNSを使用しました。 /etc/resolvconf/resolv.conf.d/のヘッドベースファイルとテールファイルをいじって、/etc/resolvconf/interface-orderのインターフェイスの順序をシャッフルしようとしましたが、ネットワークサービスを再起動すると、ISPのDNSアドレスが毎回戻ってきました。

Red Hatで常に行っていたように、resolvconfを無効にし、resolv.confファイルを手動で設定する方法はありますか?または、どのフックスクリプトがISP DNSをresolv.confに入れ続けているか教えてもらえますか?私のISPでは、ルーターのDHCP設定を変更できないため、そのようにすることはできません。

DNSサーバーの設定などの単純なことがなぜ複雑になるのですか?

7
Aleks

1:Resolvconfは、動的なresolv.confファイルを/run/resolvconf/resolv.confに書き込みます。 /etc/resolv.confは、後者の場所へのシンボリックリンクです。静的なresolv.confファイルを使用する場合は、/ etc/resolv.confシンボリックリンクをファイルに置き換えるだけです。これは現在サポートされていますが、推奨されていません。

2:私が理解したように、影響を受けるマシンはUbuntu Serverエディションを実行しています。その場合、構成ファイルが/etc/network/interfacesであるifupプログラムを使用してインターフェースを構成します。 dhcpメソッドで構成されたインターフェイスの場合、ifup(通常)はisc-dhcp-clientパッケージのdhclientを使用します。 DhclientはDHCPサーバーからネームサーバー情報を受信し、そのフックスクリプト/etc/dhcp/dhclient-enter-hooks.d/resolvconfはこの情報をresolvconfに送信し、resolv.confに入れます。

できることの1つは、/etc/resolvconf/interface-ordereth0.dhcpの前にくるようにeth0.dhclientを編集することです。 (関連するインターフェースはeth0であると仮定します。)デフォルトのinterface-orderがある場合、たとえば、eth0.dhcpの前にeth*の行を追加できます。

--- interface-order_ORIG    2012-11-06 10:12:47.630529145 +0100
+++ interface-order 2012-11-06 10:13:16.410529800 +0100
@@ -9,6 +9,7 @@
 hso*
 em+([0-9])?(_+([0-9]))*
 p+([0-9])p+([0-9])?(_+([0-9]))*
+eth0.dhcp
 eth*
 ath*
 wlan*

次に、dns-nameservers行を、iface eth0/etc/network/interfacesスタンザに正しいネームサーバーアドレスで追加します。

iface eth0 inet dhcp
    dns-nameservers 1.2.3.4

eth0.dhcpeth0.dhclientの前に来るため、正しいネームサーバーアドレスはresolv.confの間違ったアドレスの前に含まれます。

DHCPサーバーが提供するネームサーバーアドレスを含めるという望ましくない動作をオーバーライドする別の方法は、dhclientフックスクリプトを編集することです。たとえば、次のような行を追加できます(1.2.3.4は破棄するネームサーバーアドレスです)。

--- resolvconf_ORIG 2012-03-29 22:37:14.000000000 +0200
+++ resolvconf  2012-11-05 20:53:33.312681077 +0100
@@ -54,6 +54,7 @@
            fi
            shopt -s nocasematch
            for nameserver in $new_dhcp6_name_servers ; do
+               [ "$nameserver" = "1.2.3.4" ] && continue

さらに別の可能性(完全に静的であるため少し粗雑なもの)は、/etc/resolvconf/resolv.conf.d/headにネームサーバーオプションを追加することです。

3:DNSネームサーバーアドレスの設定は、マシンがモバイルになり、ますます多くのインターフェイスを取得し、静的構成が次第に自動構成に置き換えられているため、より複雑になりました。

5
jdthood

Dhclientを活用するだけです(これは、例としてgoogle DNSを使用しています)。これは他のIMOの回答よりもずっときれいです。

  1. /etc/resolv.confのバックアップ:Sudo cp /etc/resolv.conf /etc/resolv.conf.auto

  2. /etc/dhcp[3]/dhclient.confを編集します(ubuntu 14.04は3を省略します):Sudo vi /etc/dhcp/dhclient.conf

  3. Domain-name-serversを含む行がある場合、将来の参照のためにIPアドレスを書き留めます。
  4. その行を次の行で置き換えるか、追加します。IPv4の場合:prepend domain-name-servers 8.8.8.8, 8.8.4.4; IPv6の場合:prepend domain-name-servers 2001:4860:4860::8888, 2001:4860:4860::8844;
  5. IPをリリースして更新します:ifdown eth0 && ifup eth0

使用しているネットワーククライアントをすべて再起動します(chromeまたはwhatnotなど)

3
rynop

IMO:これはグラフィカル構成ツールのバグです。

私の最も簡単な修正方法は、ファイル/etc/dhcp/dhclient.confの「request ...」で始まる行をコメント(または削除)することです。

0
ubuntu_new69