UNIXネットワーク管理

目次

ネットワークの基本をまとめ、ルーティングやARPとRARPなどについて紹介します。断わりがない限りここで表記している内容はSolarisの設定方法、コマンドを指します。Cisco製品については別サイトを参考にしてください。

ネットワークの基本
IPルーティング
IPフォワーディング
ルーターとゲートウェイ
ARPとRARP
戻る

ネットワークの基本

<UNIXネットワーク>
ここではUNIXのネットワークについて、復習も兼ねて基本から考えていきたいと思います。まずはインターフェイスとIPアドレスから見ていきましょう。

Routingテーブルの表示

> netstat -rn
Routing Table: IPv4

Destination Gateway Flags Ref Use Interface
------------------ ---------- --- --- ----- ---------
192.168.10.0  192.168.10.14 U 1 1144 hme0
224.0.0.0   192.168.10.14 U 1 0 hme0
default  192.168.10.1 UG 1 31208  
127.0.0.1  localhost UH 4 45122  lo0

netstat -rでRoutingテーブルを表示します。nをつければipアドレスで表示することになります。NICを指定して情報を見たり、アドレスを変える場合は次のifcomfigコマンドを利用します。

# ifconfig [インターフェイス名] [オプション]

例えば、Solaris8ではインストール直後ルーティングは一切行っていませんのでその場合は次の様にセットします。もちろんdefaultrouterファイルを作成する方法でもかまいません。(結局おなじ事なんです)

# ifconfig hme0 192.168.10.14
# route add default 192.168.10.1

しかしLinuxではIPアドレスを変更するとゲートウェイの設定が無くなってしまいます。それはARPテーブルの不整合が生じるためです。ではなぜSolarisでは整合がとれるのか、その動作についてはARPとRARPで詳しく説明しますのでそちらを参考にしてください。

<ホスト名とIPアドレスを変更する場合>
環境変数をセットするだけでホスト名は変更できます。

# hostname hoge

これでホスト名hogeにセットされます。次にネットワーク的な意味を持たせる為に/etc/hostsを変更(追記)しておきます。
これらの設定で新しいホスト名が利用できていると思います。リブート後もそのホスト名にしたい場合は次のファイルを編集する必要があります。

/etc/nodename
/etc/hostname.[インターフェイス名]
/etc/hosts

IPルーティング

<スタティックルートの指定>
経路が1つの場合、動的Routingを使用せずに、手作業でスタティックなRoutingを行うことが多いと思います。最も基礎となるRouting定義方法は[UNIXシステム基礎]で説明しました。/etc/defaultrouterファイルでデフォルト経路を定義すると、Solarisのスタートアップスクリプトは、Routingの実行を停止して、ネットワークインターフェイス間のIP転送を無効化します。つまり外部に対するIP転送はdefaultrouterに全て依存する事になります。
Routingテーブルネットワークに複数のルーターが存在する場合には、デフォルトゲートウェイだけではなくRoutingテーブルを細かく指定しなくてはいけません。SolarisにはスタティックなRoutingを定義する簡単な方法が用意されていないので、Routingコマンドが必要になってきます。起動時にネットワークを確立したい場合は起動スクリプトを使いましょう。

# route add 192.168.0.0/24 192.168.0.1
# route add 192.168.1.0/24 192.168.1.1

192.168.0.0セグメントへの経路をrouter192.168.0.1にセットしました。
192.168.1.0セグメントへの経路をrouter192.168.1.1にセットしました。

routeコマンドを使ってDefault Routerをセットする場合,

# route add default 192.168.0.1

として下さい。/etc/defaultrouterを作成した基本設定と同じ動作をする様になります。

経路を削除する場合はdeleteオプションを指定します。

# route delete default 192.168.0.1

これはNICが何枚あっても同じです。それぞれのセグメントの行き先を指定することができます。

<複数のNICを使う場合>
NICが2枚以上あるマシンにSolaris8をインストールすると1枚目のNICのホスト名がノード名に設定されて残りは機能していません。複数のNICをもつ場合はホスト名やIPアドレスを各自で設定してください。設定する箇所は次の2つのファイルです。

/etc/hosts
/etc/hostname.[インターフェイス名]

IPフォワーディング

