首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将流量从HaProxy转发到IIS服务器?

问如何将流量从HaProxy转发到IIS服务器?
EN

Server Fault用户
提问于 2022-07-12 12:21:27
回答 1查看 277关注 0票数 0

我试图通过HaProxy引导FTP流量到IIS服务器。我也试图设置一个FileZilla FTP服务器,但问题类似-被动模式不能工作。

这是我的haproxy.cfg

代码语言:javascript
复制
listen FTP
  mode tcp
  bind <HAPROXY_SERVER_IP>:21 transparent
  bind <HAPROXY_SERVER_IP>:50000-55000 transparent
  server ftp01 <IIS_FTP_SERVER_IP>

IIS上的被动端口配置:

我看过一个类似的问题-- ftp连接槽 --但是这个提议的答案(基于这篇博客文章)对我不起作用。FTP登录工作,但目录列表命令(ls)错误:

代码语言:javascript
复制
425 Cannot open data connection.

我还查看了这个要旨,同时寻找将客户端IP转发到FTP服务器的选项。由于FTP连接是基于TCP的,所以我不能使用(1) X-Forwarded-For HTTP头.AFAIK、FileZilla和IIS服务不支持(2) proxyprotocol。这只剩下备选案文(3):

代码语言:javascript
复制
source 0.0.0.0 usesrc clientip

看上去像配置相当复杂!

我在这里错过了什么?当然,这不是一项困难的任务!

我的系统

HaProxy VM

OS:Ubuntu 20.04.4 LTS

HaProxy版本:HAProxy version 2.4.14-1ppa1~focal 2022/02/25

FTP服务器VM

操作系统: Windows 2019

IIS版本:10.0.17763.1

VM连接到同一个本地网络。

更新

我包括失败会话的客户端和服务器日志

客户端

代码语言:javascript
复制
# Note: h1, h2, h3, h4 make up the <IIS_FTP_SERVER_IP>

ftp -p <HAPROXY_SERVER_IP>
Connected to <HAPROXY_SERVER_IP>.
220 Microsoft FTP Service
Name (<HAPROXY_SERVER_IP>:<LOCAL_PC_USERNAME>): <FTP_USERNAME>
331 Password required
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> ls
227 Entering Passive Mode (h1,h2,h3,h4,195,80).
150 Opening ASCII mode data connection.
425 Cannot open data connection.
ftp> bye
221 Goodbye.

IIS服务器

代码语言:javascript
复制
#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2022-07-12 23:01:15
#Fields: date time c-ip cs-username s-ip s-port cs-method cs-uri-stem sc-status sc-win32-status sc-substatus x-session x-fullpath
2022-07-12 23:01:15 <HAPROXY_SERVER_IP> - <IIS_FTP_SERVER_IP> 21 ControlChannelOpened - - 0 0 a46aa445-e3be-46ba-9da2-3f5520e3c419 -
2022-07-12 23:01:29 <HAPROXY_SERVER_IP> - <IIS_FTP_SERVER_IP> 21 USER <FTP_USERNAME> 331 0 0 a46aa445-e3be-46ba-9da2-3f5520e3c419 -
2022-07-12 23:01:52 <HAPROXY_SERVER_IP> <IIS_SERVER_MACHINE_NAME>\<FTP_USERNAME> <IIS_FTP_SERVER_IP> 21 PASS *** 230 0 0 a46aa445-e3be-46ba-9da2-3f5520e3c419 /
2022-07-12 23:01:52 <HAPROXY_SERVER_IP> <IIS_SERVER_MACHINE_NAME>\<FTP_USERNAME> <IIS_FTP_SERVER_IP> 21 SYST - 215 0 0 a46aa445-e3be-46ba-9da2-3f5520e3c419 -
2022-07-12 23:01:54 <HAPROXY_SERVER_IP> <IIS_SERVER_MACHINE_NAME>\<FTP_USERNAME> <IIS_FTP_SERVER_IP> 21 PASV - 227 0 0 a46aa445-e3be-46ba-9da2-3f5520e3c419 -
2022-07-12 23:01:54 <FTP_CLIENT_IP> <IIS_SERVER_MACHINE_NAME>\<FTP_USERNAME> <IIS_FTP_SERVER_IP> 50000 DataChannelOpened - - 0 0 a46aa445-e3be-46ba-9da2-3f5520e3c419 -
2022-07-12 23:01:54 <FTP_CLIENT_IP> <IIS_SERVER_MACHINE_NAME>\<FTP_USERNAME> <IIS_FTP_SERVER_IP> 50000 DataChannelClosed - - 1236 38 a46aa445-e3be-46ba-9da2-3f5520e3c419 -
2022-07-12 23:01:54 <HAPROXY_SERVER_IP> <IIS_SERVER_MACHINE_NAME>\<FTP_USERNAME> <IIS_FTP_SERVER_IP> 21 LIST - 425 1236 38 a46aa445-e3be-46ba-9da2-3f5520e3c419 /
2022-07-12 23:02:06 <HAPROXY_SERVER_IP> <IIS_SERVER_MACHINE_NAME>\<FTP_USERNAME> <IIS_FTP_SERVER_IP> 21 QUIT - 221 0 0 a46aa445-e3be-46ba-9da2-3f5520e3c419 -
2022-07-12 23:02:06 <HAPROXY_SERVER_IP> <IIS_SERVER_MACHINE_NAME>\<FTP_USERNAME> <IIS_FTP_SERVER_IP> 21 ControlChannelClosed - - 0 0 a46aa445-e3be-46ba-9da2-3f5520e3c419 -
EN

回答 1

Server Fault用户

回答已采纳

发布于 2022-07-12 12:55:54

FTP是一个糟糕的协议,需要两个连接:

  1. 对于最初是一个连接的被动FTP,控制连接。该连接由客户端进行,通常连接到默认端口TCP 21。
  2. 要实际传输数据(获取目录列表就是数据传输),客户端需要建立第二个TCP连接,即数据连接。

当FTP客户端请求与PASV控制字的被动ftp连接时,FTP服务器选择一个“随机可用的临时端口”,即非默认端口,并宣布该端口具有端口响应。

PORT响应通常包含6个八进制,例如PORT h1,h2,h3,h4,p1,p2,其中h1.h2.h3.h4是服务器的IPv4 IP地址,TCP端口号为(p1*256) + p2,即xxx,x,xxx,xxx,196,107表示端口(196 * 256) + 107 = 50283。

为了更好地处理防火墙,而不是允许FTP服务器为数据连接选择任何“随机可用的临时”端口,管理员通常会建立一个固定的端口范围。

看起来您确实修复了该端口范围,但是您是否也打开了所需的防火墙端口?

现在第二件事是PORT响应包含服务器的IP地址。您需要确保FTP客户端在那里接收他们连接到的HAProxy服务器的IP地址,而不是IIS服务器的IP地址。

屏幕截图显示IIS提供了这样一个选项,“防火墙的外部IP地址”允许管理员调整端口响应中将要使用的IP地址。而不是绑定到服务器的实际IP地址,而将在PORT响应中使用自定义IP地址。这通常是由端口转发引起的问题的解决方案,因此也是名称,但也是您的HAProxy的解决方案。

或者,执行端口转发的设备(在本例中为HAProxy)将需要用自己的端口响应重写端口响应中的IP地址。

AFAIK HAProxy并没有为您提供一种标准的方法。

检查: FTP客户端接收的端口响应是什么?

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1105383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档