トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

ネットワークの構築

はじめに

この項目では,ネットワーク構築の基礎を習得するのが目的である.
まず,ルータを構築し,LAN と基幹のネットワークの接続を行う.そして,端末に対し自動的にネットワークパラメータの設定を行なうために必要なDHCP (Dynamic Host Con guration Protocol) サーバを構築し,LAN 内で自身のコンピュータのネットワーク利用を行う.また,構築したルータを利用し,スタティック及びダイナミックルーティングを行う.図1は構築するネットワークのイメージである.

図1 構築するネットワークのイメージ

1. ホストへのアドレスの割り振り

IP アドレスは32 bit (4 octet 及び4 byte) の大きさを持っている値である.現在のネットワークではIP アドレスと伴に同様な大きさを持つサブネットマスクと呼ぶ値を持つ.また,IP アドレスとサブネットマスクの論理積を取って,得られた値をネットワークアドレスと呼ぶ.例えば,以下のアドレスを持ったネットワークがある.

ネットワークアドレス: 192.168.1.0 サブネットマスク: 255.255.255.0 または,192.168.1/24

このネットワークアドレスの下位8 bit はホストを表現するために利用する.これをホスト部と呼ぶ.ホスト部においてbit が全て0 を表すアドレスはネットワークアドレスを意味するため予約されている.これが192.168.1.0 となる.また,全て1 を表すアドレスは,ブロードキャスト(放送) を表すアドレスとして利用される.これが192.168.1.255 となる.これを考慮すると,ホストでは192.168.1.1〜192.168.1.254 のアドレスが利用できることとなる.

サブネット内の他のホストと通信を行う場合は,所属するサブネットに適合するIP アドレスとサブネットマスクのアドレスが必要となる.また,他のサブネットと通信を行う場合は,デフォルト経路となっているルータのアドレスを設定する必要がある.一般的にデフォルト経路のアドレスは,所属するサブネットにおいてルータとして機能しているホストのインタフェースのアドレスを選択する.

先の例では,ネットワークアドレスは192.168.1/24 であるので,ルータのLAN 側のインタフェースのアドレスを192.168.1.1 とした場合,これがデフォルト経路のアドレスとなる.よって,ホストのアドレスとして,192.168.1.2〜192.168.1.254 の割り振りが可能となる.図2 はWindows におけるPC のネットワーク設定である.IP アドレス,ネットマスク,デフォルトゲートウェイ(デフォルト経路) 及びDNS サーバに適切なパラメータを与えればよい.

図2 IPアドレス等の指定

ping コマンド

ping コマンドは,宛先ホストとの通信が可能かどうかを確認するためのコマンドである.手法としては,ICMP のecho,echo reply メッセージを利用している.
実行には,

ping ホスト名またはIP アドレス

とする.

測定

グループ同志で,同一セグメント(LAN)にホスト(Windows機)を接続すること.

そして,pingコマンドを用いて,同グループのホスト同志の通信が可能かどうか,確認し記録すること.

2. ルータの構築

TCP/IP 上のネットワークは,多くのサブネットワーク(以下サブネット) を複数のネットワークインタフェースを備えたホストであるルータで相互接続したものである.ルータの設定としては,各ネットワークインタフェースに適切なIP アドレスを設定し,各インタフェース間でのパケットを転送が必要となる.また,これからの作業はスーパーユーザーであるroot またはsudoコマンドで行うこととする.

ifconfig コマンド

ifconfig コマンドはネットワークインタフェースの設定を行うコマンドである.
ネットワークインタフェースにIP アドレスを振る場合は,以下の様に実行する.

sudo ifconfig インタフェース名 IPアドレス netmask ネットマスク

ifconfig と実行した場合は,図2 の様にインタフェースの設定一覧が表示される.ifconfig インタフェース名と実行した場合は,そのインタフェースの設定が表示される.

route コマンド

ルータが所属しているサブネット間の転送を行う場合はインタフェースの設定のみでよいが,2 ホップ以上の距離があるネットワークに転送を行う場合は,適切な経路の設定が必要となる.route コマンドは経路の設定を行うコマンドである.
経路を追加する場合は,

sudo route add 宛先ネットワークアドレス gw ゲートウェイ インタフェースと実行する.

パケットを転送するための設定

ホストが無条件にパケットを転送する設定は,セキュリティ上好ましくないため,標準設定では不可
となっている./proc/sys/net/ipv4/ip_forward
の値を1に変更するば転送が行える.
変更するには,

echo 1 >/proc/sys/net/ipv4/ip_forward

