Powered by SmartDoc

情報通信ネットワーク論(2003/06/20)
Ver. 1.1

2003年6月20日
栗野 俊一
日本大学 理工学部 数学科
kurino@math.cst.nihon-u.ac.jp
http://edu-gw2.math.cst.nihon-u.ac.jp/~kurino/2003/ccna/ccna.html
情報通信ネットワーク論2003/06/20 の資料

目次

目的

この演習の目的は次の三つです。

LinuxとWindowsのNetwork設定方法の復習
一回目二回目の実習の復習(特にWindows, Linux操作)。
LinuxによるRouter機能の実現
LinuxをRouterとして、利用するために必要な設定方法の理解。
Routing Tableの必要性とその設定方法
複雑なNetworkを構成するには、RouterのRouting Tableの作成が必要であり、それの設定方法を学ぶ。

演習

Linux PCでRouterを作り、運用するための導入を行います。

実験1:Linux Router で二つのNetwork を結ぶ

実験1 のNetwork

まず、Linux PCをRouterとして利用できることを確認するために、次のようなNetworkを構成します。

Networkの構成要素
Network
Networkは次の二つです。
Network の情報
Network Name Network Address Subnet Mask
Network 1 192.168.1.0 255.255.255.0 (/24)
Network 2 192.168.2.0 255.255.255.0 (/24)
Host/Router

Host (Windows-PC)は、二台、Router (Linux-PC)は一台です。なお、このNetworkでは、Name Serverが存在しないので、Name Serverは、設定しません。

また、Routerには、Default Gatewayは、設定しません(図中ではN/Aで表現している。)。

実験 1 の Host の情報
Host Name Interface IP Address Subnet Mask Default Gateway
Windows-A N/A 192.168.1.1 255.255.255.0 (/24) 192.168.1.2
Windows-B N/A 192.168.2.4 255.255.255.0 (/24) 192.168.2.3
Linux-X eth0 192.168.1.2 255.255.255.0 (/24) N/A
eth1 192.168.2.3 255.255.255.0 (/24) N/A
論理図

            Windows-A
          [192.168.1.1]
                |                         192.168.1.0/24
        >-------+--------------+------------<
                               |
                         eth0:[192.168.1.2]
                            Linux-X
                         eth1:[192.168.2.3]
                               |          192.168.2.0/24
        >-------+--------------+------------<
                |
          [192.168.2.4]
            Windows-B
物理図
        +------------+
        |            |
        |            |   192.168.1.1
        | Windows-A  +------------------+   192.168.1.0/24
        |            |                  |   +------------+
        +------------+                  |   |            |
                                        +---+            |
                                            |            |
                                            | Hub/Switch |
                                        +---+            |
        +------------+                  |   |            |
        |            | eth0:192.168.1.2 |   +------------+
        |            +------------------+
        | Linux-X    | eth1:192.168.2.3
        |            +------------------+   192.168.2.0/24
        |            |                  |   +------------+
        +------------+                  |   |            |
            (*) PC Card を二枚挿す。    +---+            |
                                            |            |
                                            | Hub/Switch |
                                        +---+            |
        +------------+                  |   |            |
        |            |  192.168.2.4     |   +------------+
        |            +------------------+
        | Windows-B  |
        |            |
        +------------+
設定
Windows-A/Windows-B

Windowsの設定は、一回目手動設定の所を参考にしてください。

また、IP Address, Subnet Mask, Default Gatewayは、表2.1.1.2[実験 1 の Host の情報]を参照してください。

なお、Name Serverの設定は、今回は行いません。

Linux-X

Linuxの設定は、二回目手動設定の所を参考にしてください。

また、IP Address, Subnet Maskは、表2.1.1.2[実験 1 の Host の情報]を参照してください。

なお、Default Gateway, Name Serverの設定は、今回は行いません。

注意点としては、Linux-Xは、二つのEthernet Interface ( eth0とeth1 )を持つということで、先に挿した方のPC Cardが、eth0になり、後から挿した方が、eth1になります。

そこで、二つのSlotの内、下の方を先に入れ、後から上を入れるか、あるいは、cardctlコマンドを利用して、次のように明示的に、指定すると良いかもしれません。

PC Card の設定
[root@Linux-X /root]# cardctl eject
[root@Linux-X /root]# cardctl insert 0
[root@Linux-X /root]# cardctl insert 1
[root@Linux-X /root]# 

