fatedier / frp

A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
Apache License 2.0
85.98k stars 13.31k forks source link

[sharing ftp over frp demo][ frp之ftp案例分享 ] 227 Entering Passive Mode( IP, xxx, xxx ) #4401

Closed weiqi-chen closed 1 month ago

weiqi-chen commented 2 months ago

Describe the feature request

我希望可以将这个配置案例添加到文档当中,我发现在issue中很多人遇到问题,但是忽略了一个细节导致失败。我留意到了并且成功通过frp建立ftp链接。在此我分享我的经验。 I hope to add this configuration case to the documentation. I have noticed that many people encounter issues in the issue tracker but overlook a detail that leads to failure. I noticed this detail and successfully established an FTP connection using FRP. Here, I am sharing my experience.

我不会对细节进行过多的讲解,我只会讲关键点。 I won’t go into too much detail, I will only cover the key points.

一个关键的错误消息: A key error message:

FTP 227 Entering Passive Mode

192.168.1.100这个IP地址是ftp server的私有IP地址。frp所有监听的都是回环地址,因此此处应该是127.0.0.1才行! The IP address 192.168.1.100 is the private IP address of the FTP server. FRP listens on loopback addresses, so it should be 127.0.0.1 here!

下方关键配置解决这个问题: The key configuration below solves this problem:

image

A机器:ftp server机器运行frp,通过proxies配置,将本地ftp端口、被动连接端口映射出去: Machine A: The FTP server machine runs FRP. Through the proxies configuration, it maps the local FTP port and passive connection port.

{{- range $_, $v := parseNumberRangePair "21,49000-49009" "21,49000-49009" }}
[[proxies]]
name = "rpi-ftp-{{ $v.First }}"
type = "stcp"
secretKey = "aaaa"
localIP = "127.0.0.1"
localPort = {{ $v.First }}
{{- end }}

B机器要访问ftp server的机器运行frp,通过visitors配置,监听本地2149000-49009端口,并将请求转发到proxiesMachine B: To access the FTP server, this machine runs FRP with the visitors configuration, listening on local ports 21 and 49000-49009, and forwarding requests to proxies.

{{- range $_, $v := parseNumberRangePair "21,49000-49009" "21,49000-49009" }}
[[visitors]]
name = "rpi-ftp-{{ $v.First }}"
servername = "rpi-ftp-{{ $v.First }}"
type = "stcp"
secretKey = "aaaa"
bindAddr = "127.0.0.1"
bindPort = {{ $v.First }}
{{- end }}

这样B机器访问ftp://127.0.0.1即可访问A机器的FTP服务器。 With this setup, Machine B can access the FTP server on Machine A by using ftp://127.0.0.1.

Describe alternatives you've considered

No response

Affected area

weiqi-chen commented 2 months ago

突然想到:这样配置的FTP服务器只有本机和frp visitors能访问。其它机器都无法访问这个FTP。我这里IP绑定配置我甚至写为127.0.0.1。 image

“对本地连接不使用外部IP”这个选项我不是很明白是什么意思,local connection是回环地址还是广播域呢?如果是广播域的话,勾选这个选项,同一个广播域其它主机应该能访问这个FTP Server。只要被FileZilla判断为非“本地连接”,那么被动模式连接的目标IP地址将会是127.0.0.1,这样就访问不了FTP Server咯。

xqzr commented 2 months ago

frp 也许应该实现,类似于 NAT ALG 的功能(对于 FTP 来说)

fatedier commented 2 months ago

FTP should no longer be the recommended protocol or tool.

github-actions[bot] commented 1 month ago

Issues go stale after 21d of inactivity. Stale issues rot after an additional 7d of inactivity and eventually close.