Agora posso consertá-lo. Por padrão, o vsftpd estava escutando em IPv4 e IPv6 com a configuração padrão, etc; e eu comento a configuração do IPv6 e só configuro o IPv4, e depois todo o trabalho.
Sou iniciante no Docker, tenho um vsftpd em um Debian e para o modo passivo eu configurei em vsftpd:
pasv_enable=YES
pasv_min_port=65000
pasv_max_port=65000
pasv_address=192.168.1.31
e eu mostro com wireshark essa resposta do servidor com porta passiva 65000 mas com IP passivo 0.0.0.0 e não entendo porque se eu configurei IP passivo. Quando eu executo o docker eu vinculo as portas 21 e 65000 (e no Dockerfile eu exponho 21 e 65000) e conexão na porta 21 e modo ativo é bom, mas eu preciso usar também o modo passivo. Em wireshark eu mostro:
227 Entering Passive Mode (0,0,0,0,253,232).
Passive IP address: 0.0.0.0 (0.0.0.0)
Passive port: 65000
Passive IP NAT: True
Dockerfile:
FROM debian:jessie
RUN apt-get update
RUN apt-get dist-upgrade -y
RUN apt-get install -y -q --no-install-recommends vsftpd
RUN apt-get clean
RUN echo "local_enable=YES" >> /etc/vsftpd.conf
RUN echo "chroot_local_user=YES" >> /etc/vsftpd.conf
RUN echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf
RUN echo "write_enable=YES" >> /etc/vsftpd.conf
RUN echo "pasv_enable=YES" >> /etc/vsftpd.conf
RUN echo "pasv_min_port=65000" >> /etc/vsftpd.conf
RUN echo "pasv_max_port=65000" >> /etc/vsftpd.conf
RUN echo "pasv_address=192.168.1.31" >> /etc/vsftpd.conf
RUN mkdir -p /var/run/vsftpd/empty
EXPOSE 21/tcp
EXPOSE 65000/tcp
CMD vsftpd
E eu construo e executo com comandos:
docker build -t vsftpd .
docker run -d -p 21:21 -p 65000:65000 -v /etc/passwd:/etc/passwd:ro -v /etc/shadow:/etc/shadow:ro -v /etc/group:/etc/group:ro -v /home:/home vsftpd
Eu também tento executar o docker com mais parâmetros:
docker run -d -p 192.168.1.31:21:21 -p 192.168.1.31:65000:65000 -v /etc/passwd:/etc/passwd:ro -v /etc/shadow:/etc/shadow:ro -v /etc/group:/etc/group:ro -v /home:/home vsftpd
E no modo ativo tudo funciona bem, só falha no modo passivo e não entendo porque o servidor diz ao cliente que se conecta ao 0.0.0.0 com o pasv_address configurado. Eu montei passwd, shadow e group to container como somente leitura para usar usuários locais em vsftpd e home para usuários locais chroot, ele é encontrado em modo ativo bom. Estou tentando tudo em máquina virtual no modo bridge, e na máquina virtual eu tenho um servidor Ubuntu com docker.io 1.2.0.