ラベル IEWB-RS の投稿を表示しています。 すべての投稿を表示
ラベル IEWB-RS の投稿を表示しています。 すべての投稿を表示

2009年12月12日土曜日

IEWB-RS-VOL2-V5 を使ってみる

CCIE R&S v4.0 に対応した IEWB の Dynamips 版 Wookbook の配布が開始 されました。
「MPLS VPN」というセクションができてます。早速、自宅で学習を始めようと思っています。

私の場合、Ubuntu 9.10 (amd64) 上で GNS3 を使ってラボを構築しています。

GNS3 のインストールは、こちら を参照してください。
GNS3 の初期設定は、こちら を参照してください。
IEWB-RS-VOL2-V4.1 については、こちら を参照してください。

仮想ラボの準備

  1. 下記のスクリプトを "setup_iewb-rs-vol2-v5.sh" というファイル名で保存します。
    #! /bin/bash
    # IEWB-RS-VOL2-V5 のラボを GNS3 用にセットアップするスクリプトです。

    # 使用する IOS イメージのパス
    # オリジナルの設定では、「c3725-adventerprisek9-mz.124-15.T10.bin, 3725, ADVANCED ENTERPRISE SERVICES)」を使用しているので、3725 の IOS が使用できれば一番よいです。
    # 他の機種では、仮想ルータのインタフェースの設定を変更しなければならないかもしれません。
    # NM-16ESW (Ethernet switch module, 16 ports) が使えるプラットフォームを選ぶ必要があります。
    # Dynagen Tutorial (Hardware Currently Emulated)
    # http://dynagen.org/tutorial.htm#_Toc193248012
    # で、使えるプラットフォームを確認します。
    IOSIAMGE='/var/images/c3725.image'

    # DRAM の容量
    # Cisco Feature Navigator
    # http://tools.cisco.com/ITDIT/CFN/Dispatch?act=rlsSelect&task=search&searchby=software
    # で DRAM の容量を調べることができます。
    DRAM='256'

    # IDLEPC 値
    IDLEPC='0x12345678'

    # 作業用ディレクトリ
    WORKDIR="$PWD/iewb-rs-vol2-v5"

    # トポロジー ダウンロード URL
    # Internetwork Expert のサイト
    # http://www.internetworkexpert.com/resources/iosonpc.htm
    # [Click here to download the Internetwork Expert Topologies for Dynagen]
    # のリンクを指定します。
    TOPO_URL='http://www.internetworkexpert.com/downloads/internetwork.expert.topologies.zip'

    # 初期設定ファイル ダウンロード URL
    # Member Site にサインインします。
    # http://members.internetworkexpert.com/
    # [R&S Dynamips Lab Workbook v5] をクリックします。
    # [Initial Configs] のリンクを指定します。
    # 各行に各ラボの URL を記述します。
    INITCONF_URL=(
    http://(秘密)/IEWB-RS-VOL-2-DYN.lab1.initial.configs.v5.00.zip
    :
    :
    )

    # トポロジーを展開後にできる sample_labs/internetworkexpert ディレクトリの位置
    SAMPLEDIR="$WORKDIR/sample_labs/internetworkexpert"

    # Network File のファイル名
    NETWORKFILE="$SAMPLEDIR/ine.routing.and.switching.topology.5.00.net"

    # 引数が与えられていなければ、使用方法を表示して終了します。
    if [ -z "$2" ]; then
    echo "Usage: $0 <仮想ラボを設置するディレクトリ> <ラボの番号>"
    exit 1
    fi

    # 与えられた引数を仮想ラボを設置するディレクトリに設定します。
    LABDIR="$1"

    # ラボの番号を設定します。
    LABNO="$2"

    # 作業用ディレクトリを作成します。
    [ -d "$WORKDIR" ] || mkdir "$WORKDIR"

    # 作業用ディレクトリに移動します。
    cd "$WORKDIR"

    # トポロジーをダウンロードします。
    zipfile=`basename "$TOPO_URL"`
    [ -f "$zipfile" ] || wget "$TOPO_URL"

    # トポロジーを含む ZIP ファイルを展開します。
    [ -d "$SAMPLEDIR" ] || unzip "$zipfile"

    i=1
    for url in ${INITCONF_URL[@]}; do
    # 初期設定ファイルをダウンロードします。
    zipfile=`basename "$url"`
    [ -f "$zipfile" ] || wget "$url"

    # 初期設定ファイルを含む ZIP ファイルを展開します。
    [ -d "$WORKDIR/lab$i" ] || unzip -d "$WORKDIR/lab$i" "$zipfile"
    i=$((i+1))
    done

    # 仮想ラボを設置するディレクトリを作成します。
    [ -d "$LABDIR" ] || mkdir -p "$LABDIR"

    # Network File を lab.net として仮想ラボを設置するディレクトリにコピーします。
    cp "$NETWORKFILE" "$LABDIR/lab.net"

    # 仮想ルータの設定ファイルを保存するディレクトリを作成します。
    [ -d "$LABDIR/lab_configs" ] || mkdir "$LABDIR/lab_configs"

    # NVRAM などを保存するディレクトリ (workingdir) を作成します。
    [ -d "$LABDIR/lab_working" ] || mkdir "$LABDIR/lab_working"

    # 仮想ルータ R1~R6、SW1~SW4、BB1~BB3 の初期設定ファイルを設置する。
    for f in "$WORKDIR/lab$LABNO/Initial Configs/Rack1/"*.txt; do
    cp "$f" "$LABDIR/lab_configs/"
    done

    for i in `seq 1 6`; do
    mv "$LABDIR/lab_configs/"r$i.txt \
    "$LABDIR/lab_configs/R$i.initial.config.txt"
    done

    for i in `seq 1 4`; do
    mv "$LABDIR/lab_configs/"sw$i.txt \
    "$LABDIR/lab_configs/SW$i.initial.config.txt"
    done

    for i in `seq 1 3`; do
    mv "$LABDIR/lab_configs/"BB$i.txt \
    "$LABDIR/lab_configs/BB$i.initial.config.v5.txt"
    done

    # Network File (lab.net) の改行を CRLF から LF に変換します。
    # また、コメント行、空行を削除します。
    perl -pi -e 's/\s+$/\n/' "$LABDIR/lab.net"
    perl -ni -e 's/\s*#.*//; print unless (/^\s*$/)' "$LABDIR/lab.net"

    # "image =" に、使用する IOS イメージのパスを設定します。
    perl -pi -e "s#image =.*#image = $IOSIAMGE#" "$LABDIR/lab.net"

    # "ram = " に DRAM の容量を設定します。
    perl -pi -e "s/ram =.*/ram = $DRAM/" "$LABDIR/lab.net"

    # "idlepc =" に使用する IOS イメージに対応する idlepc 値を設定します。
    perl -pi -e "s/idlepc =.*/idlepc = $IDLEPC/" "$LABDIR/lab.net"

    # "workingdir =" に NVRAM などを保存するディレクトリを設定します。
    perl -pi -e "s#workingdir =.*#workingdir = $LABDIR/lab_working#" \
    "$LABDIR/lab.net"

    # "cnfg =" に仮想ルータの設定ファイルのパスを設定します。
    perl -pi -e "s#cnfg =.*initial.configs/#cnfg = $LABDIR/lab_configs/#" \
    "$LABDIR/lab.net"

    # メモリの使用方法を最適化します。
    # 参考: Dynagen Tutorial (Memory Usage Optimizations)
    # http://dynagen.org/tutorial.htm#_Toc193248009
    # 既定値は、mmap = true, ghostios = false, sparsemem = false です。
    # 実メモリが十分ある場合には、mmap = false, ghostios = false にすると効率が良いようです。
    # 逆に実メモリが少ない場合には、mmap = true, ghostios = true にしましょう。
    # sparsemem は、dynamips の1プロセス当たりの仮想ルータを多くする時には、true にする必要があります。
    perl -pi -e 's/mmap =.*/mmap = false/' "$LABDIR/lab.net"
    perl -pi -e 's/ghostios =.*/ghostios = false/' "$LABDIR/lab.net"

    # TermServ を使用せずに、GNU Sreen で仮想ルータのコンソールを切り替えるので、
    # [[Router TermServ]] のセクションが不要となります。削除します。
    perl -ni -e 'print $_ unless (/\[\[Router TermServ/ .. /cnfg =.*RSTermServ/)' \
    "$LABDIR/lab.net"

    # 初期設定ファイルに合わせて、S0/? を S1/? に変換する。
    perl -pi -e 's#S0/(\d)#S1/$1#g' "$LABDIR/lab.net"

    # 仮想ルータへコンソール接続するためのスクリプトを生成します。
    cat <<'EOF' >"$LABDIR/console.sh"
    #! /bin/bash
    routers=(
    EOF

    perl -ne 'print " \"$1\"\n" if (/\[\[router (\w+)/i or /console = (\d+)/i)' \
    "$LABDIR/lab.net" >>"$LABDIR/console.sh"

    cat <<'EOF' >>"$LABDIR/console.sh"
    )

    for ((i = 0; i < ${#routers[*]}; i = i + 2)); do
    screen -t ${routers[$i]} \
    telnet localhost ${routers[$(($i + 1))]} >/dev/null 2>&1
    sleep 1
    done
    EOF

    # console.sh に実行権限を設定します。
    chmod +x "$LABDIR/console.sh"

  2. スクリプトを実行します。
    (例) "/var/labs/iewb/lab1" というディレクトリにラボ番号1 (Lab1) の環境を構築する場合

    ./setup_iewb-rs-vol-2-v5.sh /var/labs/iewb/lab1 1

仮想ラボの起動
  1. GNU Screen を起動します。

    $ screen

  2. gns3 の引数に Network File を与えて起動します。
    (例) Network File のパスが、/var/labs/iewb/lab1/lab.net の場合

    $ gns3 /var/labs/iewb/lab1/lab.net &

  3. ワークスペースでアイコンが重ならないように位置を調整する。(任意)

  4. 仮想ルータを起動する。

    GNS3 のコンソール => start /all

  5. console.sh で、仮想ルータのコンソールに接続する。

    $ /var/labs/iewb/lab1/console.sh

  6. 各仮想ルータにログインし、running-config を startup-config に保存する。

    R1#wr
    R2#wr
    :

  7. GNS3 の [ネットワークファイルに保存] ボタンを押して、仮想ルータの設定をエクスポートする。設定は、startup-config (NVRAM) からエクスポートされるため、事前に仮想ルータの running-config を startup-config に保存すること。



参考

2009年11月28日土曜日

IEWB Vol.II Lab 2 の進捗

CCIE Routing & Switching Lab Workbook Volume II (Dynamips Edition) を使ってラボ試験対策を実施中です。進捗を記録していくつもりです。

Lab 1

2009/11/26 完了

Lab 2

1. Bridging & Switching, 7 / 16 Points
1.1. VLAN Assignments, 2 Points, ×, 2009/11/28
1.2. EtherChannel, 2 Points, ○, 2009/11/28
1.3. EtherChannel, 2 Points, ×, 2009/11/28
1.4. Link Aggregation, 3 Points, ○, 2009/11/28
1.5. Trunking, 2 Points, ×, 2009/11/28
1.6. Pruning, 2 Points, ○, 2009/11/28
1.7. 802.1x Authentication, 3 Points, ×, 2009/11/28
2. Freme Relay, 4 / 9 Points
2.1. Full Mesh, 2 Points, ×, 2009/11/29
2.2. Point-to-Point, 2 Points, ○, 2009/11/29
2.3. Point-to-Point, 2 Points, ○, 2009/11/29
2.4. Frame Relay Traffic Shaping, 3 Points, ×, 2009/11/29
3. HDLC/PPP, 2 / 4 Points
3.1. HDLC, 2 Points, ○, 2009/11/29
3.2. PPP, 2 Points, ×, 2009/11/29
4. Interior Gateway Routing
4.1. OSPF, 2 Points, ○, 2009/12/3
4.2. OFPF, 2 Points, ×, 2009/12/3
4.3. OPSF, 2 Points, ○, 2009/12/3
4.4. EIGRP, 2 Points
4.5. EIGRP, 2 Points
4.6. EIGRP, 2 Points
4.7. EIGRP, 2 Points
4.8. Routing Redundancy, 3 Points
4.9. RIPv2, 2 Points
4.10. RIP Filtering, 2 Points
4.11. IGP Redistribution, 3 Points

参考

2009年9月25日金曜日

tclsh で ping

Cisco IOS に tcl スクリプトが使える機能がある。私は、tcl が分からないので、自由に使いこなせない。

CCIE ラボ試験やその演習で各ルータのインタフェースへの疎通確認を何度も行う必要があるのだが、
foreach ループで ping を繰り返すテクニックはよく知られているようだ。
IEWB-RS の演習でさっそく試してみた。
  1. 各ルータ、スイッチで、"sh ip int b | e unass" を実行して、インタフェースに割り当てられた IP アドレスをコピーし、メモ帳に貼り付ける。
  2. 以下のように編集して、インタフェース名と IP アドレスを foreach ループで囲う。
    tclsh
    foreach D {
    ----R1
    FastEthernet0/0 10.1.1.1
    Serial1/0 10.1.2.1
    Loopback0 10.1.3.1
    ----R2
    FastEthernet0/0 10.2.1.2
    Serial1/0 10.2.2.2
    Loopback0 10.2.3.2
    } { if { [ regexp {^\d} $D ] } {
    ping $D re 2 } else { puts "$D\n" } }
    tclquit
  3. これを、貼り付けて実行すれば OK。
    ※ 実際には、tclsh だけ先に入力しておかないと、入力が早すぎてエラーになってしまった。
参考

2009年9月23日水曜日

GNS3 / Dynamips で %CDP-4-DUPLEX_MISMATCH が表示される

%CDP-4-DUPLEX_MISMATCH は、イーサネット インタフェースの Duplex が一致していないことを CDP で検知したときに表示されます。


実環境の場合

実環境で、このメッセージを見たら、片方がオートネゴシエーションになっていて、片方が Full duplex 固定設定になっている可能性が非常に高いです。この組み合わせにしてはいけません。

片方がオートネゴシエーションで片方が固定だと、速度は常に検知できるので、オートネゴシエーション側は、固定側で設定されている速度になります。Duplex は、対向が固定だと検知できないため、必ず Half duplex になります。これは、知らない人が多くよくトラブルの原因になります。Duplex が合っていなくても、通信できてしまいます。ただ、コリジョンが多発することになるため、遅延が起きます。ネットワーク技術者の新人研修で、必ず教えてあげましょう。


Dynamips の場合

さて、Dynamips で仮想ラボ環境を構築した場合に、このメッセージが出ることがあります。
Dynamips では、正しくオートネゴシエーションがエミュレートできてないためではないかと思います。
また、PING 試験の結果が、不安定な場合も、Dupex / Speed を確認した方が良いです。
接続するモジュールの組み合わせによって、症状が異なるようです。
できるだけ Duplex も Speed も同じになるように設定した方が良いと思いますが、NM16-ESW は、固定設定が正しくできないようです。


Dynamips (NM-4E と NM-1FE-TX) の場合

オートネゴシエーションの設定ができないイーサネット インタフェース NM-4E とファスト イーサネット インタフェースを接続した場合、トラブルが発生します。
NM-4E は、デフォルトで half-duplex に設定されています。対向がファスト イーサネット インタフェース NM-1FE-TX の場合、デフォルトの speed auto, duplex auto の設定なら、10M/Half にならなくてはなりませんが、そうなりません。100M/Full で認識してしまいます。
そこで、回避策として NM-1FE-TX 側で、speed 10, duplex half の設定を行います。


Dynamips (NM-4E と NM16-ESW) の場合

イーサネット インタフェース NM-4E と EtherSwitch ネットワーク モジュール NM16-ESW の場合も、%CDP-4-DUPLEX_MISMATCH のメッセージが表示されます。
NM16-ESW 側は、デフォルトの speed auto, duplex auto の設定なら、10M/Half にならなくてはなりませんが、そうなりません。100M/Full で認識してしまいます。
そこで、回避策として NM16-ESW 側で、speed 10, duplex half の設定を行ってみましたが、100M/Full で認識してしまいます。
仕方ないので、NM-4E 側で、full-duplex に設定します。NM16-ESW 側では、固定の設定にしても 100M/Full で認識してしまいます。


Dynamips (GT96100-FE と NM-16ESW) の場合

ファスト イーサネット インタフェース GT96100-FE と EtherSwitch ネットワーク モジュール NM16-ESW の場合も、%CDP-4-DUPLEX_MISMATCH のメッセージが表示されます。
GT96100-FE 側は、デフォルトの speed auto, duplex auto の設定なら、100M/Full にならなくてはなりませんが、そうなりません。10M/Half で認識してしまいます。
そこで、回避策として GT96100-FE 側で、speed 100, full-duplex の設定を行います。
NM16-ESW 側は、100M/Full で認識します。


まとめ (Dynamips での回避策)
  • NM-4E と NM-1FE-TX の組み合わせ
    NM-4Eの設定: half-duplex (デフォルト) → 10M/Half で認識する
    NM-1FE-TX の設定: speed 10, duplex half → 10M/Half で認識する
  • NM-4E と NM16-ESW の組み合わせ
    NM-4Eの設定: full-duplex → 10M/Full で認識する
    NM-1FE-TX の設定: speed auto, duplex auto → 100M/Full で認識する
    ※ 注意: 固定設定でも 100M/Full で認識してしまう
  • GT96100-FE と NM-16ESW の組み合わせ
    NM-4Eの設定: speed 100, full-duplex → 100M/Full で認識する
    NM-1FE-TX の設定: speed auto, duplex auto → 100M/Full で認識する

参考

GNS3 / Dynamips を使用する場合の注意点

GNS3 / Dynamips を使用する場合の注意点
  • GNS3 を終了する前に、[ネットワークファイルに保存] ボタンで設定を保存すること。"./lab_configs/ROUTER.cfg" ファイルに仮想ルータの設定がエクスポートされます。設定は、startup-config (NVRAM) からエクスポートされるため、事前に仮想ルータの running-config を startup-config に保存すること。次回起動時にエクスポートした設定で起動します。

  • Dynamips は Catalyst をエミュレートできないため、Catalyst の代わりに NM-16ESW (Ethernet switch module, 16 ports) を使って、仮想ラボを構築しています。NM-16ESW では、VLAN database mode でのみ VLAN を作成できます。また、Catalyst の show vlan に相当するコマンドは、show vlan-switch になります。

  • Dynamips では、フラッシュへの vlan.dat の更新が失敗することがあるようです。グローバル コンフィギュレーション モードで "vtp file nvram:vlan.dat" として、vlan.dat を NVRAM に作成するようにします。(Flash filesystem)

  • スイッチの初期設定に VLAN の設定が含まれている場合、NM-16ESW では、VLAN の設定が反映されません。vlan database モードで設定を投入してください。
    (例)
    conf t
    vtp file nvram:vlan.dat
    end
    vlan database
    vtp domain CISCO
    vtp transparent
    vlan 10 name VLAN_10
    :
    exit
    wr
  • NM16-ESW では、DTP が動作しません。"switchport mode dynamic" コマンドは、"switchport mode trunk" または "switchport mode access" に置き換えます。

  • NM16-ESW では、ISL が動作しません。IEEE 802.1Q を使用するように変更します。

  • NM16-ESW では、PAgP、LACP が動作しません。EtherChannel は、手動で有効 (mode on) にします。

  • NM16-ESW では、L3 の EtherChannel はサポートしません。(channel group on dynamibs - IEOC - Internetwork Expert's Online Community)

  • オートネゴシエーションが正しく動作しないようです。
    %CDP-4-DUPLEX_MISMATCH のメッセージが表示されたら、オートネゴシエーションが正しく動作していないので、Duplex/Speed を固定しましょう。NM16-ESW と NM4-E との接続の場合は次のように設定します。NM16-ESW では、固定設定が正しく動作せず、100M/Full になってしまうので、NM4-E を Full 固定の設定にしましょう。詳しくは、こちら を参照してください。

    NM4-E(config)#int e0/0
    NM4-E(config-if)#full-duplex

  • EtherSwitch ネットワーク モジュール NM16-ESW は、対向のルータのインタフェースをシャットダウンしても、リンクが UP の状態のままです。

参考

2009年9月19日土曜日

R&S Dynamips Lab Workbook v4.1 Part 1 を使ってみる

GNS3 のインストールは、こちら を参照してください。
GNS3 の初期設定は、こちら を参照してください。
IEWB-RS-VOL2-V5 については、こちら を参照してください。

Internetwork Expert のワークブックには、Dynamips エディションがあります。

CCIE Routing & Switching Lab Workbook Volume II (Dynamips Edition)

私は、R&S Dynamips Lab Workbook v4.1 Part 1 を購入しました。ここでは、Ubuntu にインストールした GNS3 でワークブックを使用する方法を説明します。なお、Windows で利用する場合は、はっとさんのサイト が分かり易いと思います。

仮想ラボの準備

下記のスクリプトを "setup_iewb.sh" というファイル名で保存します。
#! /bin/bash
# iewb-rs-dyn.v4.10 のラボを GNS3 用にセットアップするスクリプトです。

# 使用する IOS イメージのパス
# オリジナルの設定では、「c3640-jk9o3s-mz.123-14.T7.bin (12.3(14)T7, 3640, ENTERPRISE/FW/IDS PLUS IPSEC 3DES)」を使用しているので、3640 の IOS が使用できれば一番よいです。
# NM-16ESW (Ethernet switch module, 16 ports) が使えるプラットフォームを選ぶ必要があります。
# Dynagen Tutorial (Hardware Currently Emulated)
# http://dynagen.org/tutorial.htm#_Toc193248012
# で、使えるプラットフォームを確認します。
# 3660 などは、slot 0 で使えるモジュールが固定なので、仮想ルータのインタフェースの設定を変更する必要があります。
IOSIAMGE='/var/images/c3640.image'

# DRAM の容量
# Cisco Feature Navigator
# http://tools.cisco.com/ITDIT/CFN/Dispatch?act=rlsSelect&task=search&searchby=software
# で DRAM の容量を調べることができます。
DRAM='128'

# IDLEPC 値
IDLEPC='0x12345678'

# 作業用ディレクトリ
WORKDIR="$PWD/iewb-rs-dyn.v4.10"

# トポロジー ダウンロード URL
# Internetwork Expert のサイト
# http://www.internetworkexpert.com/resources/iosonpc.htm
# [Click here to download the Internetwork Expert Topologies for Dynagen]
# のリンクを指定します。
TOPO_URL='http://www.internetworkexpert.com/downloads/internetwork.expert.topologies.zip'

# 初期設定ファイル ダウンロード URL
# Member Site にサインインします。
# http://members.internetworkexpert.com/
# [R&S Dynamips Lab Workbook v4.1 Part 1] をクリックします。
# [IEWB-RS-DYN-EL-1 Initial Configs] のリンクを指定します。
INITCONF_URL=http://(秘密)/iewb-rs-dyn.v4.10.initial.configs.zip

# トポロジーを含む ZIP ファイル
TOPO_ZIP="$WORKDIR/internetwork.expert.topologies.zip"

# 初期設定ファイルを含む ZIP ファイル
INITCONF_ZIP="$WORKDIR/iewb-rs-dyn.v4.10.initial.configs.zip"

# トポロジーを展開後にできる sample_labs/internetworkexpert ディレクトリの位置
SAMPLEDIR="$WORKDIR/sample_labs/internetworkexpert"

# Network File のファイル名
NETWORKFILE="$SAMPLEDIR/ine.routing.and.switching.topology.4.01.net"

# 引数が与えられていなければ、使用方法を表示して終了します。
if [ -z "$2" ]; then
echo "Usage: $0 <仮想ラボを設置するディレクトリ> <ラボの番号>"
exit 1
fi

# 与えられた引数を仮想ラボを設置するディレクトリに設定します。
LABDIR="$1"

# ラボの番号を設定します。
LABNO="$2"

# 作業用ディレクトリを作成します。
[ -d "$WORKDIR" ] || mkdir "$WORKDIR"

# 作業用ディレクトリに移動します。
cd "$WORKDIR"

# トポロジーをダウンロードします。
[ -f "$TOPO_ZIP" ] || wget "$TOPO_URL"

# 初期設定ファイルをダウンロードします。
[ -f "$INITCONF_ZIP" ] || wget "$INITCONF_URL"

# トポロジーを含む ZIP ファイルを展開します。
[ -d "$SAMPLEDIR" ] || unzip "$TOPO_ZIP"

# 初期設定ファイルを含む ZIP ファイルを展開します。
[ -f "$WORKDIR/iewb-rs-dyn.v4.lab1.rack1r1.txt" ] || unzip "$INITCONF_ZIP"

# 仮想ラボを設置するディレクトリを作成します。
[ -d "$LABDIR" ] || mkdir -p "$LABDIR"

# Network File を lab.net として仮想ラボを設置するディレクトリにコピーします。
cp "$NETWORKFILE" "$LABDIR/lab.net"

# 仮想ルータの設定ファイルを保存するディレクトリを作成します。
[ -d "$LABDIR/lab_configs" ] || mkdir "$LABDIR/lab_configs"

# NVRAM などを保存するディレクトリ (workingdir) を作成します。
[ -d "$LABDIR/lab_working" ] || mkdir "$LABDIR/lab_working"

# 仮想ルータ BB1~BB3 の初期設定ファイルを設置する。
for f in "$SAMPLEDIR/initial.configs"/BB?.initial.config.txt; do
cp "$f" "$LABDIR/lab_configs/"
done

# 仮想ルータ R1~R6、SW1~SW4 の初期設定ファイルを設置する。
for f in "$WORKDIR"/*.lab$LABNO.*.txt; do
cp "$f" "$LABDIR/lab_configs/"
done

for i in `seq 1 6`; do
mv "$LABDIR/lab_configs"/*.rack1r$i.txt \
"$LABDIR/lab_configs/R$i.initial.config.txt"
done

for i in `seq 1 4`; do
mv "$LABDIR/lab_configs"/*.rack1sw$i.txt \
"$LABDIR/lab_configs/SW$i.initial.config.txt"
done

# Network File (lab.net) の改行を CRLF から LF に変換します。
# また、コメント行、空行を削除します。
perl -pi -e 's/\s+$/\n/' "$LABDIR/lab.net"
perl -ni -e 's/\s*#.*//; print unless (/^\s*$/)' "$LABDIR/lab.net"

# "image =" に、使用する IOS イメージのパスを設定します。
perl -pi -e "s#image =.*#image = $IOSIAMGE#" "$LABDIR/lab.net"

# "ram = " に DRAM の容量を設定します。
perl -pi -e "s/ram =.*/ram = $DRAM/" "$LABDIR/lab.net"

# "idlepc =" に使用する IOS イメージに対応する idlepc 値を設定します。
perl -pi -e "s/idlepc =.*/idlepc = $IDLEPC/" "$LABDIR/lab.net"

# "workingdir =" に NVRAM などを保存するディレクトリを設定します。
perl -pi -e "s#workingdir =.*#workingdir = $LABDIR/lab_working#" \
"$LABDIR/lab.net"

# "cnfg =" に仮想ルータの設定ファイルのパスを設定します。
perl -pi -e "s#cnfg =.*initial.configs\\\\#cnfg = $LABDIR/lab_configs/#" \
"$LABDIR/lab.net"

# メモリの使用方法を最適化します。
# 参考: Dynagen Tutorial (Memory Usage Optimizations)
# http://dynagen.org/tutorial.htm#_Toc193248009
# 既定値は、mmap = true, ghostios = false, sparsemem = false です。
# 実メモリが十分ある場合には、mmap = false, ghostios = false にすると効率が良いようです。
# 逆に実メモリが少ない場合には、mmap = true, ghostios = true にしましょう。
# sparsemem は、dynamips の1プロセス当たりの仮想ルータを多くする時には、true にする必要があります。
perl -pi -e 's/mmap =.*/mmap = false\n ghostios = false/' "$LABDIR/lab.net"

# TermServ を使用せずに、GNU Sreen で仮想ルータのコンソールを切り替えるので、
# [[Router TermServ]] のセクションが不要となります。削除します。
perl -ni -e 'print $_ unless (/\[\[Router TermServ/ .. /cnfg =.*RSTermServ/)' \
"$LABDIR/lab.net"

# 仮想ルータへコンソール接続するためのスクリプトを生成します。
cat <<'EOF' >"$LABDIR/console.sh"
#! /bin/bash
routers=(
EOF

perl -ne 'print " \"$1\"\n" if (/\[\[router (\w+)/i or /console = (\d+)/i)' \
"$LABDIR/lab.net" >>"$LABDIR/console.sh"

cat <<'EOF' >>"$LABDIR/console.sh"
)

for ((i = 0; i < ${#routers[*]}; i = i + 2)); do
screen -t ${routers[$i]} \
telnet localhost ${routers[$(($i + 1))]} >/dev/null 2>&1
sleep 1
done
EOF

# console.sh に実行権限を設定します。
chmod +x "$LABDIR/console.sh"
  1. スクリプトを実行します。
    (例) "/var/labs/iewb/lab1" というディレクトリにラボ番号1 (Lab1) の環境を構築する場合
    ./setup_iewb.sh /var/labs/iewb/lab1 1
仮想ラボの起動
  1. GNU Screen を起動します。

    $ screen

  2. gns3 の引数に Network File を与えて起動します。
    (例) Network File のパスが、/var/labs/iewb/lab1/lab.net の場合

    $ gns3 /var/labs/iewb/lab1/lab.net &

  3. ワークスペースでアイコンが重ならないように位置を調整する。

  4. 仮想ルータを起動する。

    GNS3 のコンソール => start /all

  5. console.sh で、仮想ルータのコンソールに接続する。

    $ /var/labs/iewb/lab1/console.sh

  6. 各仮想ルータにログインし、running-config を startup-config に保存する。

    R1#wr
    R2#wr
    :

  7. GNS3 の [ネットワークファイルに保存] ボタンを押して、仮想ルータの設定をエクスポートする。設定は、startup-config (NVRAM) からエクスポートされるため、事前に仮想ルータの running-config を startup-config に保存すること。


参考

GNS3 の初期設定

GNS3 のインストールは、こちら を参照してください。

ここでは、Ubuntu で GNS3 / Dynampis をインストールした場合で説明しています。
私は、ターミナルコマンドとして GNU Screen を利用しています。仮想ルータのコンソールの切り替えが容易なので、Linux で GNS3 を利用するなら、非常にお勧めです。
Ubuntu にローカルにログインして、X 上で 端末を立ち上げるか、リモートから ssh で -X オプション (X11 フォワーディング) で接続します。私は、Windows 端末で、Cygwin/X を動かし、Cygwin の ssh を使用して -X オプション付きで Ubuntu にログインしています。

Ubuntu にログインしたら、GNU Screen の設定ファイル (~/.screenrc) を作成します。この設定ファイルにより、下段にタイトルが表示されます。また、screen のコマンドキーが、既定値の [Ctrl] + [A] から、[Ctrl] + [T] に変更されます。[Ctrl] + [A] は、シスコルータでも行頭に移動するキーバインドなので、あまり使用しない [Ctrl] + [T] に変更するのがお勧めです。

  1. 必要があれば、GNU Screen をインストールします。

    $ sudo apt-get intstall screen

  2. GNU Screen の設定ファイル "~/.screenrc" を作成 します。

    $ cat >~/.screenrc <<'EOF'
    escape ^Tt
    startup_message off
    defscrollback 1000
    hardstatus alwayslastline "%w"
    EOF

  3. GNU Screen の設定ファイルを作成したら、"screen" コマンドで screen を起動します。

    $ screen

  4. GNS3 を起動するには、"/usr/local/bin/gns3" を実行します。"/usr/local/bin" にパスを通しておいてください。

    $ gns3 &


  5. GNS3 の初回起動時 (~/.gns3/gns3.ini が無い場合) には、Setup Wizard が起動します。[OK] をクリックして、Setup Wizard を終了します。

  6. GNS3 のメニューの Edit > Preferences... で設定を起動し、General > Genral Settings > Language を日本語 (jp) に変更します。これ以降、メニューが日本語化されます。

  7. GNS3 のメニュー [編集]-[設定...]-[一般設定]-[General Settings]-[ターミナルコマンド]: screen -t %d telnet %h %p >/dev/null 2>&1

(作成中...)


Ubuntu に GNS3 をインストールする

Dynamips という Cisco ルータのエミュレータがあります。Cisco 技術者認定の学習に大変役立つツールだと思います。Dynamips だけでは、仮想ラボを構築のためのトポロジーを作成するのが難しいため、DynagenGNS3 (GUI) を利用します。GUI 版である GNS3 がかなり洗練されているので、GNS3 + Dynamips の組み合わせを推奨します。

また、CCIE の学習用教材で有名な Internetwork Expert のワークブックには、Dynamips エディションがあります。


ワークブックを利用するための環境構築をこれから説明していこうと思います。

Windows 版のバイナリがありますが、Windows で動作させるよりも Linux で動作させる方が効率がよいらしいので、ここでは、Ubuntu にインストールする例を説明します。

環境

今回、インストールした環境です。
  • CPU: AMD Phenom X4 クアッドコア・プロセッサ 9750, 2.40GHz
  • メモリ: 8GB
  • Ubuntu 9.04 (amd64)
パッケージによる Dynamips と GNS3 のインストール

パッケージによるインストールは簡単ですが、最新版を使えないかもしれません。
  1. Dynamips をインストールする。

    $ sudo apt-get update
    $ sudo apt-get install dynamips

  2. GNS3 をインストールする。

    $ sudo apt-get install gns3
ソースからの Dynamips と GNS3 のインストール

ソールからのインストールは少し面倒ですが、最新版を使えます。
  1. 開発環境をインストールする。

    $ sudo apt-get update
    $ sudo apt-get install build-essential

  2. Dynamips に依存関係のあるものをインストールする。

    $ sudo apt-get install libpcap0.8-dev libelf-dev

  3. 作業用ディレクトリを作成し、Dynamips のソースをダウンロード、展開する。

    $ mkdir /dev/shm/dynamips
    $ cd /dev/shm/dynamips
    $ wget 'http://downloads.sourceforge.net/gns-3/dynamips-0.2.8-RC2.tar.gz'
    $ tar xzf dynamips-0.2.8-RC2.tar.gz
    $ cd dynamips-0.2.8-RC2

  4. Makefile を編集する。

    $ vi Makefile
    -- -- -- -- -- -- -- -- Makefile を編集
    6行目> DYNAMIPS_ARCH?=amd64 ← 64bit CPU の場合は、amd64 に変更
    16行目> HAS_POSIX_MEMALIGN?=1
    26行目> DESTDIR?=/usr/local
    62行目> DESTDIR=/usr/local
    -- -- -- -- -- -- -- --

  5. コンパイルし、シンボルを削除する。

    $ make
    $ strip dynamips nvram_export

  6. インストールする。

    $ sudo make install
    -- -- -- -- -- -- -- -- 以下のファイルがインストールされる
    install -d /usr/local/bin /usr/local/man/man1 /usr/local/man/man7 /usr/local/etc
    install dynamips nvram_export /usr/local/bin
    install -m644 dynamips.1 /usr/local/man/man1
    install -m644 nvram_export.1 /usr/local/man/man1
    install -m644 hypervisor_mode.7 /usr/local/man/man7
    -- -- -- -- -- -- -- --

  7. dynamips のバージョン確認をする。

    $ dynamips | grep version
    Please specify an IOS image filename
    Cisco Router Simulation Platform (version 0.2.8-RC2-amd64)

  8. 作業用ディレクトリを削除する。

    $ cd /dev/shm
    $ rm -R dynamips

  9. GNS3 に依存関係のあるものをインストールする。

    $ sudo apt-get install python-qt4

  10. 作業用ディレクトリを作成し、GNS3 のソースをダウンロード、展開する。

    $ mkdir /dev/shm/gns3
    $ cd /dev/shm/gns3
    $ wget 'http://downloads.sourceforge.net/gns-3/GNS3-0.6.1-src.tar.gz'
    $ tar xzf GNS3-0.6.1-src.tar.gz

  11. /usr/local/gns3 に配置する。

    $ sudo mv GNS3-0.6.1-src /usr/local/gns3
    $ sudo chown -R root:root /usr/local/gns3

  12. /usr/local/bin/gns3 に起動用のスクリプトを作成する。

    $ cat >gns3 <<'EOF'
    #! /bin/sh
    /usr/local/gns3/gns3 "$@"
    EOF
    $ sudo mv gns3 /usr/local/bin/
    $ sudo chown root:root /usr/local/bin/gns3
    $ sudo chmod 755 /usr/local/bin/gns3

  13. gns3 のバージョン確認をする。

    $ gns3 --version
    gns3 0.6.1

  14. 作業用ディレクトリを削除する。

    $ cd /dev/shm
    $ rm -R gns3