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

posted @ 2021-04-06 16:18  平平无奇网瘾少女  阅读(469)  评论(0)    收藏  举报