Why
- 这个其实在 frp 的 issue 里也有人成功了,但是我感觉那位仁兄说的可能不是特别清楚,导致我花了好几天时间才研究明白。一来我觉得要分享一下吧,二来也算做个备份
Keys
Theory
- 首先要明白 vsftp 其实是使用两个端口的,一个端口负责登录,一个端口负责传输数据,所以这两个端口都需要转发。具体内容可使用搜索引擎检索关键字“FTP 的主动模式和被动模式”。
How
#设置为被动模式
echo 'pasv_enable=YES'>>/etc/vsftpd.conf
#设置被动模式的随机端口最大为 6003
echo 'pasv_max_port=6003'>>/etc/vsftpd.conf
#设置被动模式的随机端口最小为 6003
echo 'pasv_min_port=6003'>>/etc/vsftpd.conf
#既然是通过转发实现的,那么 frpc 上的 vsftp 自然要访问的是 frps 的 ip 而非 ftp 客户端的 ip
echo 'pasv_address=服务器 IP'>>/etc/vsftpd.conf
echo ' [common]' >/etc/frpc.ini
echo ' server_addr = 服务器 IP' >/etc/frpc.ini
echo ' server_port = 7000' >/etc/frpc.ini
echo ' token = 你的 token' >/etc/frpc.ini
echo ' ' >/etc/frpc.ini
echo ' [ftp1]' >/etc/frpc.ini
echo ' type=tcp' >/etc/frpc.ini
echo ' local_ip=127.0.0.1' >/etc/frpc.ini
echo ' local_port=21' >/etc/frpc.ini
#转发 frps 端口 6002 到 frpc 的 21 端口
echo ' remote_port=6002' >/etc/frpc.ini
echo ' ' >/etc/frpc.ini
echo ' [ftp2]' >/etc/frpc.ini
echo ' type=tcp' >/etc/frpc.ini
echo ' local_ip=127.0.0.1' >/etc/frpc.ini
echo ' local_port=6003' >/etc/frpc.ini
#转发 frps 端口 6003 到 frpc 的 6003 端口
echo ' remote_port=6003' >/etc/frpc.ini