我是 Docker 的初学者,我在 Debian 中有一个 vsftpd,并且对于被动模式,我在 vsftpd 中配置了:
pasv_enable=YES
pasv_min_port=65000
pasv_max_port=65000
pasv_address=192.168.1.31
我用 wireshark 显示服务器响应被动端口 65000 但被动 IP 为 0.0.0.0,我不明白为什么我配置了被动 IP。当我运行 docker 时,我绑定了端口 21 和 65000(在 Dockerfile 中我公开了 21 和 65000),端口 21 和主动模式的连接很好,但我还需要使用被动模式。我在 wireshark 中显示它:
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
我使用命令构建并运行:
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
我也尝试使用更多参数运行 docker:
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
在主动模式下,所有操作都正常,只有被动模式会失败,我不明白为什么服务器告诉客户端连接到 0.0.0.0 并配置了 pasv_address。我将 passwd、shadow 和 group 以只读方式挂载到容器中,供 vsftpd 中的本地用户使用,并将 home 挂载到 chroot 本地用户,发现在主动模式下一切正常。我在桥接模式下的虚拟机中尝试了所有操作,在虚拟机中我有一个装有 docker.io 1.2.0 的 Ubuntu 服务器。
答案1
我现在可以修复它了。默认情况下,vsftpd 使用默认配置监听 IPv4 和 IPv6,等等;我注释了 IPv6 配置并仅配置 IPv4,然后一切正常。