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 に保存すること。


参考

0 件のコメント: