networking - 如何将 haproxy 端口范围配置为一一范围?

标签 networking ftp haproxy

我想用haproxy来部署一台ftp代理服务器。这是场景:

ftp 客户端 <---> ftp-proxy-server(ip:10.0.1.1) <---> ftp-server(ip:172.126.1.1)

ftp 服务器在 21 端口监听控制命令,数据端口范围 [20100-20199]

我在 ftp-proxy-server 上有 haproxy 配置:

listen ftp-proxy-server 10.0.1.1:21
    mode tcp
    server ftp-server 172.126.1.1:21

listen ftp-proxy-server 10.0.1.1:20100-20199
    mode tcp
    server ftp-server 172.126.1.1:20100-20199

问题来了,我可以从 ftp-client 成功登录 ftp 服务,但无法执行输出“连接被拒绝”消息的 ls 命令。我猜原因是从 ftp-proxy-server 到 ftp-server 的端口映射是随机的。所以当 ftp-client 得到一个保留的端口时(e.g. 20101),但是ftp-proxy-server可能会映射到另一个端口(例如20109),这不是ftp-server分配给ftp-client的端口。

我想到了一种配置100个监听,一个监听一个端口的解决方案,但是编写配置文件很复杂。是否有一个简单的配置选项来一一映射端口?就像 10.0.1.1:20001 -> 172.126.1.1:20001, 10.0.1.1:20002 -> 172.126.1.1:20002。

欢迎任何回答:)

最佳答案

您必须从服务器定义中删除端口范围。 haproxy 文档显示来自源的相同端口用于目标。

listen ftp-proxy-server 10.0.1.1:20100-20199
    mode tcp
    server ftp-server 172.126.1.1

关于networking - 如何将 haproxy 端口范围配置为一一范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26794547/

相关文章:

iphone - 使用 iPhone 发送 HTML 到远程客户端

c++ - Linux 在多线程程序中处理特定线程上的信号

docker - docker-compose.yml 端口上的引用有什么不同吗?

sql-server - 如何在不使用本地或临时文件的情况下将存储过程输出直接写入 FTP 上的文件?

python - 使用 pyftpdlib 进行文件传输

docker - 在IBM Cloud Kubernetes中公开HAProxy(端口80)Docker的最简单方法

iis - 我们如何解决由 Cisco CSS 引起的间歇性 "An existing connection was forcibly closed"错误

java - 使用 FTP 服务器的套接字,但客户端未收到输出

regex - HAProxy 删除尾部斜杠

haproxy - 如何使HA代理保持事件状态