Linux Network Setting

「Linux Network Setting」の編集履歴(バックアップ)一覧はこちら

Linux Network Setting」(2012/04/11 (水) 15:50:26) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

コンピュータのホスト名から対応するIPアドレスやMACアドレスを割り出す,サービス名からポート番号を調べる,といったように,名前に関連づけられた値を割り出すことを名前解決といいます。/etc/nsswitch.confでは,名前解決の順序を指定します。  ホスト名の名前解決にはDNSを使うのが一般的ですが,それ以外にも,/etc/hostsファイルに記述されたホスト名とIPアドレスを使う方法や,NIS(Network Information Service)を使う方法,LDAPを使う方法などがあります。このような複数の名前解決手段があっても,NSS(Name Service Switch)という仕組みによってどのような順番で利用するかを指定できます。NSSの設定ファイルが/etc/nsswitch.confです。 /etc/nsswitch.confの例 passwd: nis files shadow: nis files group: nis files hosts: nis files dns bootparams: files ethers: files netmasks: files networks: files protocols: files rpc: files services: files netgroup: files publickey: files automount: files aliases: files  左側の欄には名前解決データベースの種類を記述します。名称は,/etc以下のファイル名とほぼ同じになっています(例えば,hostsは/etc/hostsに対応します)。右側の欄には,名前解決の手段を優先度の高い順に記述します。files(/etc以下のローカルファイル),nis(NIS),dns(DNS),ldap(LDAP)などを指定することができます。  この例では,ホスト名の名前解決(hosts:と書かれた欄で設定)には,最初にNISで検索が行われます。次にローカルファイル(/etc/hostsファイル),DNSの順で検索が行われます。問い合わせ先DNSサーバーのIPアドレスは,/etc/resolv.confで指定します。
普段、深く考えずに、ホスト名などを使ってアクセスしていますが、その裏では、 IP アドレスやホスト名を得るため、 DNS サーバに問い合わせたりなどという複雑な処理を、こっそりと行ってくださっていますよね。 DNS の場合、/etc/resolv.conf というファイルを変更しますと、振舞いなどを変えることができます。 Vol.021 - resolv.conf を触ってみよう http://www.usupi.org/sysad/021.html しかし、実際には、DNS だけでなく、/etc/hosts ファイルや NIS などを使って、解決しているところが多いのではないかと思います。 そして、まず DNS に問い合わせてほしいなとか、 /etc/hosts に重複して登録されていても問題ないようにしたいなとか、いろいろなご要望が存在するのではないかと思います。 そんなとき、/etc/host.conf というファイルを変更することで、振舞いを変えることができます。 もしニーズがなくても、この際ですから、いろいろ設定を知っておくと、そんなシチュエーションのときに、役立つのではないでしょうか。 というわけで今週は、host.conf の設定方法をご紹介したいと思います。 それでは、まず前半で、設定項目を一気にご紹介し、後半では、それらの動作確認をしてみたいと思います。 設定できる項目のうち、今回ご紹介するものを、以下に示します。 order {bind,hosts,nisの順序の指定} multi {on|off} reorder {on|off} trim {ドメインの指定} spoof 関連は、きっちり動作確認できていませんので、申し訳ありませんが、今回はご紹介を見送りたいと思います。すみませんごめんなさい。 まずは、order です。 問い合わせる順序を指定します。指定できるのは bind(DNS), hosts, nis で、カンマ(,) で区切って複数指定します。(ひとつだけでも OK です。) たとえば、 order hosts,bind と指定しますと、まず /etc/hosts を見に行き、解決しなければ DNS に問い合わせます。 …がしかし、今どきは /etc/nsswitch.conf の hosts の設定を見に行くようでして、 host.conf の order を変更しても反映されないようです。 ですが、古いディストリビューションやアプリケーションでは、こちらを参照することもありますので、 nsswitch.conf と同じ設定にしておいた方が無難だと思います。 次は、multi です。 /etc/hosts に IP アドレスが複数設定されていたときに、すべて返してもらうための設定です。 たとえば、/etc/hosts に、 192.168.1.1 usugw.usu.usupi.org 10.0.0.1 usugw.usu.usupi.org と、usugw の IP アドレスが複数登録されているとき、host.conf に multi on と書いておけば、両方の IP アドレスを返してくれます。 (multi の指定がなければ、最初の IP アドレスだけを返します。) その次は、reorder です。 複数の IP アドレスが得られたときに、同じサブネット内のアドレスを、先に返してもらうための設定です。 たとえば、前述の /etc/hosts の場合、自分の IP アドレスが 10.0.0.2 だと、 host.conf に reorder on と書いておけば、10.0.0.1 を先に返してくれるようになります。 そして最後に、trim です。 IP アドレスからホスト名を得たときに、trim で指定したドメインと一致すると、その部分を取り除いた名前を返すようにするための設定です。 コロン(:)やセミコロン(;)、カンマ(,)で区切ることで、複数のドメインを指定することもできます。 たとえば、192.168.1.1 のホスト名を問い合わせて、 usugw.usu.usupi.org が得られたとき、host.conf に trim .usu.usupi.org と書いておけば、.usu.usupi.org を取り除いた usugw だけを返します。 ただし、この設定は、DNS にのみ効果があります。 さらっとした説明が終わりましたので、動作確認をしてみましょう。 …の前に、動作確認用の Perl スクリプトを、先にご紹介しておきます。 以下は、ホスト名から IP アドレスなどを得るためのスクリプトです。 #!/usr/bin/perl while(my $host = shift) { my ($name, $aliases, $t, $l, @addrs) = gethostbyname($host); print "Name: $name\nAliases: $aliases\nAddresses: "; for my $addr (@addrs) { print join('.', unpack("C*", $addr)) . " "; } print "\n"; } これを、getaddr.pl という名前で保存しておいてください。 そして、IP アドレスからホスト名などを得るためのスクリプトです。 #!/usr/bin/perl use Socket; while(my $addr = shift) { my ($name, $aliases, $t, $l, @addrs) = gethostbyaddr(inet_aton($addr), AF_INET); print "Name: $name\nAliases: $aliases\nAddresses: "; for my $addr (@addrs) { print join('.', unpack("C*", $addr)) . " "; } print "\n"; } これを、gethost.pl という名前で保存しておきましょう。 …ええっと、順番通りにいきますと、まずは order の動作確認をすべきなのですが、変更しても変わらないため、割愛させていただきます。 というわけで、まずは、multi です。 /etc/hosts に、以下のような設定を追加してみてください。 192.168.1.1 usugw.usu.usupi.org 10.0.0.1 usugw.usu.usupi.org host.conf に multi の設定がない場合、 % ./getaddr.pl usugw.usu.usupi.org Name: usugw.usu.usupi.org Aliases: Addresses: 192.168.1.1 IP アドレスは1つしか得られません。 ですが、host.conf に multi on の設定がある場合は、 % ./getaddr.pl usugw.usu.usupi.org Name: usugw.usu.usupi.org Aliases: Addresses: 192.168.1.1 10.0.0.1 2つとも得られるようになります。 次に、reorder です。 自分のアドレスが 10.0.0.2 の場合でも、普通に問い合わせると、前述のように、 192.168.1.1 が先に得られます。 しかし、host.conf に reorder on の設定がある場合、 % ./getaddr.pl usugw.usu.usupi.org Name: usugw.usu.usupi.org Aliases: Addresses: 10.0.0.1 192.168.1.1 10.0.0.1 が先に来るようになります。 そして最後に、trim です。 普通に、10.0.0.1 のホスト名を得ようとしますと、 % ./gethost.pl 10.0.0.1 Name: usugw.usu.usupi.org Aliases: Addresses: 10.0.0.1 usugw.usu.usupi.org という名前が得られます。 ここで、host.conf に、 trim .usu.usupi.org という設定を追加しますと、 % ./gethost.pl 10.0.0.1 Name: usugw Aliases: Addresses: 10.0.0.1 usugw だけになります。 (ちなみに、trim usu.usupi.org と設定すると、usugw. が返ります。) 以上、host.conf の設定方法と確認方法を、簡単にご紹介しました。 *nsswitch.conf コンピュータのホスト名から対応するIPアドレスやMACアドレスを割り出す,サービス名からポート番号を調べる,といったように,名前に関連づけられた値を割り出すことを名前解決といいます。/etc/nsswitch.confでは,名前解決の順序を指定します。  ホスト名の名前解決にはDNSを使うのが一般的ですが,それ以外にも,/etc/hostsファイルに記述されたホスト名とIPアドレスを使う方法や,NIS(Network Information Service)を使う方法,LDAPを使う方法などがあります。このような複数の名前解決手段があっても,NSS(Name Service Switch)という仕組みによってどのような順番で利用するかを指定できます。NSSの設定ファイルが/etc/nsswitch.confです。 /etc/nsswitch.confの例 passwd: nis files shadow: nis files group: nis files hosts: nis files dns bootparams: files ethers: files netmasks: files networks: files protocols: files rpc: files services: files netgroup: files publickey: files automount: files aliases: files  左側の欄には名前解決データベースの種類を記述します。名称は,/etc以下のファイル名とほぼ同じになっています(例えば,hostsは/etc/hostsに対応します)。右側の欄には,名前解決の手段を優先度の高い順に記述します。files(/etc以下のローカルファイル),nis(NIS),dns(DNS),ldap(LDAP)などを指定することができます。  この例では,ホスト名の名前解決(hosts:と書かれた欄で設定)には,最初にNISで検索が行われます。次にローカルファイル(/etc/hostsファイル),DNSの順で検索が行われます。問い合わせ先DNSサーバーのIPアドレスは,/etc/resolv.confで指定します。

表示オプション

横に並べて表示:
変化行の前後のみ表示: