■ RedHat
Linux におけるネットワーク関連ファイル
RedHat
Linux では他のディストリビューションと異なり、ネットワーク設定ファイルが
/etc/sysconfig/network をはじめ、/etc/sysconfig/network-scripts
に納められている。また、ネットワークを初期化するためのスクリプトが
/etc/rc.d/init.d/network に記述されており、引数として
start / stop / restart を与えることによってアクティベート・非アクティベートの切り替えができる。この方法はデーモンの起動と全く同じ形式で、これによってシステムの起動方法に一貫性を持たせている。
インタフェースカード(NIC)の設定はインストール時にできるほか、コマンドによってもネットワーク設定用のグラフィカルツールによっても可能である。いずれのツールも
/network-scripts 以下の ifcfg-ethX
ファイルを編集するもので、実質的に直接
vi で編集するのと変わらない。
1./etc/sysconfig/network
このファイルは主にシステムグローバルなネットワークの使用宣言とデフォルトゲートウェイの設定を行う。ちなみに、インストール時にネットワークを
192.168.1.0/24 で有効にし、ホスト名を server(192.168.1.1)
とした初期状態では、内容は次のようになっている。
NETWORKING=yes HOSTNAME=server GATEWAY=192.168.1.1
NICが一枚のときは初期設定をそのまま使うことになるが、複数のNICを組み込んだ場合はデフォルトゲートウェイをどれにするか指定しなければならない。ゲートウェイの設定はコマンドやGUIで行ってもよいが、/etc/sysconfig/network
を直接書き換えることによっても変更可能である。この場合は
GATEWAY の値を通信させたいネットワークのゲートウェイアドレスに設定すればよい。たとえば二枚目のNICを
eth1 とし、192.168.2.0 のサブネット上にあるルータ(192.168.2.1)と通信させたい場合は次のようになる。
コマンド) route
add default gw 192.168.2.1 netmask 255.255.255.0
ファイル) NETWORKING=yes HOSTNAME=server GATEWAY=192.168.2.1
書き換えたのち、ネットワークを再起動するには次のコマンドを使う。
/etc/rc.d/init.d/network
restart
これによってネットワークカードが停止され、関連ファイルによって再定義されたのち、再起動される。
2.ifcfg-ethX
ネットワークカード
ethX の設定を行うのが ifcfg-erhX ファイルである。これはNICそれぞれに設定され、次のようなフォーマットになっている。
DEVICE=eth0 BOOTPROTO=none BROADCAST=192.168.1.255 IPADDR=192.168.1.10 NETMASK=255.255.255.0 NETWORK=192.168.1.0 ONBOOT=yes USERCTL=no PEERDNS=no GATEWAY=192.168.1.1 TYPE=Ethernet
ifconfig
コマンドによってネットワークカードの設定ができるが、このファイルを直接編集することによっても設定できる。起動時にカードをアクティブにしたい場合は
ONBOOT=yes にしておく。また、ネットワークカードに固有のゲートウェイを設定したい場合は、GATEWAY句に値を設定しておく。
コマンドラインからネットワークカードの設定をしたい場合は、ifconfig
および route コマンドを使う。(これは
/etc/sysconfig/network の記述と一部重複する。)
ifconfig
eth0 192.168.1.10 netmask 255.255.255.0 up ifconfig
eth1 192.168.2.10 netmask 255.255.255.0 up … route
add default gw 192.168.1.1 netmask 255.255.255.0
これによって基本的なネットワークの設定ができる。また、さらに
ifcffg-eth0:1 のファイル名でインタフェースを定義すると、仮想アドレスを設定することができる。ここで
eth0 に仮想アドレスとしてクラスBローカルアドレス 172.116.0.10
を配賦するための ifcfg-eth0:1 を示す。
DEVICE=eth0:1 ONBOOT=yes IPADDR=172.16.0.10 NETMASK=255.255.0.0
設定完了後、/etc/rc.d/init.d/network
restart によって再起動させたのち、ifconfig を叩くと次のように表示される。インターネットアドレスとネットマスクはクラスごとに別だが、ハードウェアアドレス(MACアドレス)とブロードキャストアドレスが同一であることに注意。
#
ifconfig
eth0
Link encap:Ethernet HWaddr
00:90:99:A1:C8:FC inet
addr:192.168.10.2 Bcast:192.168.10.255 Mask:255.255.255.0 UP
BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX
packets:0 errors:0 dropped:0 overruns:0 frame:0 TX
packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0
txqueuelen:100 RX
bytes:0 (0.0 b) TX bytes:240 (240.0 b) Interrupt:11
Base address:0x2000
eth0:1 Link
encap:Ethernet HWaddr
00:90:99:A1:C8:FC inet
addr:172.16.0.10 Bcast:192.168.1.255 Mask:255.255.0.0 UP
BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:11
Base address:0x2000
仮想NICと仮想アドレスは一枚のカード上にいくつでも作ることができ、パケットの転送も可能である。なお、仮想アドレスを作った場合、ゲートウェイが複数表示されるが、これは仮想アドレスへバインドされるゲートウェイである。
ネットワーク設定のための /proc
仮想ファイルシステム
|
■ /proc/sys/net/…
/proc
ファイルシステムは Linux に特有のもので、カーネルの状態などを反映する仮想ファイルシステムである。したがって通常のファイルとしての実体はないが、カーネルの状態やモジュールの有無、ネットワークの設定を調査するためにぜひその構成を知っておきたいものである。
1./proc/sys/net/ipv4
この仮想ディレクトリにはネットワーキングに関する設定が反映されている。ここではカーネルのコンパイル時の構成により、appletalk,
ethernet, ipv4, ipx, ipv6 など、それぞれ利用可能な機能についてのディレクトリが作成される。これらの仮想ディレクトリ内にある仮想ファイル(ネットワークの状態を反映したもの)を操作することによって、実行中のネットワーク設定を変更することができる。
よく知られている仮想ファイルはカーネルにフォワーディング機能を与える
ip_forward がある。これは0または1の値のフラグビットの形をとり、デフォルトでは0にセットされている。システムに複数のNICを組み、マルチホームドゲートウェイ(ルータ/ファイアウォール)として機能させる場合はフォワーディングを有効にするため以下のように
ip_forward に1をセットしておく。
echo
1 > /proc/sys/net/ipv4/ip_forward
起動時にフォワードを有効にするためには、上の一行を
/etc/rc.local に追加しておく。特に iptables
で FORWARD チェインを使いたいとき、このスイッチをセットしておかないと機能しないので注意すること。なお、フォワードの許可に関して余談を述べれば、 Linux
では /etc/sysconfig/network ファイルでFORWARD_IPV4="no"を
yes
に変更する手もあるし、RedHat
6.2 以降などでは、/etc/sysctl.conf」のnet.ipv4.ip_forward = 0 を
1
にセットすることで許可する場合もある。このように Linux
では設定可能なファイルが複数あるので、どのファイルで何をどのように設定したか、構築時は必ずドキュメントに記録しておく必要がある。
仮想ディレクトリ
/ipv4 には ip_forward などのほか、 tcp_syncookies
などの追加ネットワーク設定が含まれる。こうした設定を相互に関連させて使用すると、システムへの攻撃を防止するため、あるいは、ルーターとしてシステムを用いる場合に非常に役に立つので、ファイアウォールの設定には必須の知識となる。(ただし、設定にミスがあると、必然的にリモート接続に影響が生じるので十分に注意すること。)以下に仮想ファイルと内容について特に重要なものを示す。
仮想ファイル名
|
内容
|
icmp_destunreach_rate icpm_echoreply_rate icpm_paramprob_rate icmp_timeexeed_rate
|
条件の異なるホストに対する最大ICMP送信パケットレート(100分の1秒単位)を設定する。0に設定すると遅延がなくなるので注意。
|
icmp_echo_ignore_all icmp_echo_ignore_broadcasts
|
カーネルがあらゆるホストやブロードキャストアドレスとマルチキャストアドレスから生じるICMP ECHOパケットを無視できるようにする。0でパケットに応答し、1で無視。
|
ip_default_ttl
|
デフォルトのTTL(Time To
Live)を設定する。これはパケットが目的地に到着する前にホップする回数を制限する。この値を大きくしすぎるとシステムパフォーマンスが低下する可能性があるので注意。
|
ip_forward
|
システム上のインターフェイスがパケットを互いに転送することを許可する。デフォルトでは0に設定されているtが、このファイルを1にセットすると、NICからNICへパケットを転送できるようになる。
|
ip_localport_range
|
ローカルポートが必要なときTCPかUDPで使用するポートの範囲を指定する。1番目の数は使用する最小ポートで、2番目の数は最大ポートを指定します。デフォルトの1024~4999より多いポートを必要とすることが予想されるシステムでは、このファイルで32768~61000の範囲に設定する。
|
tcp_syn_retries
|
システムが接続時にSYNパケットを再伝送する回数を制限する。
|
tcp_syn_retries1
|
着信接続に応じることが許可された再伝送回数を設定する。デフォルトは3。
|
tcp_syn_retries2
|
許可されたTCPパケットの再伝送回数を設定する。デフォルトは15。
|
2./proc/sys/net/core
Linux
では非常に多数のネットワークオプションを利用できるが、オプションを指定する対象として重要なものはほとんど/proc/sys/net/ディレクトリに含まれている。たとえば core ディレクトリには、カーネルとネットワークレイヤー間を相互に制御するさまざまな設定が格納されている。core
ディレクトリにおける重要なファイルとして以下のようなものがある。
仮想ファイル名
|
内容
|
message_brust
|
新しい警告メッセージを書き込むために必要な時間(10分の1秒単位)。これはサービス妨害攻撃(DoS)を防止するために使用される。デフォルトでは50に設定されている。
|
message_cost
|
どの警告メッセージにも結合されるコスト値を保持し、DoS攻撃を防止するために使用される。このファイルの値(デフォルトは5)が大きいほど、警告メッセージは無視されることが多くなる。これは、攻撃対象のシステムにエラーを発生させることによってログで
/var/log を一杯にしたり、エラーロギング処理自体でシステムの全リソースが必要となるような要求を立て続けに流してシステムの機能を停止させる攻撃を想定したもの。
|
netdev_max_backlog
|
特定のインターフェイスがカーネル処理速度以上のパケットを受け取った場合、キューに入れることができるパケットの最大数を設定する。デフォルト値は300。
|
optmem_max
|
ソケットごとに許可された補助バッファの最大サイズを設定する。
|
mem_default
|
受け取りソケットバッファの初期サイズ(単位はバイト)を設定する。
|
mem_max
|
受け取りソケットバッファの最大サイズ(単位はバイト)を設定する。
|
wmem_max
|
ソケットバッファ送信の初期サイズ(単位はバイト)を設定する。
|
3.仮想ファイルへの値の設定
仮想ファイルへ値を設定するには前述のとおり
echo コマンドでファイルへリダイレクトする。以下に iptables
でよく使われる設定項目とショートスクリプトによる設定方法を逆引きの形で示す。
対応項目
|
スクリプトによる設定方法
|
ping
-b に答えない
|
echo 1
> /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
|
Enable
bad error message protection
|
echo 1
> /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
|
ipmasq
のためにフォワーディングを許可
|
echo 1
> /proc/sys/net/ipv4/ip_forward
|
Dynamic
address に対応する
|
echo 1
> /proc/sys/net/ipv4/ip_dynaddr
|
source
routing パケットの禁止
|
echo 0
> /proc/sys/net/ipv4/conf/all/accept_source_route echo
0 > /proc/sys/net/ipv4/conf/default/accept_source_route
|
IP defrag
|
echo 0
>/proc/sys/net/ipv4/ip_always_defrag
|
TCP SYN
Cookie Protection
|
echo 1
>/proc/sys/net/ipv4/tcp_syncookies
|
source
address 確認
|
for f
in /proc/sys/net/ipv4/conf/*/rp_filter;
do echo 1 > $f done
|
ICMP Redirect
を受付けない
|
for f
in /proc/sys/net/ipv4/conf/*/accept_redirects;
do echo 0 > $f done
|
source
routed packets を受付けない
|
for f
in /proc/sys/net/ipv4/conf/*/accept_source_route;
do echo 0 > $f done
|
spoofed,
source-routed, redirect packets のロギング
|
for file
in /proc/sys/net/ipv4/conf/*/log_martians;
do echo "1" >
$file done
|
利用可能なすべてのファイルとオプションの一覧については
/usr/src/linux-2.4/Documentation/networking/ip-sysctl.txt
を、また、/proc ディレクトリや設定ファイルの値に関する詳細については/usr/src/linux-2.4/Documentation/filesystems/proc.txt
を参照すること。
■ ネットワーク設定スクリプト
ネットワークの設定は基本的に
ifconfig と route で行う。ここではNICが一枚のみのホストを設定するものとして、最も基本的な設定を記述する。
#!/bin/bash
IPADDR="192.168.1.10" MASK="255.255.255.0" DGW="192.168.1.1"
ifconfig
eth0 $IPADDR netmask $MASK up route add
default gw $DGW netmask $MASK
|
ちょっと脇道ですが soralis 8 のネットワーク設定について
|
おことわり:本稿を書き終わったのち、あやふやな記憶の裏付けを取るためにWEBで調査していたところ、虎岩秀明氏のページにほとんど同じ内容の情報が存在していたことを知りました。筆者は、なにしろSUNの純正品は高いもんな、みんな苦労してるよなあ、と妙な感慨に浸っておりますが、本稿が引き写しではないかという印象を与えるとしたら、虎岩氏にとっても決して気持ちのいいものではないだろうと思います。ここで先行して事例を発表された虎岩氏に敬意を表するとともに、それぞれの仕事は別個に進行したものであることをおことわりし、読者の皆様にもご了解をいただきたいと思います。
|
■ 補追:soralis
8 でのネットワーク設定
現場によってはサーバに異種のプラットフォームが採用されることがありうるので
Linux のネットワーク設定だけでなく、 soralis のネットワーク設定が必要になることがある。よく知られているとおり、soralis
のネットワーク設定は Linux とはかなり異なっている。ことNICに関しては
SUN の純正品が使えれば問題はないが、いささか高価であるために
PC 用の普及品で間に合わせたいこともある。筆者の経験だが、社内システムのLinux用に買ったNICが余っていたことから、テスト環境を構築するために
soralis
に流用したことがあった。このようなケースではNICのドライバをインストールしたりする必要があるので、soralis
のネットワーク設定について一通りの知識が必要になる。以下に
soralis 8 における低廉なネットワークカード( PLANEX FNW-9803-T
)のインストールと設定について述べる。
予備知識 : まず、soralis
の経験がない読者のために、soralis におけるイーサネットデバイスの認識について述べる。soralis
では Linux のように eth0 のような形式でデバイスにエイリアスがつけられているわけではなく、デバイス名がコントローラに対応した名前になっている。たとえば
3com や NE2000 や intel 対応という形式で、それぞれに固有のデバイス名を持つ。これを認識させ、使えるようにするためにはNICメーカーが出荷したデバイスドライバを組み込む必要がある。したがって、solaris
に非純正NICを組もうと思ったら、インストール時に「ネットワークを使用しない」を選択し、あとからドライバを組み込むのが正解である。 手順を以下に示す。
1.NICの入手
NIC
はプラネックスの FNW-9803-T (10M/100M PCIバス LANアダプタ)を選択する。これは
Linux 対応でもあり、\1000 たらずで入手できる。ただし、FNW-9803-T
にはハードウェアレイアウトの異なるバージョンがあり、初期型はドライバに合わないので注意する。基盤に描かれた白い文字が大きく、FCCE
と読めるものが適合型である。(非適合型はCEFCになっている。判別に自信がなかったら、虎岩氏のページに画像があるので参照されたい。)
2.ドライバのダウンロード
NICの設定ができていない以上、まだインターネットに接続できないので、まずは他のマシン上でフォーマット済みのフロッピィディスクをマウントし、http://garrett.damore.org/software/ethernet/download.shtml
からドライバをFDにダウンロードする。ソース・バイナリとも入手できるが、ソースの場合は
Sun純正の Forte C コンパイラがないとコンパイルできないので、Linux
のようにバイナリをダウンロードするのが確実である。アーカイブ名は以下の通りだが、自機のアーキテクチャに応じてアーカイブを選ぶこと。
対象アーカイブ名 : etherdrivers-1.0.0-i386.zip
3.アーカイブの展開とインストール
FDにダウンロードした
etherdrivers-1.0.0-i386.zip をFD上で展開する。作業は
root で行う。
$ su #
unzip etherdrivers-1.0.0-i386.zip
インストールは
pkgadd -d コマンドで実行する。(アーカイブを展開すると、GUIDE.html
および GUIDE.pdf が見つかるので、目を通しておくとよい。英文だが必要事項が簡潔にまとめてあり、非常にわかりやすい解説である。)なお、このコマンドは
FreeBSD の pkg_add と感覚的には似ているが、オプションなどがかなり違うので、solaris
に慣れていないユーザは先の GUIDE とあわせて man
ページを見ておくこと。 インストールの流れは以下のとおり。
#
cd etherdrivers-1.0.0 # pkgadd -d Packages/i386
all ← 赤字はアーキテクチャを示す
インストール後に
man ページを追加したい場合はGUIDE.html に詳細な解説があるので参照されたい。パスの設定によって
man afe でオンラインマニュアルの参照が可能になる。
4.インタフェースの設定
次にインタフェースの設定を行う。このインタフェース(
afe 0 番 )に
192.168.1.1 を割り当てる場合、次のようにコマンドを投入する。
#
echo 192.168.1.1 > /etc/hostname.afe0 #
ifconfig afe0 plumb
Linux と違ってインタフェース名はデバイスの種類によって別の名前(ここでは
afe0 )になるので、かならず ifconfig
-a でインタフェース名を確認しておく。さらに/etc/hostname.afe0 にホスト名を記述し、/etc/inet/hosts
にIPアドレスを書いて両者をバインドする。なお ifconfig
-a の結果、IPアドレスが 0.0.0.0になっている場合は再起動して設定を読み込ませればよい。
5.ネットワーク設定ファイルの構成
IPアドレスの割り付けが済んだら、基本的なネットワークの設定を行う。まず、ホスト名を次のファイルに書き込む。
/etc/nodename
vi
を使って編集してもいいし、先ほどのインタフェース名の割り付けのように
echo 出力をファイルへリダイレクトしてもよい。これが済んだら、route
コマンドを使ってデフォルトゲートウェイを設定する。これは
Linux とほぼ同じで、たとえばGWを 192.168.1.254 とすると、次の書式でゲートウェイの設定ができる。
route add default 192.168.1.254
次に /etc/inet/hosts
および /etc/hosts に名前解決のためにIPアドレスとホスト名を記述する。(両者は同じ内容である。)
/etc/hosts
ファイルの構成
* *
Internet host table * 127.0.0.1
localhost 192.168.1.254
solaris …
6.名前解決のための設定
/etc/resolv.conf
および nsswichの構成
resolv.conf
にDNSサーバ名を書くのは Linux と同じである。これはDNSクライアントの設定になるので、プライマリ・セカンダリとも必ず記入すること。
/etc/resolv.conf
の構成
domain
mydomain.co.jp nameserver
210.157.3.1
nameserver 210.157.3.2
また、/etc/nsswitch.conf
の hosts: 行を files dns の順に指定しておく。これは名前解決の優先順位を示すものであり、Linux
での /etc/host.conf における order hosts, bind という記述に相当する。
7.検証
設定後の検証は接続性の確認と名前解決の確認となる。また、NFSのマウントができるかどうか、ファイアウォール越しにネットワークサービスが正しく受けられるかどうかも確認しておく。
ネットワークと通信接続性の確認 →
ping 外部への名前解決 →
nslookup 外部とのパケット交換
→ WEBサービスへの接続、メール発着信
後記
: 以上、駆け足で solaris におけるネットワーク設定を述べたが、純正NICの価格はやはり頭が痛い問題である。通信負荷の高いサーバでは純正品の信頼性はありがたいが、他のネットワークカードに関してももう少しサポートが欲しい。とはいうものの、低廉品をリリースしているメーカーも独自の努力をしているようで、Realtek
などは RTL8139(A/B/C/D/8130)/810X Family
で solaris 用のドライバを開発している。国内では Corega
などが Realtek 社製のチップ(俗に言うカニ印チップ)を搭載しているが、RealTek
のホームページを覗くと solaris 7 & 8用のドライバがラインアップされているので、試してみるのもよいだろう。たとえば、コレガのPCI-TXSが使えた、などというようなレポートがWEB上に散見されるので、NICメーカーのホームページから製品とコントローラの型番を調べ、あらためて
Google あたりで検索してみることをおすすめする。
|