18.6 ネットワークの手動環境設定

ネットワークソフトウェアの手動環境設定は、常に最後の手段です。設定には可能な限りYaSTを使用してください。しかし、ネットワークの環境設定に関する背景知識がYaSTでの設定作業に役立つことがあります。

すべての内蔵式のネットワークカードおよびホットプラグのネットワークカード(PCMCIA、USB、一部のPCIカード)は、hotplugによって検出され、設定されます。ネットワークカードの 2 つの側面システムは、ネットワークカードを物理デバイスとインタフェースという 2 つの見方で捉えます。デバイスが挿入または検出されると、ホットプラグイベントが生成されます。このホットプラグイベントによって、hwupスクリプトが実行され、デバイスが初期化されます。ネットワークカードが新しいネットワークインタフェースとして初期化されると、カーネルによって別のホットプラグイベントが生成され、それにより/sbin/ifupが実行されてインタフェースがセットアップされます。

カーネルは、登録順に従ってインタフェース名に番号を付けます。割り当てられる名前は、初期化の順序によって決まります。あるネットワークカードの初期化に失敗した場合、その後に初期化されるカードの番号は1つずつずらされます。実際のホットプラグ対応カードでは、デバイスを接続する順序が重要になります。

柔軟な環境設定を可能にするために、デバイス(ハードウェア)の環境設定とインタフェースの環境設定は切り分けられ、デバイスの環境設定とインタフェースの環境設定のマッピングをインタフェース名で管理する方式は廃止されました。デバイスの環境設定は、/etc/sysconfig/hardware/hwcfg-*に格納されます。インタフェースの環境設定は、/etc/sysconfig/network/ifcfg-*に格納されます。これらの環境設定ファイルには、そのファイルに関連付けられるデバイスまたはインタフェースを表す名前が付けられます。ドライバをインタフェース名にマッピングする従来の方式では静的なインタフェース名が必要なため、このマッピングを/etc/modprobe.confで行うことはできなくなりました。この新しい方式では、このファイルにエイリアスエントリが設定されていると、好ましくない副作用が発生することがあります。

環境設定名、すなわち、hwcfg-またはifcfg-の後の部分では、スロット、デバイス固有のID、インタフェース名などでデバイスを表します。たとえば、PCIカードの環境設定名は、bus-pci-0000:02:01.0 (PCIスロット)、vpid-0x8086-0x1014-0x0549 (メーカー名と製品ID)などになります。対応するインタフェース名は、bus-pci-0000:02:01.0wlan-id-00:05:4e:42:31:7a (MACアドレス)などになります。

特定のカードではなく特定のタイプのカードにネットワークの環境設定を割り当てる場合は(ただし、同じタイプのカードを同時に2枚以上は装着しない)、もう少し汎用的な設定名を選択します。たとえば、すべてのPCMCIAカードに対してbus-pcmciaという設定名を使用できます。一方、先頭にインタフェースタイプが付いた限定的な設定名も使用できます。たとえば、USBポートに接続するWLANカードにはwlan-bus-usbという設定名を付けることができます。

システムは常に、インタフェースまたはそのインタフェースを提供するデバイスに最適な環境設定を使用します。最適な環境設定の検索は、getcfgによって行われます。getcfgの出力には、デバイスを記述するために使用できるすべての情報が含まれています。環境設定名の指定の詳細については、getcfgのマニュアルページを参照してください。

この方法により、ネットワークデバイスは常に同じ順序で初期化されるとは限りませんが、ネットワークインタフェースは適切に設定されます。ただし、インタフェース名は、やはり初期化の順序によって決まります。特定のネットワークカードのインタフェースに確実にアクセスするには、次の2とおりの方法があります。

ifupはハードウェアを初期化しないため、すでに存在しているインタフェースを必要とします。ハードウェアの初期化は、hwupコマンドによって行われます(このコマンドはhotplugまたはcoldplugによって実行されます)。デバイスが初期化されると、hotplugによってifup が新しいインタフェースに対して自動的に実行され、実行モードがonboothotplug、またはautoでありnetworkサービスが既に起動していれば、インタフェースがセットアップされます。従来は、ifupインタフェース名コマンドによってハードウェアの初期化が行われていましたが、新しいバージョンでは処理順序が逆になりました。まず、ハードウェアコンポーネントを初期化してから、その他の処理が行われます。この方法により、可変数のデバイスを、既存の環境設定を用いてできる限り最適な方法で設定できます。

表 18.5. 「手動ネットワーク環境設定用スクリプト」に、ネットワークの環境設定関連の最も重要なスクリプトをまとめます。各スクリプトはハードウェアとインタフェースに分類してあります。

表 18.5 手動ネットワーク環境設定用スクリプト

環境設定段階

コマンド

機能

ハードウェア

hw{up,down,status}

hw*スクリプトは、ホットプラグサブシステムによって実行され、デバイスの初期化、初期化の取り消し、デバイスのステータスの問い合わせを行います。詳細は、hwupのマニュアルページを参照してください。

インタフェース

getcfg

getcfgは、環境設定名またはハードウェア記述に対応するインタフェース名の問い合わせに使用します。詳細は、getcfgのマニュアルページを参照してください。

インタフェース

if{up,down,status}

if*スクリプトは、既存のネットワークインタフェースを起動したり、指定のインタフェースのステータスを表示したりします。詳細は、ifupのマニュアルページを参照してください。

ホットプラグおよび固定的なデバイス名の詳細については、第12章 udevを使用した動的カーネルデバイス管理を参照してください。

18.6.1 環境設定ファイル

ここでは、ネットワークの環境設定ファイルの概要を紹介し、その目的と使用される形式について説明します。

18.6.1.1 /etc/syconfig/hardware/hwcfg-*

これらのファイルには、ネットワークカードおよびその他のデバイスのハードウェアの環境設定が記述されています。これには、カーネルモジュール、実行モード、スクリプトの関連付けなどの必要なパラメータが含まれます。詳細については、hwupのマニュアルページを参照してください。存在しているハードウェアとは無関係に、coldplugの起動時にはhwcfg-static-*が適用されます。

18.6.1.2 /etc/sysconfig/network/ifcfg-*

これらのファイルには、ネットワークインタフェースの環境設定が記述されています。これには、実行モード、IPアドレスなどが含まれます。指定可能なパラメータについては、ifupのマニュアルページを参照してください。また、一般的設定を1つのインタフェースだけに使用する場合は、dhcpwireless、およびconfigの各ファイルにあるすべての変数が、ifcfg-*ファイルで使用されます。

18.6.1.3 /etc/sysconfig/network/config, dhcp, wireless

configファイルには、ifupifdown、およびifstatusの動作に関する汎用的な設定が記述されています。また、dhcpにはDHCPの設定が、wirelessには無線LANカードの設定が記述されています。これら3つの環境設定ファイルの変数にはコメントが付けられており、優先度の高い変数としてifcfg-*ファイルでも使用できます。

18.6.1.4 /etc/sysconfig/network/routes,ifroute-*

TCP/IPパケットの静的ルーティングが設定されています。各種システムタスクで必要となるすべての静的経路(ホストへの経路、ゲートウェイを介したホストへの経路、ネットワークへの経路)は、/etc/sysconfig/network/routesファイルに指定します。個別のルーティングを必要とする各インタフェースには、追加の環境設定ファイル/etc/sysconfig/network/ifroute-*を定義します。*はインタフェース名で読み替えてください。経路の環境設定ファイルのエントリは次のようになります。

# Destination     Dummy/Gateway     Netmask            Device
#
127.0.0.0         0.0.0.0           255.255.255.0      lo
204.127.235.0     0.0.0.0           255.255.255.0      eth0
default           204.127.235.41    0.0.0.0            eth0
207.68.156.51     207.68.145.45     255.255.255.255    eth1
192.168.0.0       207.68.156.51     255.255.0.0        eth1

第1列は、経路の宛先です。この列には、ネットワークまたはホストのIPアドレスが入ります。到達可能なネームサーバの場合は、完全に修飾されたネットワークまたはホスト名が入ります。

第2列は、デフォルトゲートウェイ、すなわちホストまたはネットワークにアクセスする際に経由するゲートウェイです。第3列は、ゲートウェイの背後にあるネットワークまたはホストのネットマスクです。たとえば、ゲートウェイの背後にあるホストのネットマスクは、255.255.255.255になります。

最後の列は、ローカルホスト(ループバック、イーサネット、ISDN、PPP、ダミーデバイスなど)に接続されたネットワークのみに関連します。ここには、デバイス名を指定する必要があります。

(オプションの) 5番目のコラムには、経路のタイプを指定することができます。必要ではないコラムには、マイナス記号-を記述してください。これは、パーサがコマンドを正しく解釈できるようにするためです。詳細は、routes(5)マニュアルページを参照してください。

18.6.1.5 /etc/resolv.conf

このファイルには、ホストが属するドメインが指定されています(キーワードsearch)。また、アクセスするネームサーバアドレスのステータスのリストも記述されています(キーワードnameserver)。ドメイン名は複数指定することができます。完全修飾でない名前を解決する場合は、searchの各エントリを付加して完全修飾名の生成が試みられます。複数のネームサーバを使用するには、nameserverで始まる行を複数行入力します。#記号の後に記入します。aSTは、指定されているネームサーバをこのファイルに記述します。例 18.5. 「/etc/resolv.conf/etc/resolv.confの例を示します。

例 18.5 /etc/resolv.conf