最初のコマンドは、「全てのカードを抜け」という意味になり、次のコマンドは、「Slot 0 (下)のカードを挿せ」の意味になり、最後の命令が「Slot 1(上)カードを挿せ」の意味となる(1)

ので、このコマンドにより、「下→上」の順番に挿したのと同じ効果が得られます。

これによって、下がeth0,上がeth1という関係も成り立つようになります。

また、IP AddressとNetmaskを設定する場合は、eth0とeth1では当然、別々の設定を行いますので、それぞれ、次のようなコマンドで設定することになります。

Linux-X のIP Address/Subnet Mask の設定
[root@Linux-X /root]# ifconfig eth0 192.168.1.2 netmask 255.255.255.0
[root@Linux-X /root]# ifconfig eth1 192.168.2.3 netmask 255.255.255.0
[root@Linux-X /root]# 
  1. PCによっては、この時に、ピッ、ブッと、二度目の音が、鈍い音(設定に失敗した意味)になることがあります。

    原則として、これは、気にする必要はありません。なぜなら、その理由は、/etc/sysconfig/network-scripts/ifcfg-eth1が存在しないからだけで、これ以後の作業には、影響しないからです。

    しかし、どうしても気になるのでしたら、次のようにして、/etc/sysconfig/network-scripts/ifcfg-eth1を作ればよいでしょう。

    ifcfg-eth1 の作成
    [root@Linux-X /root]# echo \
        DEVICE="eth1">/etc/sysconfig/network-scripts/ifcfg-eth1
    [root@Linux-X /root]# echo \
        BOOTPROTO="none">>/etc/sysconfig/network-scripts/ifcfg-eth1
    [root@Linux-X /root]# echo \
        ONBOOT="no">>/etc/sysconfig/network-scripts/ifcfg-eth1
    [root@Linux-X /root]#
    

実験1 の内容

この状態で、pingを行うと次のような結果になるはずです。実際にWindows-A/BやLinux-Xから、Pingを行って、このような結果になることを確かめなさい。

実験 1 の結果
From / To Windows-A Linux-X Windows-B
Windows-A OK OK NG
Linux-X OK OK OK
Windows-B NG OK OK

実験 1 のまとめ

実験1では、同一のNetwork (同じHub )に接続されているHost間での通信はできたが、異なるNetwork間で接続されているHost ( Windows-AとWindows-B )間では、通信できなかった。

これは、単にケーブルを結んだだけでは繋がらないということを意味します。

実は、実験1でWindows-A, B間が接続できなかった理由は、単にLinux-Xで、Routerとして設定( IP Forwarding : IPの転送機能)の設定がなされてなかったからです。

これは/proc/sys/net/ipv4/ip_forwardの内容が0であることで確認できます。

IP Forwarding の確認
[root@Linux-X /root]# cat /proc/sys/net/ipv4/ip_forward
0
[root@Linux-X /root]#

ということで、次の実験では、IP Forwardingの設定をすると、Networkに跨る通信ができるということを確認します。

実験2:Forwarding

実験2 のNetwork

実験1と実験2では、Network構成は、全く同じです。ただし、Linux-Xが、IP Forwardingを行うように、次の設定を行います。

IP Forwarding の設定
[root@Linux-X /root]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@Linux-X /root]#

これは、/proc/sys/net/ipv4/ip_forwardの中身を1にするという作業です。

実際に、ip_forwardの中身が(以前の0から現在設定した..) 1になっていることも確認してみましょう。

実験 2 の内容

この状態で、pingを行うと次のような結果になるはずです。実際にWindows-A/BやLinux-Xから、Pingを行って、このような結果になることを確かめなさい。

実験 2 の結果
From / To Windows-A Linux-X Windows-B
Windows-A OK OK OK
Linux-X OK OK OK
Windows-B OK OK OK

実験 2 のまとめ

実験1と実験2の違いは、Windows-A, B間の通信が可能になったという点です。これは、当然、実験2でのIP Forwardingの設定の差であることに注意してください。

逆に、このような追加設定が必要であっても、要するに、異なるNetwork間を繋ぐには、今回のLinux-XのようなRouter機能をもった、装置を間に挟めば、通信が可能になるということも大きなポイントです。

実験3:Linux Router で三つのNetwork を結ぶ

実験3 のNetwork

実験3では、実験1, 2と異なり、今度は、3つのNetworkを結びます。

構成としては、Network 3と、Linux-Y,そして、Windows-Cを実験1, 2のNetworkに追加した形になっています。

