WS-C3550にTFTPサーバーから設定ファイルを引っ張ってくる

RTX1200みたいにUSBから設定ファイルを読み込む、保存するなんていう便利機能は本来オプションみたいなものなんだね。。。
慣れてくるとUSBの抜き差し面倒くさいし、TFTPのほうがいいかも。

Switch#copy tftp running-config
Address or name of remote host []? 192.168.11.2
Source filename []? switch-confg
Destination filename [running-config]?
Accessing tftp://192.168.11.2/switch-confg...
Loading switch-confg from 192.168.11.2 (via Vlan1): !
[OK - 2635/5120 bytes]
2635 bytes copied in 0.612 secs

で、 running-config の内容を startup-config に保存する。

Switch#copy running-config startup-config
Destination filename [startup-config]?
Building configuration...
[OK]

Raspberry PiをTFTPサーバーにする

最近TFTPを触り始めたのですが、こんなの当たり前すぎてみんな誰も記事にしてないんですかねー・・・。
今回はRaspberry PiをTFTPサーバーにしてみました。

f:id:wnoguchi0727:20140317083245j:plain

以下のコマンドでインストール。

sudo apt-get -y update
sudo apt-get -y install tftpd-hpa

でOKの、はずが

(snip)
Setting up tftpd-hpa (5.2-4) ...
tftpd user (tftp) already exists, doing nothing.
tftpd-hpa directory (/srv/tftp) already exists, doing nothing.
insserv: warning: script 'mathkernel' missing LSB tags and overrides
[....] Starting HPA's tftpd: in.tftpdinvoke-rc.d: initscript tftpd-hpa, action "start" failed.
dpkg: error processing tftpd-hpa (--configure):
subprocess installed post-installation script returned error exit status 71
Errors were encountered while processing:
tftpd-hpa
E: Sub-process /usr/bin/dpkg returned an error code (1)

エラーになった。。。

Oh yes, there’s this Debian bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=544089
OpenMediaVault • View topic – OpenMediaVault on the Home Media CE

そのままだとipv6で見に行こうとするのでだめらしい。
--ipv4TFTP_OPTIONS に渡してあげないといけないようです。
というか、元記事にも書いてありましたね・・・。よく読まないと。

pi@raspberrypi ~ $ grep TFTP_OPTIONS /etc/default/tftpd-hpa
TFTP_OPTIONS="--secure"

たしかに --ipv4 オプションがない。
/etc/default/tftpd-hpa を編集。

TFTP_OPTIONS="--secure"
↓
TFTP_OPTIONS="--secure --ipv4"

ワンライナーは以下。

sudo sed -i -e 's/TFTP_OPTIONS="--secure"/TFTP_OPTIONS="--secure --ipv4"/g' /etc/default/tftpd-hpa

そしてぶっ壊れを修正してあげる。

pi@raspberrypi ~ $ sudo apt-get install -f
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 7 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up tftpd-hpa (5.2-4) ...
tftpd user (tftp) already exists, doing nothing.
tftpd-hpa directory (/srv/tftp) already exists, doing nothing.
insserv: warning: script 'mathkernel' missing LSB tags and overrides
[ ok ] Starting HPA's tftpd: in.tftpd.

立ち上がった。

デフォルトでは /srv/tftp/ がTFTPサーバーのルートになります。
所有権を変えておく。

sudo chown pi. /srv/tftp/

テストとして、WS-C3550のスイッチ設定ファイルをTFTPサーバーと化したRaspberry Pi(192.168.11.7)に送り込んでみる。

まずはTFTPサーバー側に空ファイルを用意しておく。こうしないとnot foundエラーになる。

pi@raspberrypi /srv/tftp $ touch switch-confg && chmod 666 switch-confg

Telnetでスイッチ(192.168.11.50)に接続。

% telnet 192.168.11.50
Trying 192.168.11.50...
Connected to 192.168.11.50.
Escape character is '^]'.
User Access Verification
Password: Kerberos: No default realm defined for Kerberos!
Password:
Switch>enable
Password:
Switch#copy run
Switch#copy running-config tftp
Address or name of remote host []? 192.168.11.7
Destination filename [switch-confg]?
!!
2635 bytes copied in 7.320 secs (376 bytes/sec)

送れたっぽいですね。
Raspberry Pi側で確認。

pi@raspberrypi /srv/tftp $ cat switch-confg | head
!
version 12.1
no service pad
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname Switch
!

見れました。
こういう省電力で静音なマシンにわざわざ大層なサーバーをこしらえるまでもない、ちょっとしたユーティリティ的な仕事させるのっていいですね。

参考文献

WS-C3550の設定ファイルをTFTPサーバーに保存する

はじめに、TFTPサーバー側に受け入れるファイルを用意しておきます。

% touch switch-confg && chmod 666 switch-confg

これをやらないと

TFTP: error code 1 received - File not found

となってしまいます。では、 192.168.11.2 をTFTPサーバーに見立ててトライ。

Switch#copy running-config tftp
Address or name of remote host []? 192.168.11.2
Destination filename [switch-confg]?
!!
2635 bytes copied in 3.200 secs (878 bytes/sec)

最初 not found になってしまったんですが、ファイル名って switch-config じゃなくて switch-confg なんですね。。。

WS-C3550のIOSをTFTPサーバーにバックアップする

今までの前口上で一番やりたかったのはこのIOS(Internetwork Operating System)のTFTPバックアップだったんですが、いろいろと手間取ってしまいました。
ですが、ここのエントリを書くまでに出荷時設定からTelnetの設定のところまでだいぶいい感じにこなれてきました。