IPフォワーディングはIPを変換することで、ゲートウェイの持つ機能のことです。下の図の様な場合を考えて下さい。

この場合A001からM001にping送信すればM001は応答するでしょう。またB001からM001に向かってpingを送信してもM001は応答を返すでしょう。しかし、A001からB001にpingを送っても応答しません。A001のRoutingがどこを向いて様が関係なくパケットがM001を通過しないのです。それを行うためにIPフォワーディングが必要になります。両セグメントに接続されたM001でパケットの架け渡しを行うには次のコマンドを実行してください。

# ndd -set /dev/ip ip_forwarding 1

これによりIPの架け渡しが出来る様になっていると思います。それぞれのセグメントへの経路をM001にセットすればM001がゲートウェイとして機能するでしょう。次に例を示します。

A001側のRouting(M001が持つ192.169.20.0側のIPアドレスは192.169.20.1とします)

# route add 192.169.20.0/24 192.160.20.1

B001側のRouting(M001が持つ192.169.10.0側のIPアドレスは192.169.10.1とします)

# route add 192.169.10.0/24 192.169.10.1

この様に必要なスタティック経路は全てセットしました。これによりA001からB001にpingを送信すると応答が帰ってきます。ここで注意することはただ一つです。TCPは行きと帰りが必要ですので必ず両セグメントでM001がゲートウェイである事を知っておかなければなりません。

<Solarisマシンをルーターにする>
先ほど説明したnddコマンドによるIPフォワーディングは再起動後には無効になってしまいます。Solarisでは/etc/defaultrouterが無い場合にIPフォワーディングを行う様/etc/rc2.d/S69inetに記述されてるので/etc/defaultrouterファイルは削除しなければなりません。

if [ ! -f /etc/notrouter -a $numdhcp -eq 0 -a ( $numifs -gt 2 -o $numptptifs -gt 0 -o -f /etc/gateways ¥) ]; then
#
# Machine is an IPv4 router: turn on ip_forwarding, run
# in.routed, and advertise ourselves as a router using router
# discovery.
#
echo 'Machine is an IPv4 router.'
/usr/sbin/ndd -set /dev/ip ip_forwarding 1
[ -f /usr/sbin/in.routed ] && /usr/sbin/in.routed -s
[ -f /usr/sbin/in.rdisc ] && /usr/sbin/in.rdisc -r
else
#
# Machine is an IPv4 host: if router discovery finds a router
# then we rely on router discovery. If there are no routers
# advertising themselves through router discovery
# run in.routed in quiet mode. In both cases, turn off
# ip_forwarding.
#
/usr/sbin/ndd -set /dev/ip ip_forwarding 0
[省略]
fi

/etc/defaultrouterを設定しておらず、かつ複数のNICが有効になっていることが条件になっている様です。しかし/etc/defaultrouterがないのならば、その代わりの何かで同じ動作をする仕組みを作っておく必要があります。SolarisではroutedがRoutingをセットするように作られています。そしてroutedが利用するのは/etc/gatewaysファイルです。

# rm /etc/defaultrouter
# touch
/etc/gateways
# vi
/etc/gateways

net 0.0.0.0 gateway [defaultrouterの内容] metric 1 passive

こうしておけば今までと同じ様にルーティングが引き継がれるでしょう。

ルーターとゲートウェイ

ここでは一般に利用されるデフォルトルーター、デフォルトゲートウェイを構成する際に必要な概念を説明します。下図の様に192.169.10.0/24にA001、A002、A003があるとします。

先ほどの様にA001、A002、A003からB001にpingを送信して、応答してもらう為にはそれぞれA001、A002、A003のRoutingテーブルに192.169.20.0への経路をセットしなければなりません。また次の図の様に新たなセグメント192.169.30.0/24が増えた場合、A001、A002、A003全てのRoutingテーブルに新たな経路を追記しなければなりません。

A001、A003において次のようなRoutingが必要です。(A002が持つ192.169.10.0側のIPアドレスは192.169.10.3とします)

# route add 192.169.30.0/24 192.160.10.3

もちろん行きと帰りをセットしなければなりませんのでC001のRoutingテーブルもセットする必要があります。(A002が持つ192.169.30.0側のIPアドレスは192.169.30.3とします)