Networkの構成要素
Network
Networkは次の三つです。新たに追加されたのは、Network 3です。
Network の情報
Network Name Network Address Subnet Mask
Network 1 192.168.1.0 255.255.255.0 (/24)
Network 2 192.168.2.0 255.255.255.0 (/24)
Network 3 192.168.3.0 255.255.255.0 (/24)
Host/Router
Host (Windows-PC)は、三台、Router (Linux-PC)は二台です。Windows-Cと、Linux-Yの二台が追加分です。
実験 3 の Host の情報
Host Name Interface IP Address Subnet Mask Default Gateway
Windows-A N/A 192.168.1.1 255.255.255.0 (/24) 192.168.1.2
Windows-B N/A 192.168.2.4 255.255.255.0 (/24) 192.168.2.3
Windows-C (新規追加) N/A 192.168.3.7 255.255.255.0 (/24) 192.168.3.6
Linux-X eth0 192.168.1.2 255.255.255.0 (/24) N/A
eth1 192.168.2.3 255.255.255.0 (/24) N/A
Linux-Y (新規追加) eth0 192.168.2.5 255.255.255.0 (/24) N/A
eth1 192.168.3.6 255.255.255.0 (/24) N/A
論理図

             Windows-A
           [192.168.1.1]
                |                         192.168.1.0/24
        >-------+--------------+------------<
                               |
                         eth0:[192.168.1.2]
                             Linux-X
                         eth1:[192.168.2.3]
                               |          192.168.2.0/24
        >-------+--------------+------------<
                |              |
          [192.168.2.4]  eth0:[192.168.2.5]
            Windows-B        Linux-Y
                         eth1:[192.168.3.6]
                               |          192.168.3.0/24
        >-------+--------------+------------<
                |
          [192.168.3.7]
            Windows-C

物理図
        +------------+
        |            |
        |            |   192.168.1.1
        | Windows-A  +------------------+   192.168.1.0/24
        |            |                  |   +------------+
        +------------+                  |   |            |
                                        +---+            |
                                            |            |
                                            | Hub/Switch |
                                        +---+            |
        +------------+                  |   |            |
        |            | eth0:192.168.1.2 |   +------------+
        |            +------------------+
        | Linux-X    | eth1:192.168.2.3
        |            +------------------+   192.168.2.0/24
        |            |                  |   +------------+
        +------------+                  |   |            |
            (*) PC Card を二枚挿す。    +---+            |
                                            |            |
        +------------+                      |            |
        |            |  192.168.2.4         | Hub/Switch |
        |            +----------------------+            |
        | Windows-B  |                      |            |
        |            |                  +---+            |
        |            |                  |   |            |
        +------------+                  |   +------------+
                                        |
                                        |
        +------------+                  |
        |            | eth0:192.168.2.5 |
        |            +------------------+
        | Linux-Y    | eth1:192.168.3.6
        |            +------------------+   192.168.3.0/24
        |            |                  |   +------------+
        +------------+                  |   |            |
            (*) PC Card を二枚挿す。    +---+            |
                                            |            |
                                            | Hub/Switch |
                                        +---+            |
        +------------+                  |   |            |
        |            |  192.168.3.7     |   +------------+
        |            +------------------+
        | Windows-C  |
        |            |
        +------------+
設定
Windows-A/B/C
Windows-A/Bの設定は、実験1, 2と同じままで、Okeyです。Windows-Cの設定は、表2.3.1.2[実験 3 の Host の情報]を参照してください。
Linux-X/Y

Linux-Xの設定は、実験2のまま(ちゃんとIP Forwardingできる形)で、Linux-Yの設定を行います。

IP Address, Subnet Maskは、表2.3.1.2[実験 3 の Host の情報]を参照します。当然のことながら、Linux-YもIP Forwardingできる状態にしましょう。

実験3 の内容

この状態で、pingを行うと次のような結果になるはずです。実際にWindows-A/B/CやLinux-X/Yから、Pingを行って、このような結果になることを確かめなさい。

実験 1 の結果
From / To Windows-A Linux-X Windows-B Linux-Y Windows-C
Windows-A OK OK OK NG NG
Linux-X OK OK OK OK NG
Windows-B OK OK OK OK NG
Linux-Y NG OK OK OK OK
Windows-C NG NG NG OK OK

実験 3 のまとめ