# Our domain
search example.com
#
# We use sun (192.168.0.20) as nameserver
nameserver 192.168.0.20

pppd (wvdial)、ipppd (isdn)、dhcp (dhcpcddhclient)、pcmciahotplugなどの一部のサービスは、スクリプトmodify_resolvconfを使用してファイル/etc/resolv.confに変更を加えます。ファイル/etc/resolv.confがこのスクリプトによって一時的に変更された場合、変更を加えたサービス、元のファイルがバックアップされている場所、および自動変更メカニズムを無効にする方法を示す事前定義のコメントが付されます。/etc/resolv.confが複数回変更された場合、ファイルには変更内容がネスト形式で保存されます。変更が行われた順序と異なる順序で復元を行った場合も、問題なく元通りに復元できます。このような柔軟性を必要とするサービスには、isdnpcmcia、およびhotplugがあります。

サービスが通常のクリーンな状態で停止しなかった場合、modify_resolvconfを使用して元のファイルを復元することができます。また、システムブート時に、クリーンアップされていない変更されたresolv.confが存在しないかがチェックされ(たとえば、システムクラッシュがあった場合)、存在する場合は、元の(変更されていない) resolv.confが復元されます。

は、modify_resolvconf checkコマンドを使用して、resolv.confが変更されているかどうかを確認し、ユーザに対してファイルの復元後は変更内容が失われることを警告します。はこれ以外の作業でmodify_resolvconfに依存しないため、を使用して resolv.confを変更した場合の影響は、手動で変更した場合と同じです。どちらの場合も、変更は永久に有効です。一方、前述のサービスによって要求された変更は、一時的に有効なだけです。

18.6.1.6 /etc/hosts

このファイル(例 18.6. 「/etc/hostsを参照)では、IIPアドレスがホスト名に割り当てられています。ネームサーバが実装されていない場合は、IP接続をセットアップするすべてのホストをここにリストする必要があります。ファイルには、各ホストについて1行を入力し、IPアドレス、完全修飾ホスト名、およびホスト名を指定します。IPアドレスは、行頭に指定し、各エントリはブランクとタブで区切ります。コメントは常に#記号の後に記入します。

例 18.6 /etc/hosts


127.0.0.1 localhost
192.168.0.20 sun.example.com sun
192.168.0.0 earth.example.com earth

18.6.1.7 /etc/networks

このファイルには、ネットワーク名とネットワークアドレスの対応が記述されています。形式は、ネットワーク名をアドレスの前に指定すること以外は、hostsファイルと同様です。例 18.7. 「/etc/networksを参照してください。

例 18.7 /etc/networks


loopback     127.0.0.0
localnet     192.168.0.0

18.6.1.8 /etc/host.conf

このファイルは、名前解決(resolverライブラリによるホスト名とネットワーク名の変換)を制御します。このファイルは、libc4またはlibc5にリンクされているプログラムについてのみ使用されます。最新のglibcプログラムについては、/etc/nsswitch.confの設定を参照してください。パラメータは、その行内で常に独立しています。コメントは#記号の後に記入します。表 18.6. 「/etc/host.confファイルのパラメータ」に、利用可能なパラメータを示します。/etc/host.confの例については、例 18.8. 「 /etc/host.confを参照してください。

表 18.6 /etc/host.confファイルのパラメータ

hostsbindの順序

名前の解決の際、サービスがアクセスされる順序を指定します。有効な引数は次のとおりです(空白またはカンマで区切ります)。

hosts:/etc/hostsファイルを検索します。

bind:ネームサーバにアクセスします。

nis:NISを経由します。

multi on/off

/etc/hostsに指定されているホストが、複数のIPアドレスを持てるかどうかを定義します。

nospoof on spoofalert on/off

これらのパラメータは、ネームサーバspoofingに影響を与えますが、それ以外のネットワークの環境設定に対してまったく影響を与えません。

trim domainname

ホスト名が解決された後、指定したドメイン名をホスト名から切り離します(ホスト名にドメイン名が含まれている場合)。このオプションは、ローカルドメインにある名前だけが/etc/hostsファイルに指定されているが、付加されるドメイン名でも認識する必要がある場合に便利です。

例 18.8 /etc/host.conf


# We have named running
order hosts bind
# Allow multiple addrs
multi on

18.6.1.9 /etc/nsswitch.conf

GNU C Library 2.0を導入すると、Name Service Switch (NSS)も合わせて導入されます。詳細については、nsswitch.conf(5) manページおよび『The GNU C Library Reference Manual』を参照してください。

クエリの順序は、ファイル/etc/nsswitch.confで定義します。nsswitch.confの例については、例 18.9. 「/etc/nsswitch.confを参照してください。コメントは#記号の後に記入します。この例では、hostsデータベースのエントリによると、要求がDNS (第20章 ドメインネームシステムを参照)経由で/etc/hosts (files)に送信されています。

