VurtualBoxのゲスト機、VyOSにて実行されたtcpdumpのパケットキャプチャのファイルを、ホスト機側に吸い出した際のメモ。
先日、VyOSでIPsec VPNの設定を行いEnd to Endで疎通確認をした際、VyOSで実行したtcpdumpコマンドのキャプチャファイル(.pcapファイル)をホスト機側のWiresharkで確認する為に、ホスト機側でtftpコマンドを実行しVyOSの中に保存されているキャプチャファイルを吸い出した。
VyOSはCisco CSR1000v等Linuxベースの仮想アプライアンスよりLinux色が強く普通にシェルを叩ける事から、Linuxで立てたサーバのようにコマンドでサービスを立ち上げ、外部からファイルを吸い出せるのではないかと思い、/etc/init.dディレクトリ内を探したところtftpd-hpaを見つけた。
そこでtftpサービスを立ち上げ、ホスト機側でtftpコマンドを叩き目当てのファイルをホスト機側に吸い出す事が出来た。
当方の環境
ホストOS:macOS 10.13.6 / MacBook Air 2011 / RAM: 4GB / CPU: Intel Core i7 1.8GHz
Oracle VirtualBox:6.1.32
ゲストOS:VyOS 1.4 rolling-202104111334
せっかくなのでキャプチャファイルの生成から
まずは、ホスト機側に保存したいファイルを作成するところから始める。
VyOSにてtcpdumpコマンドを打ち、VyOSを通過するトラヒックのパケットキャプチャを実施。
インタフェースeth0を-iオプションで指定し、eth0を通過するトラヒックを対象とする。
src hostとdst hostオプションで、送信元と宛先のIPアドレスを指定し対象となるトラヒックを指定。
キャプチャファイルの保存先を-wオプションで指定。Debian系のLinuxディストリビューションでは、/srv/tftpディレクトリがデフォルトで使用される。
hoge@jpmtkvmrt99:~$ sudo tcpdump -i eth0 src host 192.168.3.98 and dst host 192.168.3.99 -w /srv/tftp/capture_20220131.pcap tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes ^C0 packets captured 53 packet received by filter 0 packets dropped by kernel hoge@jpmtkvmrt99:~$
キャプチャの終了後、/srv/tftpディレクトリ内にキャプチャファイルが保存されている事を確認。
hoge@jpmtkvmrt99:~$ ls /srv/tftp/ capture_20220131.pcap hoge@jpmtkvmrt99:~$
lsコマンドで/etc/init.dディレクトリ内を覗いてみると、tftpd-hpaが有る事が分かる。
tftpd-hpaとはDebianやUbuntuで動作するtftpサーバである。
scpやftpは存在しない事から、tftpを使用しホスト機にキャプチャファイルを持ち出す事とする。
hoge@jpmtkvmrt99:~$ ls /etc/init.d/ accel-ppp haveged LCDd pdns-recursor sfacctd acpid heartbeat lldpd pmacctd snmpd atd hostapd lm-sensors pppd-dns squid atop hwclock.sh logd procps ssh atopacct hyperv-daemons.hv-fcopy-daemon mdadm qat_service sudo conntrackd hyperv-daemons.hv-kvp-daemon mdadm-waitidle qemu-guest-agent telegraf conserver-server hyperv-daemons.hv-vss-daemon ndppd radvd tftpd-hpa console-setup.sh igmpproxy netplug rc uacctd cron ipsec nfacctd rcS udev dbus ipvsadm nginx README vyatta-cluster-conntracksync ddclient isc-dhcp-relay ntp rsync vyatta-config-reboot-params dropbear isc-dhcp-server ocserv rsyslog wide-dhcpv6-client fastnetmon keepalived opennhrp.init salt-minion frr keyboard-setup.sh open-vm-tools screen-cleanup gdomap kmod openvpn sendmail hoge@jpmtkvmrt99:~$
systemctl status tftpd-hpaコマンドでtftpのサービスが動いているか確認。
inactive (dead)と返ってきた為、現状では動いていない事が分かる。
hoge@jpmtkvmrt99:~$ sudo systemctl status tftpd-hpa ● tftpd-hpa.service - LSB: HPA's tftp server Loaded: loaded (/etc/init.d/tftpd-hpa; generated) Active: inactive (dead) Docs: man:systemd-sysv-generator(8) hoge@jpmtkvmrt99:~$
systemctl start tftpd-hpaコマンドを打ち、tftpdサービスを立ち上げる。
hoge@jpmtkvmrt99:~$ sudo systemctl start tftpd-hpa hoge@jpmtkvmrt99:~$
再度systemctl status tftpd-hpaを打ち、active (running)になっている事を確認。
hoge@jpmtkvmrt99:~$ sudo systemctl status tftpd-hpa ● tftpd-hpa.service - LSB: HPA's tftp server Loaded: loaded (/etc/init.d/tftpd-hpa; generated) Active: active (running) since Mon 2022-01-31 19:32:23 JST; 2s ago Docs: man:systemd-sysv-generator(8) Process: 2135 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUCCESS) Tasks: 1 (limit: 546) Memory: 384.0K CGroup: /system.slice/tftpd-hpa.service └─2144 /usr/sbin/in.tftpd --listen --user tftp --address 0.0.0.0:69 --secure /srv/tftp Jan 31 19:32:23 jpmtkvmrt99 systemd[1]: Starting LSB: HPA's tftp server... Jan 31 19:32:23 jpmtkvmrt99 tftpd-hpa[2135]: Starting HPA's tftpd: in.tftpd. Jan 31 19:32:23 jpmtkvmrt99 systemd[1]: Started LSB: HPA's tftp server. hoge@jpmtkvmrt99:~$
VyOSからキャプチャファイルを吸い出す
ここからはホスト機側の操作になる。
iTerm-2等のターミナルツールを立ち上げて、作業用ディレクトリに移動する。
自分の場合/mac/tmpディレクトリが作業用である為、cd tmpコマンドで作業用ディレクトリに移動。
jpmtkmcbk01:~ mac$ cd tmp jpmtkmcbk01:tmp mac$ pwd /Users/mac/tmp jpmtkmcbk01:tmp mac$
tftpコマンドを打ちVyOSに入り、getコマンドでキャプチャファイルをホスト機側に吸い出す。
成功したら、quitコマンドでtftpサーバから抜ける。
jpmtkmcbk01:tmp mac$ tftp 192.168.3.99 tftp> get capture_20220131.pcap Received 24 bytes in 0.0 seconds tftp> tftp> quit jpmtkmcbk01:tmp mac$
lsコマンドを叩き、あるいはファインダーでtmpディレクトリに入り、VyOSから吸い出したキャプチャファイルがホスト機に保存されている事を確認。
jpmtkmcbk01:tmp mac$ ls capture_20220131.pcap jpmtkmcbk01:tmp mac$
ファイルを吸い出した後...
tftpサービスを立ち上げっぱなしにするのは良くない。
終わったらsystemctl stop tftpd-hpaコマンドでtftpdサービスをさっさと落とす。
sudo systemctl status tftpd-hpaコマンドを打ち、inactive (dead)になっている事を確認する。
hoge@jpmtkvmrt99:~$ sudo systemctl stop tftpd-hpa hoge@jpmtkvmrt99:~$ hoge@jpmtkvmrt99:~$ sudo systemctl status tftpd-hpa ● tftpd-hpa.service - LSB: HPA's tftp server Loaded: loaded (/etc/init.d/tftpd-hpa; generated) Active: inactive (dead) Docs: man:systemd-sysv-generator(8) Jan 31 19:32:23 jpmtkvmrt99 systemd[1]: Starting LSB: HPA's tftp server... Jan 31 19:32:23 jpmtkvmrt99 tftpd-hpa[2135]: Starting HPA's tftpd: in.tftpd. Jan 31 19:32:23 jpmtkvmrt99 systemd[1]: Started LSB: HPA's tftp server. Jan 31 20:48:17 jpmtkvmrt99 systemd[1]: Stopping LSB: HPA's tftp server... Jan 31 20:48:17 jpmtkvmrt99 tftpd-hpa[2135]: Stopping HPA's tftpd: in.tftpd. Jan 31 20:48:17 jpmtkvmrt99 systemd[1]: tftpd-hpa.service: Succeeded. Jan 31 20:48:17 jpmtkvmrt99 systemd[1]: Stopped LSB: HPA's tftp server. hoge@jpmtkvmrt99:~$
VyOSから吸い出したファイルが正常に開けるか確認。
キャプチャファイルをWiresharkで開くと、ISAKMPおよびESPで暗号化された通信がキャプチャされている事が分かる。
暗号化通信に関しては、下記リンク先(VyOSでGRE over IPsec VPN構成を組んでみた)を参照。
※画像をクリックすると拡大表示します
今回はここまで。
macOSではデフォルトでtftpコマンドを叩く事が出来る。
Windowsの場合、TFTPクライアントの機能を有効化し、Windows Defenderファイアウォールで簡易ファイル転送プロトコル アプリケーションを有効にする事で、上記と同じ事が出来るようになる。(手順は下記リンク先を参照)
または、Cisco使いにはおなじみの方法ではあるが、tftpd32やtftpd64をインストールしtftpサーバを立ち上げ、Windows Defenderファイアウォールでtftpの通信を許可し、VyOS側でtftpコマンドを叩きホスト機に吐き出すという方法も有る。
VyOSとtftpに関する情報源
https://vyos.io/ VyOS
https://docs.vyos.io/en/latest/index.html VyOS User Guide
https://vyos.net/get/nightly-builds/ VyOS nightly build (バージョン1.4のダウンロードサイト)
https://docs.vyos.io/en/latest/configuration/service/tftp-server.html TFTP Server
https://ex1.m-yabe.com/archives/5162 Windows 10でTFTPクライアントを利用する
VyOSに関する過去の記事
https://debslink.hatenadiary.jp/entry/20171001/1506867093 VyOSをNexus7で動かす
https://debslink.hatenadiary.jp/entry/20171009/1507517604 VyOSをVirtualBox+Vagrantで動かす
https://debslink.hatenadiary.jp/entry/2019/10/13/155145 AndroidスマホでVyOSを動かす
https://debslink.hatenadiary.jp/entry/20220130/1643510508 VyOSでGRE over IPsec VPN構成を組んでみた