メモのページ - チラシの裏メモ 3枚目

通信技術や気になった事を黙々とメモし続ける

VyOSの中に保存されているファイルを吸い出す

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構成を組んでみた