※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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

Linux Network Setting」の最新版変更点

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

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

+普段、深く考えずに、ホスト名などを使ってアクセスしていますが、その裏では、 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で指定します。