実験2と実験3では、かなり奇妙な結果になっていることがわかります。Windows-AとWindows-Bがちゃんと、通信できているのに、Windows-CとWindows-Bは通信ができませんし、また、Windows-BとLinux-Yは、同じ所にあるのに、Windows-Bは、Windows-Aと通信ができて、Linux-Yは、Windows-Aと通信ができません。

これは、何が起きているのでしょうか?

Windows-BとLinux-Yの違い

この違いは、実は、前者が、Default GatewayをLinux-X (の192.168.2.3 )に向けているのに対し、Linux-Yは、Default Gatewayを設定していないところに問題があります。

Windows-Bは、Windows-AのIP Address (192.168.1.1)を与えると、自分のIP Addres 192.168.2.4と比較します。ここで、Subnet Maskが、255.255.255.0 (/24)なので、比較するのは、上の三つの数だけ(つまり、192.168.2と192.168.1 )を比較します。

すると、これが、異なるので、この場合は、Default GatewayであるLinux-Xに投げます。Linux-Xは、これを受け取ると、今度は、( eth0側のNetworkに)直接Windows-Aがいることがわかる( eth0の192.168.1.2の上の三つの数192.168.1とWindows-Aの192.168.1.1の上の三つの数192.168.1を比較すると同じなる)ので、その通信をWindwos-Aに中継できるわけです。

もちろん、Windows-Aも同様な流れ(2)で、Windows-Bに返事を返します(3)

ところが、Linux-Yは、Windows-Aの192.168.1.1と比較して、自分の所属する二つのNetwork ( eth0の192.168.2.5, 192.168.3.6 )のいずれとも異なる上に、Default Gatewayがないので、通信のしようがないわけです。

Windows-CからWindows-Bに行けない理由

Windows-CからWindows-B Pingが通らない理由は、次の通りです。

まず、Windows-Cは、自分のIP Address 192.168.3.7の上位3つの192.168.3と、通信先のWindows-BのIP Address 192.168.2.4の上位三つ192.168.2を比較し、異なるNetworkにいることを理解します。

そして、Default GatewayであるLinux-Y (192.168.3.6)が設定されていますので、Linux-Yに投げます。

Linux-Yはもちろん、eth0側に、Windows-Bがいるので、実は、ちゃんと、このパケット(行き)は、Windows-Bまで届くのです。

ところがです。今度は、Windows-Bからの返事ですが、これは、返事を返す先である、Windows-Cが、異なるNetworkにいるということで、Linux-Xに投げるのですが、Linux-Xは、192.168.3のNetworkを知りません。ということで、返事が返らないわけです。

  1. 重要なポイントなので、是非、自分でも考えてみよう。
  2. 注意して欲しいのは、Pingは、パケットが行って帰ってきて始めてOkeyになることである。行けなければもちろん、行けても帰って来れなければ、通信できことにはならず、Pingは失敗する。

実験4:Routing の設定

実験3では、Linux-Yが、Network 1のことを知らなかったり、あるいは、Linux-Xが、Network 2のことを知らなかったために、通信がうまく行きませんでした。

そこで、Linux-X/Yに、それぞれNetwork 2/1のことを教えてやれば、通信ができそうです。

今回の実験では、その設定方法を学びます。

実験4 のNetwork

実験4のNetworkは、実験3と同じですが、次のように、Linux-XにNetwork 2のことを教えます。

これを、(static:静的) Routing の設定と呼びます。

Linux-X でのNetwork 3 へのRouting の設定
[root@Linux-X /root]# route add -net 192.168.3.0 netmask \
    255.255.255.0 gw 192.168.2.5
[root@Linux-X /root]# 

これは、default gateway の設定とよく似ている(4)ことがわかります。

  1. というか、全く同じ形です。

実験4 の解説

この状態で、pingを行うと、今度は、Windows-B/C間での通信が可能になることがわかると思います(5)

ただし、Windows-A/C間はまだです。なぜなら、まだ、Linux-YでのNetwork 1へのRoutingの設定がなされていないからです。

もし、上記のことが確認したら、同様にLinux-Yに設定を加えてみましょう。

また、もし、時間があったら、なぜ、Linux-X, Linux-YそれぞれにDefault Gatewayを相互に設定するのではだめ(6)かも考えて見ましょう。

  1. pingの代わりにtracerouteでは、どうだろうか?
  2. 実際、このような設定を行うと、実は、全てのHost間でのPingが通り、今回のように、一々、Networkを設定した場合と結果が同じように見える(確かめてみよう)。

    しかし、Networkに存在しないIP AddressにTracerouteした場合に結果が異なる。