と実行する(sudoではなく,ユーザrootでないとうまくいかない様である).

ルータの構成例

ルータの構成例を図3 に示す.下のルータは192.168.1/24のアドレスを持つサブネット1 と,192.168.0/24のアドレスを持つサブネット2 間での中継を可能とするものとする.

ルータはネットワークインタフェースにサブネットに適合したIP アドレスを持たせる必要がある.ここでは,サブネット1 (LAN) に接続するインタフェースIF1 に192.168.1.1 を持たせ,サブネット2(バックボーン) に接続するインタフェースに192.168.0.32 を持たせたとする.これは図3 の様なパラメータを持ったネットワークになる.

ここで行う必要がある作業は,上で行ったネットワークインタフェースの設定と,パケットの転送を
可能にする設定である.この例では,以下の様に実行する.

sudo ifconfig eth0 192.168.1.1 netmask 255.255.255.0
sudo ifconfig eth1 192.168.0.32 netmask 255.255.255.0
sudo sh -c "echo 1 >/proc/sys/net/ipv4/ip_forward"

これにより,上記の2 サブネット間での転送が可能となる.

図3 ルータの構築

測定

同一セグメント(LAN)にルータを接続すること.

そして,ホスト(Windows機)からpingコマンドを用いて,ルータのLAN側のインタフェースとコアルータとの通信が可能かどうか,確認し記録すること.

3. 経路の追加

経路は大きく分けて,各ネットワークへの経路と,デフォルト経路がある.経路選択で指定されているルータは,その先の経路(ルータ) の解決が出来るものと仮定している.デフォルト経路は経路表にその選択したネットワークへの経路がない場合に選択される.
先のネットワークにデフォルトルータを接続した図4 に示すネットワークがあるとする.ルータに,このデフォルト経路を設定することにより,インターネットとの接続が可能となるとする.
デフォルト経路の追加の場合は,

sudo route add default gw ゲートウェイ

と実行する.ここでは,デフォルトルータのアドレスを192.168.0.1 とし,

sudo route add default gw 192.168.0.1

と実行することにより,デフォルト経路が設定される.これにより,インターネットとの接続が可能になる.

図4 デフォルト経路の追加

先のネットワークにサブネット3 を接続した図5 に示すネットワークがあるとする.ここでは,ルータにサブネット3 の経路を追加する.サブネット3 のネットワークアドレスを192.168.2/24 とし,経路となるルータのアドレスを192.168.0.64 とする.

ここでは,

sudo route add -net 192.168.2.0 gw 192.168.0.64 netmask 255.255.255.0 eth1

と実行することにより,サブネット3 の経路が設定される.

図5 サブネットの追加

経路表

経路表の確認は,

route

と実行する.

traceroute コマンド

traceroute (Windows ではtracert) コマンドは,宛先ホストまでのルータを調べるためのコマンドである.手法としては,IP ヘッダのTTL フィールドとICMP のtime exceeded メッセージを利用している.

実行には,

traceroute ホスト名またはIP アドレス

とする.

また,Windows 上での実行には,

tracert ホスト名またはIP アドレス

とする.

測定

デフォルト経路を追加した場合と,デフォルト経路と各ネットワークの経路を追加した場合で,ルータの経路表と自グループのホスト(Windows機)から他グループのホスト(Windows機)へのtracertコマンドの結果を記録すること.

4. アドレスおよび設定の固定

IPアドレスを変更する場合は/etc/dhcpcd.confというファイルを以下の様に加筆する.

sudo emacs /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.1.1/24
interface eth1
static ip_address=192.168.0.32/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

IPフォワーディングを有効にする.

sudo emacs /etc/sysctl.conf

以下をアンコメントする.

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

これにより,上記のコマンドを入力したのと同等となる(スタティックルーティングは除く).

5. DHCPサーバの設定

コンピュータがネットワークパラメータを取得する手段が幾つか存在するが,ほぼ完全に自動的に設定を行うために標準化されたものとしてDHCP (Dynamic Host Configuration Protocol) がある.BOOTP(Bootstrap Protocol) の様に手動的に設定を行わせることも可能であるが,DHCP ではネットワークパラメータを自動的設定することが可能であり,さらに一定の時間のみの貸し出しを行う動的設定も可能である.DHCP はネットワークパラメータを割り振るサーバ及びそれを利用するクライアントで構成される.

想定するネットワーク

ここでは,以下のネットワーク下での設定を想定する.ネットワークアドレスが192.168.1/24 のサブネット1 があり,デフォルト経路は192.168.1.1 とする.このサブネット下で,192.168.1.3 から192.168.1.10 のIP アドレスを配布するものとする

