Vsftpd 在 LXC 容器中的被动模式下不起作用

Vsftpd 在 LXC 容器中的被动模式下不起作用

我是 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,然后一切正常。

相关内容