# route add 192.169.10.0/24 192.160.30.3

これは非常に面倒な作業です。しかし、その問題は簡単に解決できます。全章の「IPフォワーディング」のつづきと考えてください。A001は192.169.20.0の行き方を知っています。また先ほどの設定でA001はC001の行き方も知っています。つまりA003(A002も含めて)から見た場合、192.169.20.0/24のネットワークと192.169.30.0/24のネットワークへの案内人になることができるのです。その案内人をRouterと言います。言い換えれば「別のネットワークへの行き方(経路)を案内できるホスト」がRouterなわけです。ですからA003(A002も含めて)のDefault RouterをA001にセットすればA001と同じ様にB001やC001にpingを送信して応答を受けることができるようになります。一般にA001がRouterの場合、M001と重ねて機能させます。次の図を見て下さい。

A001はネットワークから外してM001に案内人の役目を代行させました。もちろんA003(A002も含めて)のDefault RouterはM001に換えなければなりません。このRouterは192.169.20.0/24への行き方案内人兼、192.169.30.0/24への案内人になります。言い換えれば、自分のセグメント以外に接続するネットワーク全ての経路を知っている案内人です。これがデフォルトゲートウェイです。A003とA002のデフォルトゲートウェイをセットするには次の様にRoutingを追加してください。

# route add default 192.169.10.1

A001のRoutingをM001で行うにはM001側で次のコマンドを実行して下さい。

# route add 192.169.30.0/24 192.169.10.3

各セグメントで1つのデフォルトゲートウェイを設置すれば、いくらネットワークが複雑になったとしても(たとえそれがインターネットであったとしても)すべての経路を案内してくれます。下の図の様な場合を見ても同じことです。

B001のデフォルトゲートウェイは先ほどの設定でM001になっていますので、これと同じ様にC001のデフォルトゲートウェイもA002にセットすればB001とC001は(行き帰り共に)繋がります。またD001のデフォルトゲートウェイをM001にセットすればC001とD001も(行き帰り共に)繋がります。

ARPとRARP

EthernetアドレスとIPアドレスを対応させるプロトコルのことを「アドレス解決」と言います。IPアドレスからEhternetアドレスへの解決に使用するプロトコルのことをARPと言います。逆にEhternetアドレスをもとにIPアドレスを判別しなければならない場合もあります。このプロセスに使用するプロトコルをRARPと言います。Ethernetアドレスを解決する必要があるホストはIPアドレスをデータとして含むARP要求をブロードキャストします。これは基本的に、このIPアドレスをもつホストのEhternetアドレスの問い合わせです。ARP要求はEhternetブロードキャストであることに注意してください。つまり、Ehternetフレームの宛先のEthernetアドレスはすべてFF:FF:FF:FF:FF:FFです。指定されたIPアドレスと一致するホストはそのEhternetアドレスを含むARP応答と返します。
Ehternetアドレスがわかっている場合のIPアドレスの解決にも同じプロセスが使用されます。RARP要求はEhternetアドレスをデータとして含むブロードキャストです。宛先となるEhternetアドレスはFF:FF:FF:FF:FF:FFになります。これに対し、該当するホストが、要求されたIPアドレスを含むRARP応答を返します。

ARPテーブルを表示する場合は次のコマンドを実行してください。

arp [-vn] [-i インターフェイス名] [-a] [IPアドレス]

ARPテーブルに追加する場合は次のコマンドを実行してください。

arp [-v] [-i インターフェイス名] -s [IPアドレス] MACアドレス

ARPテーブルを削除する場合は次のコマンドを実行してください。

arp [-v] [-i インターフェイス名] -d [IPアドレス]

<オプション>
-a
ARPテーブルの内容を表示します。
-s
ARPテーブルへ指定したホスト名(またはIPアドレス)とMACアドレスのエントリーを追加します。
-i
インターフェイスを指定します。
-d
ARPテーブルから指定されたホスト名のエントリーを削除します。

netmask
このエントリのサブネットマスクを指定して、あるサブネット全体のためのエントリーであることを示します。
-n
出力をIPアドレスのみに抑制します。
-D
MACアドレスの代わりにインターフェイスを指定すると、そのインターフェイスのMACアドレスを使用できます。

 


<戻る>