ネットワーク設定

 

 

ネットワーク設定ファイル

■ RedHat Linux におけるネットワーク関連ファイル

RedHat Linux では他のディストリビューションと異なり、ネットワーク設定ファイルが /etc/sysconfig/network をはじめ、/etc/sysconfig/network-scripts に納められている。また、ネットワークを初期化するためのスクリプトが /etc/rc.d/init.d/network に記述されており、引数として start / stop / restart を与えることによってアクティベート・非アクティベートの切り替えができる。この方法はデーモンの起動と全く同じ形式で、これによってシステムの起動方法に一貫性を持たせている。

インタフェースカード(NIC)の設定はインストール時にできるほか、コマンドによってもネットワーク設定用のグラフィカルツールによっても可能である。いずれのツールも /network-scripts 以下の ifcfg-eth
X ファイルを編集するもので、実質的に直接 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-eth
X

ネットワークカード 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 あたりで検索してみることをおすすめする。



 

 

Copyright(c) 2003 My Company. All rights reserved. www.suzu841.com / mrs.suzu841.com