例 18.9 /etc/nsswitch.conf


passwd:     compat
group:      compat

hosts:      files dns
networks:   files dns

services:   db files
protocols:  db files

netgroup:   files
automount:  files nis

NSSで利用できる「データベース」については、表 18.7. 「/etc/nsswitch.confで利用できるデータベース」を参照してください。それらに加えて、automountbootparamsnetmasks、およびpublickeyが近い将来導入される予定です。 NSSデータベースの環境設定オプションについては、表 18.8. 「NSS 「データベース」の環境設定オプション」を参照してください。

表 18.7 /etc/nsswitch.confで利用できるデータベース

aliases

sendmailによって実行されたメールエイリアス。man5 aliasesコマンドで、マニュアルページを参照してください。

ethers

イーサネットアドレス

group

getgrentがユーザグループを調べるとき使用します。groupのマニュアルページも参照してください。

hosts

gethostbynameおよび同様の関数が、ホスト名とIPアドレスを取得するために使用します。

netgroup

アクセス許可を制御するための、ネットワーク内にある有効なホストとユーザのリスト。netgroup(5) manページを参照してください。

networks

ネットワーク名とアドレス。 getnetentによって使用されます。

passwd

ユーザパスワード。getpwentによって使用されます。passwd(5) manページを参照してください。

protocols

ネットワークプロトコル。getprotoentによって使用されます。protocols(5) manページを参照してください。

rpc

リモートプロシージャコール名とアドレス。 getrpcbynameおよび同様の関数によって使用されます。

services

ネットワークサービス。getserventによって使用されます。

shadow

ユーザのシャドウパスワード。getspnamによって使用されます。shadow(5) manページを参照してください。

表 18.8 NSS 「データベース」の環境設定オプション

files

たとえば/etc/aliasesのような直接アクセスファイル。

db

データベース経由のアクセス。

nisnisplus

NIS。第21章 NISの使用を参照。

dns

hostsおよびnetworksの拡張としてのみ使用できます。

compat

passwdshadowおよびgroupの拡張としてのみ使用できます。

18.6.1.10 /etc/nscd.conf

このファイルは、nscd (name service cache daemon)の環境設定に使用します。nscd(8)およびnscd.conf(5) manページを参照してください。デフォルトでは、nscdによってpasswdgroupsのシステムエントリがキャッシュされます。キャッシュが行われないと名前やグループにアクセスするたびにネットワーク接続が必要になるため、このキャッシュ処理は NIS や LDAP といったディレクトリサービスのパフォーマンスに関して重要な意味を持ちます。hostsはデフォルトではキャッシュされません。 これは、nscd でホストをキャッシュすると、ローカルシステムで正引き参照と逆引き参照のルックアップチェックを信頼できなくなるからです。したがって、nscdを使用して名前をキャッシュするのではなく、キャッシュDNSサーバをセットアップします。

passwdオプションのキャッシュを有効にすると、新しく追加したローカルユーザが認識されるまで、通常、約15秒かかります。この待ち時間を短縮するには、コマンドrcnscdrestartを使用してnscdを再起動します。

18.6.1.11 /etc/HOSTNAME

このファイルには、ドメイン名の付いていないホスト名が記述されています。このファイルは、マシンの起動時に複数のスクリプトによって読み込まれます。指定できるのは、ホスト名が設定されている1行のみです。

18.6.2 スタートアップスクリプト

前述の環境設定ファイルに加え、マシンのブート時にネットワークプログラムをロードするさまざまなスクリプトも用意されています。これらは、システムがマルチユーザランレベルのいずれかに切り替わったときに起動します。これらのスクリプトの一部は、表 18.9. 「ネットワークプログラム用スタートアップスクリプト」で説明されています。

表 18.9 ネットワークプログラム用スタートアップスクリプト

/etc/init.d/network

このスクリプトは、ネットワークインタフェースの環境設定を処理します。ハードウェアが事前に(hotplug経由で) /etc/init.d/coldplugによって初期化されている必要があります。networkサービスが起動していないと、ネットワークインタフェースは、ホットプラグ経由で挿入されたときに初期化されません。

/etc/init.d/inetd

xinetdを起動します。xinetdを使用すると、サーバサービスがシステム上で利用できるようになります。たとえば、FTP接続の開始時に必ずvsftpdを起動するといったことができます。

/etc/init.d/portmap

NFSサーバなどのRPCサーバに必要なポートマッパを起動します。

/etc/init.d/nfsserver

NFSサーバを起動します。

/etc/init.d/sendmail

sendmailプロセスを制御します。

/etc/init.d/ypserv

NISサーバを起動します。

/etc/init.d/ypbind

NISクライアントを起動します。