
Ubuntu日本語フォーラム
ログインしていません。
いつもお世話になっています、siraseです。
Ubuntu 12.04 LTS以降から、従来のLinuxの常識である /etc/resolv.conf にDNSサーバを
書くという設定方法から、dnsmasqを使った実装に切り替わっていると思います。
Webを見るとあちこち混乱もしているようなのですが、ここで整理したく思います。
また、私自身わからない点もあるのでご教示頂けませんでしょうか?
まず、Ubuntu Server版だと
/etc/network/interfaces
に
iface eth0 inet static
address 192.168.3.3
netmask 255.255.255.0
gateway 192.168.3.1
dns-nameservers 192.168.3.45 192.168.8.10
dns-search foo.org bar.com
といった設定を記述すれば、問題なくDNSサーバの設定が出来てこれが正攻法(Ubuntu 12.04 LTS以降の
作法に従った設定方法)だと思います。
それ以前は /etc/resolv.conf に直接書くので問題ありませんでした。
上記設定は
$ man resolvconf
のマニュアルの中に書いてあるものをそのまま引用しています。
Server版についてはこれで良いのですが、問題はDesktop版です。
Desktop版の場合はNetworkManagerがGUIで提供されています。
当然GUIで
・Static IPアドレスが設定できる
・DNSサーバのアドレスが設定できる
と認識しています。
しかし実際には、NetworkManagerのGUIツール上でDNSサーバのアドレスを設定しても
そのDNSサーバを参照してくれずに目的の正引きが出来ない事が多々あるかと思います。
その問題については、
・/etc/resolv.conf がシンボリックリンクになっているから普通のファイルにしてしまう
・/etc/NetworkManager/NetworkManager.conf の dns=dnsmasq をコメントアウトしてNetworkManager再起動
・dnsmasqを完全に削除する
・/etc/resolvconf/resolv.conf.d/base にDNSサーバのアドレスを書く
等色々情報が錯綜している状態かと思います。
やりたい事は下記です。
・Static IPアドレスを設定
・DNSサーバを設定
上記を、設定ファイルを直接修正する等せずにGUIのみでやる方法はありますでしょうか?
せっかくNetworkManagerが提供されているのに、結局は設定ファイルを直接編集しないといけないと
なると、もはやNetworkManagerが使い物にならない気がします。
/etc/network/interfaces をいじってしまうと、NetworkManagerとの整合性が取れなくなりそうです。
・完全に設定ファイルベースで設定(Server版みたいなやり方)し、GUIのNetworkManager等は無効化する
・完全にGUIのNetworkManagerで設定して設定ファイルは直接いじらない
のどちらかで一貫しないと、整合性が取れなくなりシステムが汚い状態になると思っています。
Ubuntu Desktop版における、正しい設定方法、お作法とはどう設定する事でしょうか?
Tips的な方法ではなくオフィシャルな設定の仕方を知りたいです。
以上、ご教示のほどよろしくお願い致します。
オフライン
このあたり整理しておくと、
・/etc/network/interfaces に設定が書かれたインターフェースは、NMからは完全に見えなくなるので無効化のために能動的な設定を行う必要はない。
・名前解決だけであれば/etc/resolvconf/resolv.conf.d/以下にファイルを置けばNMからは矛盾なく設定される。
・NMの固定IPアドレス設定がいまいちバグっている(ような気がする)場合は、GUIからは基本的になにをどうやってもダメ。
という感じです。
どちらかというと、
しかし実際には、NetworkManagerのGUIツール上でDNSサーバのアドレスを設定しても
そのDNSサーバを参照してくれずに目的の正引きが出来ない事が多々あるかと思います。
という部分がなんとなくおかしい気がします(少なくとも自分では遭遇できていない)。
このあたり、実際の経験を並べてみて頂くとどうなるでしょうか?
オフライン
hito による投稿:
このあたり、実際の経験を並べてみて頂くとどうなるでしょうか?
より正確に事象を伝えるとしますと、名前解決が出来ないと言うのは正しくありません。
$ nslookup domain.name
だと名前解決が出来るのですが
$ ping domain.name
だと名前解決が出来ません。
この状態だと、Chrome等のGUIアプリケーションから domain.name へアクセスした際に
名前解決が出来ない状態となっており困っています。
希望としては
1. 出来ればGUIのNetwork Managerのみで設定を完結させたい
2. それが出来ないならどの設定ファイルにどう設定を書くのが正しいのか知りたい
この辺の情報を頂けると・・・・。
以上、よろしくお願い致します。
オフライン
挙動からして、avahiまわりの問題のような気がします(avahiによって提供されるホスト名だけが解決できていない)。
http://stuartfeeser.com/2013/02/11/ubuntu/ で直るような気がしますが、どうでしょうか。
オフライン
hitoさん
解決しました!
/etc/avahi/avahi-daemon.conf の
#domain-name=local
↓
domain-name=.alocal
とコメント解除 + .local に変更で
$ sudo service avahi-daemon restart
で、無事に名前解決出来るようになりました!
ご教示ありがとうございました。
ところで、これはどうしてこのような設定が必要になるのでしょうか?
LANの名前解決には、 /etc/nsswitch.confの
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
この行の設定に従って、先にavahi-daemonが名前解決を試み、失敗すれば(NOTFOUNDなら) return
となっているので、dnsへ問い合わせにいかないことでこうなっていると思いますが、
LAN内のドメイン名が「なんとか.local」の場合においては毎回この設定が必要なのでしょうか?
この設定さえしておけばGUIのNetwork Managerで正常に設定できているように思います。
そもそも世間一般の話として、「.local」は特別で、avahi-daemonはこの.localの場合はでしゃばってくるってことでいいんでしょうか・・。
今回のdomain-name=.alocal の設定によって、 本来は .local が対象になるのを(デフォルト動作)、
.alocal が対象になるよう変更することでWorkaroundとしているということでしょうか?
以上、よろしくお願い致します。
オフライン
おおむねそのとおりで、いまどきであれば、
・そもそも.localはmDNS(≒avahi)用に予約されているので使わない。
・どうしても.localをDNSに登録する場合はavahiは使わないのが妥当(サービスとしてそもそも止める)
・さらにどうしても、avahiを使いつつ、DNSにも.localを登録する構成にしたい場合は、avahiの使うドメイン名を.local以外のものにする(サンプルでは.alocal)が、できればネットワーク管理者と相談して「お願いだから恥ずかしいことはやめてくれ」と説得してくる。
というのがセオリーです。
オフライン
hitoさん
siraseです。
解説頂きまことにありがとうございました。
今回の件は大変勉強になりました。
そう言えば自宅ではLinux同士の名前解決にavahiを使っていて、
ホスト名.local
なんて無意識に使っているのを失念して今回のトラブルに見事にハマってました(汗
オフライン