[GH-ISSUE #1959] 关于内网穿透映射FTP #1559

Closed
opened 2026-05-05 12:59:17 -06:00 by gitea-mirror · 12 comments
Owner

Originally created by @HuangLuxuan on GitHub (Aug 29, 2020).
Original GitHub issue: https://github.com/fatedier/frp/issues/1959

我试着映射FTP,结果压根用不了,发现是FileZilla服务器接受PASV指令后返回的结果被修改了,变成运行FRPS的机器的内网地址以及一个我也不清楚是什么的端口,这可咋整啊。(顺带一提,跑FRPC和FRPS的都是XP,所以在跑0.24.0,希望有救)

相关配置:
[server_ftp_21]
type = tcp
local_ip = 127.0.0.1
local_port = 21
remote_port = 21
use_encryption = true
use_compression = true

[range:server_ftp_1024_1151]
type = tcp
local_ip = 127.0.0.1
local_port = 1024-1151
remote_port = 1024-1151
use_encryption = true
use_compression = true
#啊对了,这些端口还不停报错 [W] [control.go:141] [server_ftp_1024_1151_47] start error: port unavailable

Originally created by @HuangLuxuan on GitHub (Aug 29, 2020). Original GitHub issue: https://github.com/fatedier/frp/issues/1959 我试着映射FTP,结果压根用不了,发现是FileZilla服务器接受PASV指令后返回的结果被修改了,变成运行FRPS的机器的内网地址以及一个我也不清楚是什么的端口,这可咋整啊。(顺带一提,跑FRPC和FRPS的都是XP,所以在跑0.24.0,希望有救) 相关配置: [server_ftp_21] type = tcp local_ip = 127.0.0.1 local_port = 21 remote_port = 21 use_encryption = true use_compression = true [range:server_ftp_1024_1151] type = tcp local_ip = 127.0.0.1 local_port = 1024-1151 remote_port = 1024-1151 use_encryption = true use_compression = true #啊对了,这些端口还不停报错 [W] [control.go:141] [server_ftp_1024_1151_47] start error: port unavailable
Author
Owner

@Becods commented on GitHub (Aug 29, 2020):

被动式FTP需要额外的端口
请检查FileZilla配置文件,确定被动式端口,并在frpc上配置

<!-- gh-comment-id:683327255 --> @Becods commented on GitHub (Aug 29, 2020): 被动式FTP需要额外的端口 请检查FileZilla配置文件,确定被动式端口,并在frpc上配置
Author
Owner

@HuangLuxuan commented on GitHub (Aug 30, 2020):

被动式FTP需要额外的端口
请检查FileZilla配置文件,确定被动式端口,并在frpc上配置

FTP配置都是没毛病的,telnet测试发现经过frp后发现服务器发送的内容变了,PASV命令回复的地址变成frps机器的内网IP了,端口也变了(变得端口实在是看不出来有什么规律)

<!-- gh-comment-id:683397259 --> @HuangLuxuan commented on GitHub (Aug 30, 2020): > 被动式FTP需要额外的端口 > 请检查FileZilla配置文件,确定被动式端口,并在frpc上配置 FTP配置都是没毛病的,telnet测试发现经过frp后发现服务器发送的内容变了,PASV命令回复的地址变成frps机器的内网IP了,端口也变了(变得端口实在是看不出来有什么规律)
Author
Owner

@Becods commented on GitHub (Aug 30, 2020):

由于数据需要经过frpc代理,故FileZilla接收到的ip为frpc的ip,端口为frpc开的随机端口
请考虑使用支持#get-real-ip的软件

<!-- gh-comment-id:683405251 --> @Becods commented on GitHub (Aug 30, 2020): 由于数据需要经过frpc代理,故FileZilla接收到的ip为frpc的ip,端口为frpc开的随机端口 请考虑使用支持[#get-real-ip](https://github.com/fatedier/frp#get-real-ip)的软件
Author
Owner

@HuangLuxuan commented on GitHub (Sep 1, 2020):

由于数据需要经过frpc代理,故FileZilla接收到的ip为frpc的ip,端口为frpc开的随机端口
请考虑使用支持#get-real-ip的软件

不不不,我说FileZilla回复的内容经过frpc到frps之后变了,变成frps的IP了,不是说与FileZilla建立tcp的IP是frpc的

<!-- gh-comment-id:684966066 --> @HuangLuxuan commented on GitHub (Sep 1, 2020): > 由于数据需要经过frpc代理,故FileZilla接收到的ip为frpc的ip,端口为frpc开的随机端口 > 请考虑使用支持[#get-real-ip](https://github.com/fatedier/frp#get-real-ip)的软件 不不不,我说FileZilla回复的内容经过frpc到frps之后变了,变成frps的IP了,不是说与FileZilla建立tcp的IP是frpc的
Author
Owner

@HuangLuxuan commented on GitHub (Sep 3, 2020):

我的网络是这么一个结构
跑FRPC的机器@192.168.0.100 --- NAT网关@10.22.176.56 --- 西北大学南校区@211.137.127.234 --- 互联网
跑FRPS的机器@192.168.1.2 --- NAT网关@117.23.248.92(已将相关端口映射至192.168.1.2) --- 互联网

在跑FRPC的机器上用Telnet进行三次实验,分别访问127.0.0.1:21,192.168.0.100:21和117.23.248.92:21,然后登录并发送PASV命令,实验结果发现,前两次回文皆为
227 Entering Passive Mode (117,23,248,92,4,0)
第三次回文是
227 Entering Passive Mode (192,168,1,2,19,137)
实验说明FRPC到FRPS的过程中修改了这个内容,导致FTP服务器无法传输数据

具体的实验过程可以参考以下文件
20200903.txt

<!-- gh-comment-id:686384822 --> @HuangLuxuan commented on GitHub (Sep 3, 2020): 我的网络是这么一个结构 跑FRPC的机器@192.168.0.100 --- NAT网关@10.22.176.56 --- 西北大学南校区@211.137.127.234 --- 互联网 跑FRPS的机器@192.168.1.2 --- NAT网关@117.23.248.92(已将相关端口映射至192.168.1.2) --- 互联网 在跑FRPC的机器上用Telnet进行三次实验,分别访问127.0.0.1:21,192.168.0.100:21和117.23.248.92:21,然后登录并发送PASV命令,实验结果发现,前两次回文皆为 227 Entering Passive Mode (117,23,248,92,4,0) 第三次回文是 227 Entering Passive Mode (192,168,1,2,19,137) 实验说明FRPC到FRPS的过程中修改了这个内容,导致FTP服务器无法传输数据 具体的实验过程可以参考以下文件 [20200903.txt](https://github.com/fatedier/frp/files/5167744/20200903.txt)
Author
Owner

@Becods commented on GitHub (Sep 5, 2020):

https://github.com/fatedier/frp/issues/219
请善用搜索

ftp只使用了tcp协议,frp是完全可以支持的,icanoncn的方法是正确的,我这边测试通过.
注意点:ftp需要使用被动模式,主动模式下ftp服务器需要穿透出本地内网,再穿透入客户端内网,成功率很低.
pasv_enable=YES
pasv_min_port=10001
pasv_max_port=10003
pasv_address=VPS公网IP

@snowdream 不会支持 FTP 这一陈旧且不安全的协议,请寻找其他支持的软件或替代协议。

我参照@icanoncn @shellus
用 FileZilla Server 也成功了。
主要设置点在于
1、使用固定的被动模式端口
2、使用frp映射被动模式端口,本地和远程端口号需要对应
3、设置被动模式服务器地址(use the following IP)为frp服务器外网地址(可以是域名)
4、关闭安全设置里面的来源IP检查(disable IP check)

<!-- gh-comment-id:687595118 --> @Becods commented on GitHub (Sep 5, 2020): https://github.com/fatedier/frp/issues/219 请善用搜索 >ftp只使用了tcp协议,frp是完全可以支持的,icanoncn的方法是正确的,我这边测试通过. 注意点:ftp需要使用被动模式,主动模式下ftp服务器需要穿透出本地内网,再穿透入客户端内网,成功率很低. pasv_enable=YES pasv_min_port=10001 pasv_max_port=10003 pasv_address=VPS公网IP >@snowdream 不会支持 FTP 这一陈旧且不安全的协议,请寻找其他支持的软件或替代协议。 >我参照@icanoncn @shellus 用 FileZilla Server 也成功了。 主要设置点在于 1、使用固定的被动模式端口 2、使用frp映射被动模式端口,本地和远程端口号需要对应 3、设置被动模式服务器地址(use the following IP)为frp服务器外网地址(可以是域名) 4、关闭安全设置里面的来源IP检查(disable IP check)
Author
Owner

@HuangLuxuan commented on GitHub (Sep 5, 2020):

#219
请善用搜索

ftp只使用了tcp协议,frp是完全可以支持的,icanoncn的方法是正确的,我这边测试通过.
注意点:ftp需要使用被动模式,主动模式下ftp服务器需要穿透出本地内网,再穿透入客户端内网,成功率很低.
pasv_enable=YES
pasv_min_port=10001
pasv_max_port=10003
pasv_address=VPS公网IP

@snowdream 不会支持 FTP 这一陈旧且不安全的协议,请寻找其他支持的软件或替代协议。

我参照@icanoncn @shellus
用 FileZilla Server 也成功了。
主要设置点在于
1、使用固定的被动模式端口
2、使用frp映射被动模式端口,本地和远程端口号需要对应
3、设置被动模式服务器地址(use the following IP)为frp服务器外网地址(可以是域名)
4、关闭安全设置里面的来源IP检查(disable IP check)

也恳请你看一下我上条回复,我觉得如果你真的看了,大概不会这样回复我

<!-- gh-comment-id:687646389 --> @HuangLuxuan commented on GitHub (Sep 5, 2020): > #219 > 请善用搜索 > > > ftp只使用了tcp协议,frp是完全可以支持的,icanoncn的方法是正确的,我这边测试通过. > > 注意点:ftp需要使用被动模式,主动模式下ftp服务器需要穿透出本地内网,再穿透入客户端内网,成功率很低. > > pasv_enable=YES > > pasv_min_port=10001 > > pasv_max_port=10003 > > pasv_address=VPS公网IP > > > @snowdream 不会支持 FTP 这一陈旧且不安全的协议,请寻找其他支持的软件或替代协议。 > > > 我参照@icanoncn @shellus > > 用 FileZilla Server 也成功了。 > > 主要设置点在于 > > 1、使用固定的被动模式端口 > > 2、使用frp映射被动模式端口,本地和远程端口号需要对应 > > 3、设置被动模式服务器地址(use the following IP)为frp服务器外网地址(可以是域名) > > 4、关闭安全设置里面的来源IP检查(disable IP check) 也恳请你看一下我上条回复,我觉得如果你真的看了,大概不会这样回复我
Author
Owner

@HuangLuxuan commented on GitHub (Mar 6, 2022):

今天研究了下具体什么情况会被篡改结果,发现是remote_port一旦设置为21,frp就会修改FTP服务返回的被动模式ip地址,虽然通过把remote_ip修改成非21的值能解决,但是这并不是我想要的方法,试着读了下源码,还是没有找到是哪里修改的ip

<!-- gh-comment-id:1059896010 --> @HuangLuxuan commented on GitHub (Mar 6, 2022): 今天研究了下具体什么情况会被篡改结果,发现是remote_port一旦设置为21,frp就会修改FTP服务返回的被动模式ip地址,虽然通过把remote_ip修改成非21的值能解决,但是这并不是我想要的方法,试着读了下源码,还是没有找到是哪里修改的ip
Author
Owner

@fatedier commented on GitHub (Mar 6, 2022):

@HuangLuxuan 你既然能阅读代码,就说明有弄清楚问题的能力,那么最好在完全弄清楚了细节之后再提问会比较合适。

<!-- gh-comment-id:1059897322 --> @fatedier commented on GitHub (Mar 6, 2022): @HuangLuxuan 你既然能阅读代码,就说明有弄清楚问题的能力,那么最好在完全弄清楚了细节之后再提问会比较合适。
Author
Owner

@HuangLuxuan commented on GitHub (Mar 6, 2022):

细节就是在一切搭建正确的情况下,如果remote_port设置为21的话,frp就会将ftp服务器返回的被动端口的ip成错误的,这样就没法链接ftp了,如果设置为其它任意值frp就不会替换,ftp内网穿透正常工作

<!-- gh-comment-id:1059899309 --> @HuangLuxuan commented on GitHub (Mar 6, 2022): > 细节就是在一切搭建正确的情况下,如果remote_port设置为21的话,frp就会将ftp服务器返回的被动端口的ip成错误的,这样就没法链接ftp了,如果设置为其它任意值frp就不会替换,ftp内网穿透正常工作
Author
Owner

@fatedier commented on GitHub (Mar 6, 2022):

细节就是在一切搭建正确的情况下,如果remote_port设置为21的话,frp就会将ftp服务器返回的被动端口的ip成错误的,这样就没法链接ftp了,如果设置为其它任意值frp就不会替换,ftp内网穿透正常工作

Show me the code.

<!-- gh-comment-id:1059900114 --> @fatedier commented on GitHub (Mar 6, 2022): > > > > 细节就是在一切搭建正确的情况下,如果remote_port设置为21的话,frp就会将ftp服务器返回的被动端口的ip成错误的,这样就没法链接ftp了,如果设置为其它任意值frp就不会替换,ftp内网穿透正常工作 Show me the code.
Author
Owner

@HuangLuxuan commented on GitHub (Mar 6, 2022):

细节就是在一切搭建正确的情况下,如果remote_port设置为21的话,frp就会将ftp服务器返回的被动端口的ip成错误的,这样就没法链接ftp了,如果设置为其它任意值frp就不会替换,ftp内网穿透正常工作

Show me the code.

配置文件中的内容,实验的过程和结果都在上面,往上翻就能看到

<!-- gh-comment-id:1059901404 --> @HuangLuxuan commented on GitHub (Mar 6, 2022): > > > > > > > > > 细节就是在一切搭建正确的情况下,如果remote_port设置为21的话,frp就会将ftp服务器返回的被动端口的ip成错误的,这样就没法链接ftp了,如果设置为其它任意值frp就不会替换,ftp内网穿透正常工作 > > Show me the code. 配置文件中的内容,实验的过程和结果都在上面,往上翻就能看到
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#1559
No description provided.