前两天有个朋友说,在企业内网搭建了一个 Serv-U 服务器,在内网访问没有问题,但通过 ISA 发布出来后,外网用户,不论使用 IP 或是域名都不能访问。在此我就此问题写了一篇博文来把整个过程实现出来:
我们的拓扑图如下:
利用ISA Server 2006发布内网的Serv-U服务器_第1张图片
此实验用到了三台机器:
Beijing:  在此机器上安装 ISA Server 2006
AnHui:  在此机器上搭建 Serv-U 服务器
Shanghai 作为外网机器来进行测试
 
步骤一: Anhui 安装 Serv-u 并进行相应的配置
我使用的是 Serv-u7.3 7.3 与以前的版本相比,操作界面大不一样,不仅界面不同,而且功能也增加了不少,我个人认为更具人性化操作,下面我们开始安装:
利用ISA Server 2006发布内网的Serv-U服务器_第2张图片
此步是不用多说,肯定是接受。
利用ISA Server 2006发布内网的Serv-U服务器_第3张图片
点击是,定义新域:
利用ISA Server 2006发布内网的Serv-U服务器_第4张图片
利用ISA Server 2006发布内网的Serv-U服务器_第5张图片

通过相应协议可以访问到 FTP 服务器。在此只允许 21 端口,否则可能会因为 IIS 的存在导致 SU 启动失败或是影响 IIS 的正常运行!
利用ISA Server 2006发布内网的Serv-U服务器_第6张图片
利用ISA Server 2006发布内网的Serv-U服务器_第7张图片

利用ISA Server 2006发布内网的Serv-U服务器_第8张图片
利用ISA Server 2006发布内网的Serv-U服务器_第9张图片

可以看到当前已经存在了两个用户 , 杜飞用户上面有一个×××的惊叹号是因为他没有相对的权限。也就是说,虽然这里创建了杜飞这个用户,但没有给他分配权限。
下面我们来创建一个允许匿名访问的用户,
利用ISA Server 2006发布内网的Serv-U服务器_第10张图片
有两种特殊用户名: "Anonymous" "FTP" 。这两个用户名含义相同,可供访客访问文件服务器。这些用户不需要密码,因此密码部分应该留空。虽然无需输入密码,但 Serv-U 会要求使用这些帐户登录的用户提供其 email 地址以完成登录过程。
然后测试一下:
利用ISA Server 2006发布内网的Serv-U服务器_第11张图片
也可以设置使用域名访问,如下图所示:
利用ISA Server 2006发布内网的Serv-U服务器_第12张图片
然后可以通过 DNS 或是 HOSTS 来进行解析操作,解析过程在此不再累述。
然后客户端就可以使用域名来进行连接 FTP 服务器。
测试如下:
利用ISA Server 2006发布内网的Serv-U服务器_第13张图片

Serv-U 的搭载我们就已经完成了,下面就来看看怎么通过 ISA 发布出来,供外网用户访问。
步骤二:通过ISA 将内网的Serv-U 服务器发布出来
因为这是希望外网用户访问内网的服务器,我们需要使用发布规则
利用ISA Server 2006发布内网的Serv-U服务器_第14张图片

创建完成后,我们会发现 ISA 上开始侦听 21 端口:
利用ISA Server 2006发布内网的Serv-U服务器_第15张图片
使用 IP 来访问没有问题,但使用域名来访问时就不行了,这是因为解析有问题:我们可以使用 DNS 解析,也可以使用 Hosts 文件,在此我为了操作简单,就直接在 ShangHai 这台机器上使用 Hosts 解析:加入以下一行:
192.168.0.4              ftp.dufei.com
然后测试解析是否正常,如下图
利用ISA Server 2006发布内网的Serv-U服务器_第16张图片

利用ISA Server 2006发布内网的Serv-U服务器_第17张图片

至此,实现结束!
但有朋友说按照上面的方法做了,但一直不成功,我分析原因可能如下:
这主要是因为 FTP 协议与其他的协议不同之外,一般的协议只使用一个周知端口,也就是说客户端只要去向这个周知端口发出连接,一般就可以通讯了,但是 FTP 就不同了,它在建立连接时候需要创建控制连接也需要用到数据传输连接,控制连接主要用于传递客户端的命令以及服务器端对命令的响应,这个端口是 TCP/21 端口。但是数据连接的端口是不固定的,这些端口用于传输具体的数据。而且根据 FTP 工作模式的不同,这个数据连接可能是客户端也有可能是服务器发起的。
关键问题就在于这个数据连接模式上 , 这里有两种模式,一种是主动模式 (port mod) ,在通讯过程中,控制连接使用周知端口 21/TCP ,但是,数据传输时所使用的目的端口无法知道, FTP 协议使用一个标准的端口 21 作为 ftp-data 端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。 FTP 的数据连接和控制连接的方向一般是相反的,也就是说,是服务器向客户端发起一个用于数据传输的连接。连接的端口是由服务器端和客户端协商确定的。所以, FTP 协议的这个特征对 ISA 增加了困难。
因此如果 Serv-U 工作于被动模式时,需要指定 Serv-U 用于 PASV 模式数据传输的端口包含范围。 Serv-U 通常在打开套接字用于 PASV 模式数据传输时,允许操作系统为它指派一个随机的端口号。该属性通过将 Serv-U PASV 端口范围限定于一个已知的范围,满足了路由器或防火墙预先了解特定端口范围的需求。对最繁忙的文件服务器来说 10 个端口足够了。但如果是通过防火墙来发布内网 Serv-U 服务器时,需要在防火墙上进行设置允许相应的端口。具体操作在此不再累述,请参考此文自行设置!以上只是个人拙见,如有不同意见,请批评指正!