Windows系统通过外网访问内网FTP存储网关
1.背景描述:外部服务想要上传下载数据到FTP存储网关服务器(有绑定对象存储桶);
则外部服务器要能和服务器B连通,且服务器B与服务器C在同一个内网下能连通。
即服务器C安装ftp server进行相关配置,服务器B作为代理安装Nginx进行转发,外部服务需安装ftp zilla等客户端软件。
2.选择了FTP的被动模式
FTP需要使用被动模式,并指定数据端口范围;
实际试过主动模式不成功,能登陆成功,一直显示无法获取目录列表,21端口能通,数据端口不通;
咨询了nginx的同事,说nginx代理不了主动模式,于是换被动模式成功了。
被动的FTP :
命令连接:客户端 >1024 端口 → 服务器 21 端口
数据连接:客户端 >1024 端口 ← 服务器 >1024 端口
3.防火墙的设置
确认外部访问的IP,Nginx服务器的EIP,FTP server的IP;
ftp客户端的服务器(我的服务):
系统防火墙开放1024-65535端口(出站规则),开放nginx监听端口21(入站规则);
Nginx服务器(服务器B):
入站规则:开放1024-65535端口允许ftp客户端的服务器访问;
NAT网关配置:服务器B的EIP,主ip,内网端口,EIP端口,外网访问源IP,
内网端口和EIP端口要同步对应:21,60000-60002;(数据端口可配置2个或2个以上)。
FTP server(服务器C):
入站规则:21端口,60000-65535;//允许指定IP访问高位端口
配置文件中需配置nginx服务器的EIP。
4.Nginx配置,在nginx.conf文件中添加:
# ftp代理
stream{
upstream ftp{
hash $remote_addr consistent;
server ftp的ip:端口; //ftp网关的server IP
}
server {
listen 80; #代理端口
proxy_connect_timeout 30s;
proxy_timeout 30s;
proxy_pass ftp;
}
# 以下为新增数据端口,监听ftp服务器的数据端口
upstream ftp1{
hash $remote_addr consistent;
server ftp的ip:60000; //监听被动模式的端口1;
}
server {
listen 60000;
proxy_connect_timeout 10s;
proxy_timeout 10s;
proxy_pass ftp1;
}
upstream ftp2{
hash $remote_addr consistent;
server ftp server的IP:60001;//监听被动模式的端口2;
}
server {
listen 60001;
proxy_connect_timeout 10s;
proxy_timeout 10s;
proxy_pass ftp2;
}
upstream ftp3{
hash $remote_addr consistent;
server ftp server的IP:60002; //监听被动模式的端口3;
}
server {
listen 60002;
proxy_connect_timeout 10s;
proxy_timeout 10s;
proxy_pass ftp3;
}
}
5.使用FTP zilla客户端测试连接
进入设置,开启被动模式,选择监听传输端口范围60000-60002;再勾选"Use the following IP",这里填服务器B的EIP,即公网IP;
总结:
理解FTP的两种传输方式主动模式和被动模式的工作原理,
根据报错提示进行问题排查,网络,防火墙,DNAT配置,被动模式监听的数据端口范围等;
有问题欢迎留言,大家一起学习~
参考链接:https://blog.csdn.net/weixin_41543212/article/details/109306314