mirror of
https://github.com/fatedier/frp.git
synced 2026-05-15 16:15:49 -06:00
[GH-ISSUE #219] 以后会考虑支持ftp协议么? #150
Labels
No labels
In Progress
WIP
WaitingForInfo
bug
doc
duplicate
easy
enhancement
future
help wanted
invalid
lifecycle/stale
need-issue-template
need-usage-help
no plan
proposal
pull-request
question
todo
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/frp#150
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @jacobzeng on GitHub (Jan 10, 2017).
Original GitHub issue: https://github.com/fatedier/frp/issues/219
感谢提供这么好的工具,以后会考虑支持ftp协议么?
@wxyzh commented on GitHub (Jan 10, 2017):
ftp协议有点麻烦,因为FTP需要至少两个端口,需要在服务器上做一些设置。
以被动模式为例:
你要做的是,在frp服务端设置并转发一批端口出去用于数据传输
@jacobzeng commented on GitHub (Jan 10, 2017):
你说的这个我尝试过用tcp的方式来弄,无论是被动还是主动,然后可以连接上,但是无法得到数据,所以我感觉还是有些地方是不是要特殊处理
@fatedier commented on GitHub (Jan 10, 2017):
都是直接用 scp,很久没用 ftp 了,我找时间测试下。
@wxyzh commented on GitHub (Jan 10, 2017):
被动模式,ftp数据端口和frp转发的端口一一对应呢
fatedier notifications@github.com于2017年1月10日周二 19:27写道:
@jacobzeng commented on GitHub (Jan 10, 2017):
proxy server和host server完全映射相同端口我也试过,关掉ftp的对来源ip的限制等也尝试过,最终没成功,后来只有换成sftp。
@fatedier commented on GitHub (Jan 11, 2017):
我研究了下,发现了问题是这样的:
@wxyzh 说的这个流程中,非特权端口 C 很关键。FTP 服务端会打开一个特权端口 C 并将这个端口告知 FTP 客户端,FTP 客户端需要连接服务端的端口 C。
但是经过 frps 中转后,frps 所在服务器并没有监听端口 C,也就是 FTP 客户端连不到真实的 FTP 服务端的端口 C。
端口 C 是随机的, 但是查了下应该可以指定被动模式使用的端口 C 的范围,比如 5000 - 5005,然后在 frps 和 FTP 服务端将这几个端口之间一一对应起来,这样可能可以。总的来说,对于 ftp 并不能很好的支持,如果有其他可选方案,还是换其他的比较好,或者采用 VPN 这样的工具。
@wxyzh commented on GitHub (Jan 12, 2017):
@fatedier 可能会比较复杂,我测试过了,在服务器端指定数据端口C的范围,比如5000-5005 然后frps也去对应5000-5005。在测试过程中又出现了另外一个问题:ftpd需要判断客户端的来源(客户端是来自lan还是来自frps?)来自lan的连接需要使用ftpd的lan ip,来自frps的连接需要使用frps 的ip。
@jacobzeng 使用代理ftp需要解决的问题是
@fatedier #154
@fatedier commented on GitHub (Jan 12, 2017):
考虑各种应用层的协议会变的非常复杂,不打算在 frp 中支持,重点还是 tcp 和 http。
@icanoncn commented on GitHub (Mar 1, 2018):
特意注册了个账号,感谢作者的无私奉献。
最近成功实现了 vsftpd 的内网穿透。
虽然不专业,但我还是简单写一下过程吧,希望能帮到正在看这篇文章的朋友。
如有错误,还请谅解。
我一台 OpenWrt / LEDE 路由器,运行 vsftpd,作为二级路由。
主路由上没做任何端口转发。
我想从外网访问二级路由上的 FTP 服务。
有一台,VPS ,公网 IP,Debian 9 系统,可以用来转发数据。
1.vsftpd 的设置。
listen_port=10000
pasv_enable=YES
pasv_max_port=10003
pasv_min_port=10001
pasv_address=VPS公网IP
这一步似乎是关键。
我用的是被动模式,之前 Filezilla 出现过 “读取目录列表失败”的错误。是因为 FTP 被动模式 会产生随机端口,而这些随机端口无法让 frp 知道。所以需要 通过 'pasv_max_port' 和 'pasv_min_port' 设置随机端口的范围,把范围内的端口填到 frpc.ini 里。
P.S. 'pasv_max_port' 一定要比 'pasv_min_port' 大,否则无法生效,也没有错误提示,我就是因为眼花填错了,折腾了好久……
也出现过“服务器发回了不可路由的地址”,是因为 vsftp 被动模式返回的是二级路由 WAN 口的网址,192.168.1.1。所以需要 pasv_address 设置成 VPS 的公网 IP。
2.frps.ini 的设置。
设置了 bind_port,privilege_token。
3.frpc.ini 的设置。
设置好 bind_port,privilege_token,与 frps.ini 相同。
打开 10000,10001,10002,10003 端口。
4.VPS 的设置。
iptables 打开 10000,10001,10002,10003 端口,和 bind_port 端口。
@quzhaojing commented on GitHub (Mar 15, 2018):
@icanoncn , 我按照你的方式,用filezilla 传数据或者下载数据还是不行, 下面是我的连接信息,虽然也能传,但是中间很慢,还没有sftp快,同时经常被“服务器发回了不可路由的地址。使用服务器地址代替。”
状态: 尝试连接“ECONNREFUSED - 连接被服务器拒绝”失败。
错误: 无法连接到服务器
状态: 正在等待重试...
错误: 尝试连接被用户终止
命令: RETR gltf-viewer-win32-ia32.zip
响应: 150 Opening BINARY mode data connection for gltf-viewer-win32-ia32.zip (57669819 bytes).
错误: 传输了 530,492 字节 (用时242 秒)后用户中止了文件传输
状态: 连接被服务器关闭
状态: 正在连接 [公网ip]:10000...
状态: 连接建立,等待欢迎消息...
响应: 220 (vsFTPd 3.0.3)
命令: AUTH TLS
响应: 530 Please login with USER and PASS.
命令: AUTH SSL
响应: 530 Please login with USER and PASS.
状态: 不安全的服务器,不支持 FTP over TLS。
命令: USER vic
响应: 331 Please specify the password.
命令: PASS *****
响应: 230 Login successful.
状态: 服务器不支持非 ASCII 字符。
状态: 已登录
状态: 读取目录列表...
状态: 列出“/”的目录成功
状态: 已从服务器断开
状态: 正在连接 [公网ip]:10000...
状态: 连接建立,等待欢迎消息...
状态: 不安全的服务器,不支持 FTP over TLS。
状态: 服务器不支持非 ASCII 字符。
状态: 已登录
状态: 读取目录列表...
状态: 列出“/”的目录成功
状态: 已从服务器断开
状态: 正在连接 [公网ip]:10000...
状态: 连接建立,等待欢迎消息...
状态: 不安全的服务器,不支持 FTP over TLS。
状态: 服务器不支持非 ASCII 字符。
状态: 已登录
状态: 读取目录列表...
状态: 服务器发回了不可路由的地址。被动模式失败。
命令: PORT 172,17,39,156,217,87
响应: 500 Illegal PORT command.
错误: 读取目录列表失败
状态: 已从服务器断开
状态: 正在连接 [公网ip]:10000...
状态: 连接建立,等待欢迎消息...
状态: 不安全的服务器,不支持 FTP over TLS。
状态: 服务器不支持非 ASCII 字符。
状态: 已登录
状态: 读取目录列表...
状态: 列出“/”的目录成功
状态: 读取“/Software/Driver”的目录列表...
状态: 服务器发回了不可路由的地址。使用服务器地址代替。
状态: 列出“/Software/Driver”的目录成功
状态: 读取“/Software”的目录列表...
状态: 列出“/Software”的目录成功
状态: 读取“/Software/windows”的目录列表...
状态: 服务器发回了不可路由的地址。使用服务器地址代替。
状态: 列出“/Software/windows”的目录成功
状态: 正在连接 [公网ip]:10000...
状态: 连接建立,等待欢迎消息...
状态: 不安全的服务器,不支持 FTP over TLS。
状态: 服务器不支持非 ASCII 字符。
状态: 已登录
状态: 开始下载 /Software/windows/clay-viewer-0.2.1-win.zip
状态: 服务器发回了不可路由的地址。使用服务器地址代替。
@icanoncn commented on GitHub (Mar 17, 2018):
@CharellKing “PORT 172,17,39,156,217,87”看这个好像是 vsftp 某些配置没有生效吧,返回的
IP 是 172.17.39.156,端口 217*256+87=55639(好像是这么算的,记不清了),是内网 IP 和随机端口。但却可以传输,不知道为何。传输的时候 在 服务器端 netstat -tunap 看一下服务器打开的端口,是否跟设置的一样吧。
@sirius4gnu commented on GitHub (Apr 12, 2018):
ftp只使用了tcp协议,frp是完全可以支持的,icanoncn的方法是正确的,我这边测试通过.
注意点:ftp需要使用被动模式,主动模式下ftp服务器需要穿透出本地内网,再穿透入客户端内网,成功率很低.
pasv_enable=YES
pasv_min_port=10001
pasv_max_port=10003
pasv_address=VPS公网IP
@shellus commented on GitHub (Oct 8, 2018):
我使用 FileZilla Server 成功了。
主要设置点在于
1、使用固定的被动模式端口
2、使用frp映射被动模式端口,本地和远程端口号需要对应
3、设置被动模式服务器地址(use the following IP)为frp服务器外网地址(可以是域名)
4、关闭安全设置里面的来源IP检查(disable IP check)
就可以了
@snowdream commented on GitHub (Feb 22, 2019):
希望frp官方支持ftp协议。
我现在链接ftp,可以连接成功,但是无法列出目录。
@fatedier commented on GitHub (Feb 22, 2019):
@snowdream 不会支持 FTP 这一陈旧且不安全的协议,请寻找其他支持的软件或替代协议。
@blankhang commented on GitHub (Jul 25, 2019):
我参照@icanoncn @shellus
用 FileZilla Server 也成功了。
主要设置点在于
1、使用固定的被动模式端口
2、使用frp映射被动模式端口,本地和远程端口号需要对应
3、设置被动模式服务器地址(use the following IP)为frp服务器外网地址(可以是域名)
4、关闭安全设置里面的来源IP检查(disable IP check)
@snowdream commented on GitHub (Jul 25, 2019):
建议走sftp,和ssh共用默认端口22.
@shellus commented on GitHub (Jul 25, 2019):
@snowdream 主要是某些客户端不支持啊,例如ios上的oplayer,只支持ftp,没办法
@zhaoxf4 commented on GitHub (Apr 16, 2021):
不是还有webdev和http么,非把自己捆在ftp上干嘛