図6 DHCP サーバの利用を想定するネットワーク

ISC DHCP

DHCP サーバはISC 版を用いることとする.

インストール

DHCPサーバーをapt-getでインストールする.

sudo apt-get update
sudo apt-get install isc-dhcp-server

/etc/dhcp/dhcpd.confに設定ファイルがインストールされる.

/etc/dhcp/dhcpd.confの編集

以下の様に,編集作業を開始する.

sudo emacs /etc/dhcp/dhcpd.conf

ここに,設定ファイルdhcpd.conf における変更すべき箇所を幾つか列挙する.
初めに,option domain-name,option domain-name-servers,default-lease-time,max-
lease-time 等の初期値を設定する.authoritativeは,アンコメントする.
ダイナミックDNS を用いない場合は,ddns-update-style none にする.

ddns-update-style none;

option domain-name "t1.iep.sie.dendai.ac.jp";
option domain-name-servers 192.168.0.1;
default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

ルータの設定となっている場合には,WAN 側に対しネットワークパラメータを配布しない場合にダミーの設定を行う必要がある.サブネット2 における設定では,括弧で囲んだ部分にネットワークパラメータを記述しない.

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
subnet 192.168.0.0 netmask 255.255.255.0 {
}

サブネット1 における,配布すべきネットワークパラメータの設定を以下に示す.まずは,subnet 以下にネットワークアドレス及びサブネットマスクを定義する.これの後に続くf g で囲んだ部分には,配布するネットワークパラメータを記述することになる.range 以下には,配布するIP アドレスの範囲を指定する.ここでは,192.168.1.3 から192.168.1.10 の値を設定している.option routers ではデフォルト経路のアドレスを指定している.ここでは,192.168.1.1 の値を指定している.

# This is a very basic subnet declaration.
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.3 192.168.1.10;
  option routers 192.168.1.1;
}

ISC-DHCP は,上述以外にも様々なパラメータの配布が可能である.詳しくは,コマンドman dhcpd及び他の文献を参照するとよい.

/etc/default/isc-dhcp-serverの編集

以下の様に,編集作業を開始する.

sudo emacs /etc/default/isc-dhcp-server
INTERFACES=" "


INTERFACES="eth0″

とする.

起動には,以下のコマンドを入力する.

sudo systemctl start isc-dhcp-server

自動起動するためには,以下のコマンドを入力する.

sudo systemctl enable isc-dhcp-server

状態を知りたい場合は,以下のコマンドを入力する.

sudo systemctl status isc-dhcp-server

/etc/rc.localのexit 0の前に以下を追加してください。

sleep 10
service isc-dhcp-server start

測定

ホスト(Windows機)でアドレス等をDHCPで取得する様に変更し,アドレス等のパラメータの取得を試みる.

そして,ホストでcmd(コマンドプロンプト)を起動し,ipconfig /allを実行し,DHCPサーバからパラメータが取得出来ているか確認すること.

6. ダイナミックルーティング

route コマンドを用いれば,静的なルーティングを行えるが,ネットワークの経路の状態は常に安定だとは限らない.例えばルータの故障により,経路が失われたり,誤った設定のルータにより宛先にパケットが配送されないことも起こりうる.自動的に経路制御を行う方法として,ダイナミックルーティングがある.ダイナミックルーティングには外部ネットワーク向けのEGP (Exterior Gateway Protocol),内部ネットワーク向けのIGP (Interior Gateway Protocol) に分けられる.今回はIGP の一手法であるRIP (Route Information Protocol) を用いた方法を説明する.

RIP

RIP はベクトル距離制御型のダイナミックルーティングプロトコルである.経路を作成する基準は,距離(メトリック) をコストとして最小になる様にする.RIP の場合は,ホップ数をメトリックとカウントする.RIP は定期的に経路情報をネットワークに放送する.この情報を受けた他のルータは経路情報を更新する.これを繰り返すことにより,経路情報を伝播させる.

quagga

quaggaはルーティングソフトウェア zebra の派生で,OSPF, RIP, BGP4 などが実装されている. quagga にはいくつかのデーモンが含まれている.zebra は quagga のコアデーモンであり,RIPのデーモンはripd である.
また,quagga は Cisco のルータに使用されているIOSに良く似たコマンドを持つ.

インストール

quaggaをapt-getでインストールする.

sudo apt-get update
sudo apt-get install quagga
sudo apt-get install telnet

quagga のコンフィグファイルは /etc/quagga に置かれる.初期状態では daemons と debian.conf が置かれているはずである.