ここまででスイッチにIPアドレスが設定されていることを前提にします。

まずはIOSのイメージの場所を調べる。

Switch#show flash
Directory of flash:/
2  -rwx           0   Jan 01 1970 00:01:28  env_vars
3  -rwx         342   Jan 01 1970 00:01:29  system_env_vars
9  drwx         192   Mar 01 1993 00:03:40  c3550-i5q3l2-mz.121-8.EA1c
15998976 bytes total (10893824 bytes free)
Switch#cd c3550-i5q3l2-mz.121-8.EA1c
Switch#show flash
Directory of flash:/c3550-i5q3l2-mz.121-8.EA1c/
10  drwx         640   Mar 01 1993 00:02:33  html
21  -rwx     3290242   Mar 01 1993 00:03:40  c3550-i5q3l2-mz.121-8.EA1c.bin
22  -rwx         252   Mar 01 1993 00:03:40  info
15998976 bytes total (10893824 bytes free)

最初はflashのルートに置いてあるもんだとばかり思っていたのですが、どうも違うみたいでした。
今回は以下の場所においてありました。

/c3550-i5q3l2-mz.121-8.EA1c/c3550-i5q3l2-mz.121-8.EA1c.bin

では、TFTPサーバーにコピーしてみます。
192.168.11.2 はTFTPサーバーのIPアドレスです。
FWが空いていることを確認するのを忘れずに。

Switch#copy flash tftp
Source filename [/c3550-i5q3l2-mz.121-8.EA1c/]? /c3550-i5q3l2-mz.121-8.EA1c/c3550-i5q3l2-mz.121-8.EA1c.bin
Address or name of remote host []? 192.168.11.2
Destination filename [c3550-i5q3l2-mz.121-8.EA1c.bin]?
TFTP: error code 1 received - File not found
%Error opening tftp://192.168.11.2/c3550-i5q3l2-mz.121-8.EA1c.bin (Undefined error)

ファイルが見つかりませんって言われてエラーになってしまいました。
ファイルがないって言うからコピー元のファイルのパスの指定の仕方が間違っていたのかと思って小一時間調べてしまいましたが、

put コマンドで対象ファイル名を指定し、アップロードします。ただし、TFTP でファイルをアップロードする場合、アップロードしようとしているファイルが存在している必要があります(上書きしか出来ません)。TFTP サーバとして公開しているディレクトリに tmp.txt というファイルが無い状態で、tmp.txt をアップロードしようとすると、以下のエラーとなってしまいます。
TFTP サーバを起動する – えこ日記

とのことで、ターゲットにファイルが存在しないとそもそもエラーになってしまうようです・・・。

ところで、今回のTFTPサーバはMacを使用しています。
なので、Mac側で所望のファイル名で空ファイルを作成します。

% touch /private/tftpboot/c3550-i5q3l2-mz.121-8.EA1c.bin

今度はエラーメッセージが変わりました。

TFTP: error code 2 received - Access violation

おそらくパーミッションがないだろうことなので

% chmod 666 /private/tftpboot/c3550-i5q3l2-mz.121-8.EA1c.bin

再度トライ。

Switch#copy flash tftp
Source filename [/c3550-i5q3l2-mz.121-8.EA1c/c3550-i5q3l2-mz.121-8.EA1c.bin]?
Address or name of remote host []? 192.168.11.2
Destination filename [c3550-i5q3l2-mz.121-8.EA1c.bin]?
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(snip)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3290242 bytes copied in 13.352 secs (253095 bytes/sec)

うまくいきましたー。

スイッチだけだけど、これでGNS3が使えるようになるかな?

参考文献

Mac OS XでTFTPサーバーを起動する

Mavericksです。

初めにサービスの設定ファイルを見てみる。

% cat /System/Library/LaunchDaemons/tftp.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>Label</key>
<string>com.apple.tftpd</string>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/tftpd</string>
<string>-i</string>
<string>/private/tftpboot</string>
</array>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<true/>
</dict>
<key>InitGroups</key>
<true/>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>tftp</string>
<key>SockType</key>
<string>dgram</string>
</dict>
</dict>
</dict>
</plist>

まずはサンプルのファイルを用意。

% cat <<EOF | >/private/tftpboot/hello.txt
Hello, and
GoodBye.
EOF

まずはつないでみる。

% tftp localhost
tftp> status
Connected to localhost.
Mode: netascii Verbose: off Tracing: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> quit

Connected って出ておっ、つながったかなっておもうじゃないですか。

% tftp localhost
tftp> get hello.txt
Transfer timed out.
tftp> quit

つながったと思った?残念、つながってませんでした!

% sudo lsof -i:69

空っぽなのです。

サービスを立ち上げます。

% sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist
% sudo lsof -i:69                                                (git)-[master]
COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
launchd   1 root  108u  IPv6 0x4b902fe356b26297      0t0  UDP *:tftp
launchd   1 root  110u  IPv4 0x4b902fe35704aec7      0t0  UDP *:tftp

今度こそ立ち上がったっぽいです。

% tftp localhost
tftp> get hello.txt
Received 26 bytes in 0.0 seconds
tftp> quit

中身を確認。

% pwd
/Users/noguchiwataru/
% cat hello.txt
Hello, and
GoodBye.

用が済んだらサービスを停止する。

% sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist
% sudo lsof -i:69

参考文献