Isk*_*kar 6 networking ftp nat iptables docker
我试图让我的应用程序在 Docker 中正常运行,但遇到了问题。
该应用程序以 PASV 模式连接到远程 FTP 服务器,并 PUT 文件。非常简单,无需 docker 即可正常工作。FTP 服务器和客户端都不在任何 NAT 之后;但是客户端变成了 NAT,因为我使用的是 Docker 桥接网络。(使用默认网桥配置http://pastie.org/10954592)
如果我在运行客户端应用程序时查看 FTP 服务器上的 tshark,它会交换大量数据包,因此它正在“连接”到服务器,但应用程序没有收到任何回复。这让我假设当 FTP 服务器尝试在该经验端口上响应时,它不会从主机操作系统路由回 Docker 容器。
所以,希望总结一下,有没有什么好的方法可以将这些 pasv 端口正确转发到 docker 网桥?约束:我无法控制生产中的 FTP 服务器,所以我不能简单地硬编码 iptables 的 pasv 端口列表。
感谢您的任何想法!
PASV FTP 在 Docker 容器内运行良好。
使用 Docker Swarm 会变得更困难,但可以使用单个副本或mode:global使用mode:host.
由于 PASV 模式是有状态的,因此后续请求需要路由到集群中的同一节点。
services:
ftp:
image: vendor/vsftpd
ports:
- { target: 20, published: 20, mode: host }
- { target: 21, published: 21, mode: host }
- { target: 21100, published: 21100, mode: host }
- { target: 21101, published: 21101, mode: host }
- { target: 21102, published: 21102, mode: host }
deploy:
mode: global
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4501 次 |
| 最近记录: |