設定ファイル zebra.conf,vtysh.conf,ripd.conf を/etc/quaggaにコピーする.

sudo cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf
sudo cp /usr/share/doc/quagga/examples/ripd.conf.sample  /etc/quagga/ripd.conf
sudo cp /usr/share/doc/quagga/examples/vtysh.conf.sample /etc/quagga/vtysh.conf

設定ファイルの編集

/etc/dhcpcd.confのeth1のstatic routers行をコメントとする.

interface eth1
static ip_address=192.168.0.32/24
#static routers=192.168.0.1
static domain_name_servers=192.168.0.1

zebra と ripd を起動するため,/etc/quagga/daemonsを以下の通りに編集する.

zebra=yes
bgpd=no
ospfd=no
ospf6d=no
ripd=yes
ripngd=no
isisd=no

quaggaの起動

起動には,以下のコマンドを入力する.

sudo systemctl start quagga

自動起動するためには,以下のコマンドを入力する.

sudo systemctl enable quagga

コマンドラインによる設定

まず,ripdにログインする.

telnet localhost ripd

パスワードは,

zebra

である.

それから,以下のコマンドを入力していく.

ripd> enable // 特権EXECモードに遷移する
ripd# configure terminal // グローバルコンフィギュレーションモードに遷移する
ripd(config)# router rip // RIPの設定に遷移する
ripd(config-router)# network 192.168.0.0/24 // WAN側ネットワークの設定
ripd(config-router)# network 192.168.1.0/24 // LAN側ネットワークの設定
ripd(config-router)# network eth1 // ネットワークインタフェースの設定
ripd(config-router)# end // 特権EXECモードに戻る
ripd# show running-config // 設定を見る
ripd# copy running-config startup-config // 起動時に読み込まれる startup-config にコピーする
ripd# exit
ripd> exit

以上の入力を行えば,RIPを実行するルータとして設定される.

測定

RIPを実行した状態で,ルータの経路表と自グループのホスト(Windows機)から他グループのホスト(Windows機)へのtracertコマンドの結果を記録すること.

7. パケットの送出シーケンス,ダンプの記録の測定

TCP/IPのパケットの送出シーケンス,フォーマットを知るために,tcpdumpを用いたパケットの送出,ダンプの記録を行う.

インストール

tcpdumpをapt-getでインストールする.

sudo apt-get update
sudo apt-get install tcpdump

tcpdump コマンド

パケットの観測を行なうためのコマンドとしてtcpdump コマンドが標準で導入される.tcpdump コマンドは,各ネットワークインタフェースに入出力されるパケットの情報を得ることができるコマンドである.

実行には,

sudo tcpdump -i インタフェース名

とする.

また,

sudo tcpdump -i インタフェース名 -x

と実行すれば,受信したパケットの16 進ダンプ表示が得られる.

dhcpを自動起動する方法改

/etc/rc.localのexit0の前に以下を書く.

sudo emacs /etc/rc.local
sleep 3
/usr/bin/sudo /bin/systemctl restart isc-dhcp-server

arp コマンド

ARP (Address Resolution Protocol) は,IP アドレスからEthernet のハードウェアアドレスを解決するためのARPテーブルを作成するためのプロトコルである.arp コマンドは,ARPテーブルのEthernetのハードウェアアドレスと,IP アドレスの対応を得るコマンドである.あるホストのアドレスを得るには,arp ホスト名またはIP アドレス
と実行する.ARP テーブルの一覧を得る場合は,

arp -a

と実行する.

また,ARP によるパケットの交換を観測するためには,ping コマンドを実行する端末のARP テーブルの内容をarp コマンドを用いて消去する必要がある.
ARP テーブルの対応を削除する場合は,

arp -d ホスト名またはIP アドレス

と実行する.

ARP テーブルの対応を全て削除する場合は,

arp -ad

と実行する.

測定

端末からルータに対して,ping コマンドを実行し,tcpdump コマンドを用いてパケットの観測を行なう.また,パケットの16 進ダンプも記録する.ping コマンド実行の前には,端末でarp コマンドを実行し,ARP テーブルの対応を全て削除する.特にARP,ICMP echo,ICMP echo reply パケットの送出のシーケンスを詳細に観測し記録する.

ルータでは,

sudo tcpdump -i eth0 -x

とする.

端末(Windows機)では,管理者で,

arp -ad
ping ルータのLAN側のIPアドレス

とする.

tcpdumpの記録は,WAN側から行うこと(端末とルータのWAN側インタフェースをLANケーブルで直結する).