最近研究如何在内网搭架FTP服务器,同时要保证外网(公网)能访问的到。终成正果,但走了一些弯路,在此记下,以飨后人。
FTP 使用 2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21 (命令端口)和 20 (数据端口),当然你也可以自定义。控制 Socket 用来传送命令,数据 Socket 是用于传送数据。每一个 FTP 命令发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被成功执行了。
一般来说,客户端有一个 Socket用来连接 FTP 服务器的相关端口,它负责 FTP 命令的发送和接收返回的响应信息。一些操作如“登录”、“改变目录”、“删除文件”,依靠这个连接发送命令就可完成。
对于有数据传输的操作,主要是显示目录列表,上传、下载文件,我们需要依靠另一个 Socket来完成。
如果使用被动模式,通常服务器端会返回一个端口号。客户端需要用另开一个 Socket 来连接这个端口,然后我们可根据操作来发送命令,数据会通过新开的一个端口传输。
如果使用主动模式,通常客户端会发送一个端口号给服务器端,并在这个端口监听。服务器需要连接到客户端开启的这个数据端口,并进行数据的传输。
下面对 FTP 的主动模式和被动模式做一个简单的介绍。
主动模式下,客户端随机打开一个大于1024 的端口向服务器的命令端口 P,即 21 端口,发起连接,同时开放N +1 端口监听,并向服务器发出 “port N+1” 命令,由服务器从它自己的数据端口 (20) 主动连接到客户端指定的数据端口 (N+1)。
FTP 的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。
为了解决服务器发起到客户的连接问题,有了另一种 FTP 连接方式,即被动方式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。
被动模式下,当开启一个 FTP 连接时,客户端打开两个任意的本地端口 (N > 1024 和 N+1) 。
第一个端口连接服务器的 21 端口,提交 PASV 命令。然后,服务器会开启一个任意的端口 (P > 1024 ),返回如“227 entering passive mode (127,0,0,1,4,18)”。 它返回了 227 开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘256 再加上最后一个数字,这就是 FTP 服务器开放的用来进行数据传输的端口。如得到 227 entering passive mode(h1,h2,h3,h4,p1,p2),那么端口号是 p1*256+p2,ip 地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。
使用Serv-U搭架FTP服务器很简单,网上教程也很多,不再累述。我这里只记录下我遇到的问题。
|
操作系统
|
FTP软件
|
FTP软件版本
|
FTP服务器
|
Windows XP
|
Serv-U
|
版本15.0.1.20
|
FTP客户端
|
Windows XP
|
FileZilla
|
版本3.8.0
|
FTP服务器安装在公司内网的电脑上,FTP客户端在外网的电脑上(严格来说也是在另一外局域网内)。
被动模式(PASV)下,有数据要传输时,服务器会打开一个数据端口(并处于监听状态),然后告知客户端,客户端连接这个数据端口发送数据。但是数据端口是随机的,那么服务器该如何将这些随机数据端口映射到公网的路由器上呢???总不能让内部网的一台机器完全暴露到公网上吧,虽然确实有这样的方案(称之为DMZ主机),但这绝对是最愚蠢的选择。
这就是我遇到的第一个弯路,折腾了很久才知道。虽然数据端口是随机的,但Serv-U可以指定随机的范围。打开Serv-U管理控制台 > 管理服务器 > 服务器限制和设置 > 服务器设置 。在“设置”选项卡里找到“PASV端口范围”,如下图所示,在这里就可以指定随见的范围了。你只要把这些端口映射到路由器就可以了。
图表 1 PASV 端口范围
当然别忘了,还有一个命令端口也得映射。
我遇到的第二个难缠的问题是,FileZilla客户端获取不到FTP服务器的目录列表。日志信息如下:
状态: 正在连接
125.89.123.99
:13000...
状态: 连接建立,等待欢迎消息...
响应: 220 Serv-U FTP Server v15.0 ready...
命令: USER zhangsan
响应: 331 User name okay, need password.
命令: PASS ***
响应: 230 User logged in, proceed.
命令: CLNT FileZilla
响应: 200 Noted.
命令: OPTS UTF8 ON
响应: 200 OPTS UTF8 is set to ON.
命令: OPTS MLST type;size;modify;perm;
响应: 200 MLST OPTS Type;Size;Modify;Perm;
状态: 已连接
状态: 读取目录列表...
命令: PWD
响应: 257 "/" is current directory.
命令: TYPE I
响应: 200 Type set to I.
命令: PASV
响应: 227 Entering Passive Mode (
100,100,100,100
,50,203)
命令: MLSD
响应: 150 Opening BINARY mode data connection for MLSD.
错误: 连接超时
错误: 读取目录列表失败
|
也是经过一阵折腾,最后突然发现服务器对PASV指令的响应是:227Entering Passive Mode (
100,100,100,100
,50,203),这里100.100.100.100是FTP服务器在内网IP,客户端自然连接不上。打开Serv-U管理控制台 > 你自定义的域名 > 域详细信息 > 监听器 > 编辑 ,在PASV IP地址或域名中设置公网IP即可。 如下图所示。
外网访问内网的FTP服务器 目录1. 背景简介..22.基础知识..22.1.命令端口..22.2.数据端口..22.3.主动模式 (PORT)22.4.被动模式 (PASV)33.我走过的弯路..33.1.使用环境..33.2.PASV端口范围..33.3.PASV IP地址..44.总结..6
如何实现
外网
访问
ftp
1一般情况下是,
FTP服务器
布置在
内网
环境中,因此,要想在公网上
访问
内网
的
FTP服务器
,必须在
内网
的出口路由器上做端口映射,把21端口映射到
FTP服务器
上。
2. 21端口只是
FTP
协议的命令端口,实际传输数据的端口并不是21, 具体是哪个端口,要分2种情况,主动模式,被动模式,
主动模式,
FTP服务器
会再建一个20端口,
FTP服务器
会主动通过20端口连接客户端的数据端口。
被动模式,如果是被动模式,
FTP服务器
会自动的建立一个随机端口,通过21端口告诉
FTP
客户端,F..
### 回答1:
腾讯云
服务器
提供了
FTP
服务,可以通过
外网
访问
FTP服务器
。
FTP
(File Transfer Protocol)是一种用于文件传输的协议,可以方便地在客户端和
服务器
之间传输文件。为了实现通过
外网
访问
FTP服务器
,我们需要进行以下配置:
首先,我们需要在腾讯云
服务器
上安装
FTP服务器
软件,例如vs
ftp
d。安装完成后,我们需要在
服务器
的安全组中开放
FTP
协议的端口,通常是TCP/20和TCP/21。
接下来,需要配置
FTP服务器
的参数。在vs
ftp
d的配置文件中,我们需要指定
FTP服务器
的监听地址和外部用户可以
访问
的文件夹的位置。同时,我们还需要设置
访问
FTP服务器
的用户账号和密码。
为了实现
外网
访问
,我们还需要配置腾讯云
服务器
的公网IP地址,并将其绑定到
FTP服务器
上。在腾讯云的控制台中,我们可以选择公网IP和
服务器
实例进行绑定操作。
完成上述步骤后,我们可以使用
FTP
客户端软件(例如FileZilla)通过
外网
访问
腾讯云
服务器
的
FTP
服务。我们需要在
FTP
客户端中输入
服务器
的公网IP地址、
FTP
登录账号和密码,然后点击连接即可。
需要注意的是,为了保障
FTP服务器
的安全性,我们可以通过配置
FTP服务器
的防火墙规则,限制外部
访问
FTP服务器
的IP范围。同时,我们还可以考虑使用SSL/TLS加密协议来保护
FTP
传输的安全性。
综上所述,通过以上步骤的配置,我们可以实现腾讯云
服务器
的
FTP
外网
访问
。
### 回答2:
腾讯云
服务器
是一款强大的云计算平台,可以提供虚拟
服务器
、数据库、存储等服务。要实现腾讯云
服务器
ftp
外网
访问
,需要进行以下步骤:
首先,需要在腾讯云控制台创建一个云
服务器
实例,并选择合适的操作系统,例如Windows或Linux。
接着,我们需要在腾讯云的安全组中设置合适的规则来开启
FTP
服务。登录腾讯云控制台,选择对应的云
服务器
实例,进入“实例详情页”。在“安全组”选项中,点击“配置规则”,选择“映射协议为
FTP
”,并添加入站规则。
在云
服务器
实例的操作系统中,我们需要安装
FTP服务器
软件。对于Windows操作系统,可以使用IIS(Internet Information Services)来配置
FTP服务器
;对于Linux操作系统,可以使用vs
ftp
d或pro
ftp
d等软件。安装软件后,需要进行相应的配置,设置
FTP
的监听端口、用户权限等。
接下来,我们需要在
服务器
的防火墙中开启
FTP
端口。对于Windows操作系统,需要在Windows防火墙中创建一个允许
FTP
端口的规则;对于Linux操作系统,需要通过防火墙软件(如iptables)来设置开放
FTP
端口。
在完成上述步骤后,我们就可以通过云
服务器
的
外网
IP地址来
访问
FTP
服务了。使用
FTP
客户端软件(如FileZilla)连接到云
服务器
的
外网
IP地址,并输入正确的用户名和密码,就可以进行文件的上传、下载等操作。
需要注意的是,为了保障安全性,建议在
FTP服务器
上设置强密码,并进行合适的权限控制,仅允许有限的用户
访问
。另外,定期更新
服务器
上的操作系统和
FTP
软件,以及备份重要数据,可以提高
服务器
的稳定性和安全性。