仮想マシンとして実行されている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サーバーの設定などの単純なことがなぜ複雑になるのですか?
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-order
がeth0.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.dhcp
はeth0.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ネームサーバーアドレスの設定は、マシンがモバイルになり、ますます多くのインターフェイスを取得し、静的構成が次第に自動構成に置き換えられているため、より複雑になりました。
Dhclientを活用するだけです(これは、例としてgoogle DNSを使用しています)。これは他のIMOの回答よりもずっときれいです。
/etc/resolv.confのバックアップ:Sudo cp /etc/resolv.conf /etc/resolv.conf.auto
/etc/dhcp[3]/dhclient.confを編集します(ubuntu 14.04は3を省略します):Sudo vi /etc/dhcp/dhclient.conf
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;
ifdown eth0 && ifup eth0
使用しているネットワーククライアントをすべて再起動します(chromeまたはwhatnotなど)
IMO:これはグラフィカル構成ツールのバグです。
私の最も簡単な修正方法は、ファイル/etc/dhcp/dhclient.confの「request ...」で始まる行をコメント(または削除)することです。