はじめに
Dockerでtftpサーバを構築。
特別なことはしてません。
対象機器および環境
検証環境
- CentOS8(8.1.1911)
- Docker(19.03.5)
- tftp-server(5.2)
- xinetd(2.3.15)
作業内容
firewallでポート許可
tftpサービスを待ち受けるようにサービスを許可しておきます
firewall-cmd --add-service=tftp --zone=public --permanent
firewall-cmd --reload
Dockerイメージの準備
再利用できるようにイメージをつくっておきます。
Dockerfileと設定ファイルを置くための適当なディレクトリを作成しておきます
mkdir -p /opt/docker/tftp
cd /opt/docker/tftp
Dockerfileを作成
/opt/docker/tftp/tftp.df
FROM centos:centos8
RUN dnf -y update ; dnf -y install tftp-server xinetd
COPY tftp /etc/xinetd.d/tftp
CMD [ "/usr/sbin/init" ]
xinetdの設定
tftpをxinetd経由で起動するために、設定ファイルを作成しておきます
/opt/docker/tftp/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -c -u root -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
Dockerfileからイメージをビルドしてコンテナ作成
Dockerfileが作成できたら、ビルドします。
tftpは最初に69/udpで接続しますが、その後ポート番号をネゴってデータ転送するので、bridgeだとポート転送しにくい。
ので、hostネットワークに接続してしまいます。
docker build --force-rm -t infraserv:tftp . -f ./tftp.df && \
docker run --cap-add sys_admin --security-opt seccomp:unconfined -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--network host -it -d --name tftp --hostname tftp infraserv:tftp
動作確認
手元にあったCiscoのルータで確認
Rdc01#copy run tftp://10.254.10.251/rdc01-config
Address or name of remote host [10.254.10.251]?
Destination filename [rdc01-config]?
!!
11944 bytes copied in 1.112 secs (10741 bytes/sec)
Rdc01#copy tftp://10.254.10.251/rdc01-config flash:
Destination filename [rdc01-config]?
Accessing tftp://10.254.10.251/rdc01-config...
Loading rdc01-config from 10.254.10.251 (via Vlan10): !
[OK - 11944 bytes]
11944 bytes copied in 0.652 secs (18319 bytes/sec)
Rdc01#