一、环境

操作系统:windows server 2012 r2 更新到最新的补丁

环境:工作组环境


二、需求

建立一个内外网能使用的FTP服务器,并且每个用户有一定得配额。


三、服务器配置步骤

  1. 安装ftp服务

    windows server 2012 r2 建立FTP服务器并发布到外网


   2.配置FTP服务器

      2.1 在服务器上建立FTP文件夹

windows server 2012 r2 建立FTP服务器并发布到外网


      2.2 建立FTP网站


            windows server 2012 r2 建立FTP服务器并发布到外网

              windows server 2012 r2 建立FTP服务器并发布到外网

                  windows server 2012 r2 建立FTP服务器并发布到外网


                   完成配置


            windows server 2012 r2 建立FTP服务器并发布到外网




3.为了实现用户登陆时只看到自己的文件夹需要使用到 “用户隔离功能”(如果不使用此功能,那登陆后会列举所有用户的文件夹,一般不会这样使用)


     3.1 用户隔离:


windows server 2012 r2 建立FTP服务器并发布到外网


点击打开后如下图:


windows server 2012 r2 建立FTP服务器并发布到外网



但使用隔离有一定的条件:


在FTP目录下必须有LOCALUSER文件夹

localuser文件夹下面对应使用的用户名称的文件夹


如下图:


windows server 2012 r2 建立FTP服务器并发布到外网



如果不使用会报以下错误:


无论怎样输入都会提示用户名或密码无效


windows server 2012 r2 建立FTP服务器并发布到外网



取消使用隔离后就会正常:


windows server 2012 r2 建立FTP服务器并发布到外网




所以如果使用用户隔离功能(推荐使用)一定要按照上面要求的来操作。



3.2   使用磁盘配额来限定用户使用磁盘的大小


windows server 2012 r2 建立FTP服务器并发布到外网




四、发布外网

到现在为止用户可以正常登陆FTP服务器进行操作了。为了在外网也能正常访问需要以下操作:


  1. 路由器端口映射 21 端口


  2. 此时在外网就能使用公网IP地址访问FTP服务器了


  3. 如果感到使用IP地址不方便记忆,可以用一个域名进行解析,只需要在域名解析里面添加一个A记录对应公网IP就可以了



补充一:

在使用过程中会遇到上传某些文件提示如下错误:

windows server 2012 r2 建立FTP服务器并发布到外网

根据提示重点排错编码问题,这时需要更改下FTP服务器的设置:

服务器默认支持UTF8格式的编码,但这会造成一定程度的兼容性问题。

windows server 2012 r2 建立FTP服务器并发布到外网

只需要在此处更改为false即可:

windows server 2012 r2 建立FTP服务器并发布到外网




补充二:

故障:

用浏览器和资源管理器登陆时能正常解析名称和登陆,但刷新列表时间较长一会提示链接超时的故障。


解决思路:

使用FTP客户端(filezilla)登陆也显示超时,此时考虑更改链接模式,发现默认为”被动模式“,此处改为”主动模式“后连接正常。那么以上故障问题也应该是模式的问题。


解决方法:


打开IE浏览器----高级----发现  浏览 选项下面的 “使用被动FTP(用于防火墙和DSL调剂解调器的兼容)”

默认是选择的,取消前面的对勾并重启IE浏览器。

如下图:

windows server 2012 r2 建立FTP服务器并发布到外网



此时发现无论是浏览器还是windows资源管理器都可以正常访问FTP服务器了。


FPT协议一些简单知识点:

  1. 控制端口 21  数据端口 20 

  2. 传输模式分为主动模式和被动模式,如上图所标识跟防火墙有关系。

      主动模式:信任区域到非信任区域。数据连接的三次握手由服务器发起

         被动模式:非信任区域到信任区域。数据连接的三次握手由客户端发起


下面介绍一个这两种方式的工作原理:


   Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。(可以看到在这种方式下是客户端和服务器建立控制连接,服务器向客户端建立数据连接,其中,客户端的控制连接和数据连接的端口号是大于1024的两个端口号(临时端口),而FTP服务器的数据端口为20,控制端口为21)

 

  Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个临时端口(也叫*端口,端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。(可以看到这种情况下的连接都是由客户端向服务器发起的,与下面所说的“为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式”相对应,而服务器端的数据端口是临时端口,而不是常规的20

 

  很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。