本篇文章将会介绍如何使用frp穿透内网以及如何在centos8环境下安装和使用vsftpd,最后在公网通过frp穿透内网使用ftp。

一、内网穿透神器frp

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp是一个go语言编写的、开源的项目,github地址:https://github.com/fatedier/frp

中文文档完整地址:https://gofrp.org/docs/

原理

frp 主要由 客户端(frpc)服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。

用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

安装

frp安装包,直接到github上下载二进制文件即可:https://github.com/fatedier/frp/releases

启动服务端:./frps -c ./frps.ini

启动客户端:./frpc -c ./frpc.ini

配合nohup工具使用效果更佳。

配置

解压安装文件之后,目录层次如下:

  1. ├── frpc frp客户端可执行文件
  2. ├── frpc_full.ini 完整的frp客户单配置文件,仅作为参考
  3. ├── frpc.ini 真实使用的frp客户端配置文件,通过frpc -c frpc.ini使用
  4. ├── frps frp服务端可执行文件
  5. ├── frps_full.ini 完整的frp服务端配置文件,仅作为参考
  6. ├── frps.ini 真实使用的frp服务端配置文件,通过frps -c frps.int使用
  7. ├── LICENSE
  8. └── systemd 写入系统服务的一些脚本,在centos8中并不好用,我用nohup工具进行了替代
  9. ├── frpc.service
  10. ├── frpc@.service
  11. ├── frps.service
  12. └── frps@.service

关于具体的配置使用方法,可参考官方中文文档,已经足够详细,不再赘述。但是要注意frp客户端千万不要死掉,死掉就连不上了。

二、安装vsftpd

vsftpd是linux平台的ftp服务端软件,这里只介绍vsftpd的简单使用方法,不用虚拟用户名的配置方式,全部使用linux实际用户并且每个用户只能看到自己的用户文件夹。

安装

使用命令yum install vsftpd安装vsftpd体积很小,不到1MB。

写入服务

安装完成之后,执行下面命令写入服务

  1. sudo systemctl start vsftpd
  1. sudo systemctl enable vsftpd

防火墙准入

  1. sudo firewall-cmd --zone=public --permanent --add-port=21/tcp
  1. sudo firewall-cmd --zone=public --permanent --add-service=ftp
  1. sudo firewall-cmd --reload

三、配置vsftpd

vsftpd的配置文件都在 /etc/vsftpd文件夹中,最核心的配置文件是 /etc/vsftpd/vsftpd.conf ,所以基本上所有的配置都是围绕 /etc/vsftpd/vsftpd.conf 文件进行的。

在配置该文件之前,需要注意一点,那就是 /etc/vsftpd/vsftpd.conf 配置文件中的配置并不全,很多配置是必须的,但是里面并没有给出,必须到网上自己查。 这点非常不友好,甚至可以说是非常白痴,毕竟像是frp,怕你不知道怎么写配置,还给了一个非常全面的frpc_full.ini之类的模板文件。

1.配置vsftpd.conf

禁用ipv6,启用ipv4

  1. listen_ipv6=NO
  2. listen=YES

禁用匿名登录

  1. anonymous_enable=NO

允许已登录用户上传

  1. write_enable=YES

只允许登录的用户 访问自己的文件夹

  1. chroot_local_user=YES
  2. allow_writeable_chroot=YES

设置user_list配置文件模式以及配置准入用户

  1. userlist_enable=YES
  2. userlist_file=/etc/vsftpd/user_list
  3. userlist_deny=NO

注:userlist_deny为NO表示/etc/vsftpd/user_list配置文件中的用户都是允许登录ftp的用户;userlist_deny为YES表示/etc/vsftpd/user_list配置文件中的用户都是不允许登录ftp的用户

关闭主动模式登录

  1. connect_from_port_20=NO

配置被动模式登录(重要)

  1. pasv_address=外网ip地址
  2. pasv_enable=Yes
  3. pasv_min_port=50000
  4. pasv_max_port=50002
  5. pasv_promiscuous=YES

2.创建ftp用户

创建用户

  1. sudo adduser testuser
  2. sudo passwd testuser

将用户添加到user_list文件

  1. echo testuser | sudo tee a /etc/vsftpd/user_list

3.重启ftp服务

使用命令sudo systemctl restart vsftpd或者service vsftpd restart重启ftp。

四、frp内网穿透并使用ftp服务

1.防火墙准入

在安装vsftp的时候已经做了一次防火墙准入,那是开启21端口号准入,这里则是进行数据端口号防火墙准入。

在上面的vsftpd配置中,使用了被动模式数据传输,在这种模式下,需要服务端开启若干个端口号进行数据传输,由于使用了frp内网穿透,所以需要公网主机和客户端主机同时开启端口号进行一一映射,这时候不适宜进行过多的端口号开放,根据配置文件vsftpd.conf中的配置

  1. pasv_min_port=50000
  2. pasv_max_port=50002

开放端口号50000到50002

  1. firewall-cmd --permanent --zone=public --add-port=50000-50002/tcp
  2. firewall-cmd --reload

2.frpc配置

服务端不动,只需要配置客户端并重启即可

  1. [ftp]
  2. type = tcp
  3. local_ip = 127.0.0.1
  4. local_port = 21
  5. remote_port = 21
  6. [ftp1]
  7. type = tcp
  8. local_ip = 127.0.0.1
  9. local_port = 50000
  10. remote_port = 50000
  11. [ftp2]
  12. type = tcp
  13. local_ip = 127.0.0.1
  14. local_port = 50001
  15. remote_port = 50001
  16. [ftp3]
  17. type = tcp
  18. local_ip = 127.0.0.1
  19. local_port = 50002
  20. remote_port = 50002

ftp负责接入,ftp1、ftp2、ftp3负责数据传输,配置完成之后重启frp客户端即可。

3.测试

在windows环境下使用filezillia ftp客户端进行测试,ip地址填写公网frp服务端地址,端口号填写21,被动模式,填写完账号密码后登陆即可查看下效果。

五、遇到的一些问题

1.vsftpd 425 Security: Bad IP connecting.

FTP客户端软件连接VSftpd服务报此错误,大概原因是在连接中变换了IP地址。

解决方案是修改/etc/vsftpd/vsftpd.conf,添加或者修改pasv_promiscuous=YES配置项

2.ftp客户端显示“返回了不可路由的服务器地址

解决方案是修改/etc/vsftpd/vsftpd.conf配置文件,配置配置项pasv_address=xxxx,这个配置项需要绑定公网ip地址,和vsftpd所在的机器ip可能不同,实际上就是暴露ftp服务的公网ip,在我这里实际上就是frps地址。

3.移动端连接不上或者无内容

出现过手机端链接不上或者连上了但是看不到内容的情况,分别用ES文件浏览器、FE文件管理器、FTPManager软件进行了测试,没有一个正常的,但是在windows端使用filezillia客户端确是好的

经过尝试,原来是忘了配置一行pasv_enable=Yes ,感觉像是个废话实际上不是啊。。。

六、参考文档

https://phoenixnap.com/kb/how-to-setup-ftp-server-install-vsftpd-centos-7

https://blog.csdn.net/cy104204/article/details/24490729

https://serverfault.com/questions/421161/how-to-configure-vsftpd-to-work-with-passive-mode/421169

https://blog.csdn.net/default7/article/details/97898056

https://blog.csdn.net/hajistark/article/details/82954777

https://blog.csdn.net/qq_15127715/article/details/69055099

frp穿透内网使用vsftpd服务的更多相关文章

  1. 1.使用frp穿透内网

    1.前因后果 1.1弃用ngrok 为节约服务器成本,花了500多块买了一个华为云得1G 1核心 5M得云服务器.然后用ngrok来穿透内网.一直用得还  但是今天在弄nginx得时候发现 ngrok ...

  2. 基于frp的内网穿透实例4-为本地的web服务实现HTTPS访问

    原文地址:https://wuter.cn/1932.html/ 一.想要实现的功能 目前已经实现将本地的web服务暴露到公网,现想要实现https访问.(前提:已经有相应的证书文件,如果没有就去申请 ...

  3. 疫情之下,使用FRP实现内网穿透,远程连接公司电脑进行办公

    当前情况下,经常会有需要到公司电脑进行一些操作,比如连接内网OA,数据库或者提交文档.为了减少外出,将使用frp进行内网穿透的方法进行一个说明. 前提条件 1. 一台拥有公网 IP 的设备(如果没有, ...

  4. frp端口映射穿透内网

    前言 frp 是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持 TCP.UDP.HTTP.HTTPS 等协议类型,并且 web 服务支持根据域名进行路由转发. Github: ...

  5. frp实现内网穿透

    frp实现内网穿透 目标 通过外网访问内网设备,本文中实现通过手机的移动流量,可以访问到树莓派设备 设备准备 需要被访问的设备(本文中使用Raspberry Pi`).公网IP设备(本文中使用阿里云 ...

  6. frp+nginx内网穿透

    frp+nginx内网穿透 背景:自己有台内网Linux主机,希望被外网访问(ssh.http.https): 准备工作 内网Linux主机-c,可以访问c主机和外网的主机-s(windows/lin ...

  7. 使用frp进行内网穿透,实现ssh远程访问Linux服务器

    搭建一个完整的frp服务链需要: VPS一台(也可以是具有公网IP的实体机) 访问目标设备(就是你最终要访问的设备) 简单的Linux基础(如果基于Linux配置的话) 我这里使用了腾讯云服务器作为服 ...

  8. frp 用于内网穿透的基本配置和使用

    frp 用于内网穿透的基本配置和使用 今天是端午节,先祝端午安康! frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便 ...

  9. centos7下使用n grok编译服务端和客户端穿透内网

    (发现博客园会屏蔽一些标题中的关键词,比如ngrok.内网穿透,原因不知,所以改了标题才能正常访问,) 有时候想在自己电脑.路由器或者树莓派上搭建一些web.vpn等服务让自己用,但是自己的电脑一般没 ...

随机推荐

  1. 使用 js 实现一个简易版的 drag & drop 库

    使用 js 实现一个简易版的 drag & drop 库 具有挑战性的前端面试题 H5 DnD js refs https://www.infoq.cn/article/0NUjpxGrqRX ...

  2. AIoT & IoT

    AIoT & IoT Artificial Intelligence of Things Internet of Things AIoT === AI + IoT 人工智能物联网 === 人工 ...

  3. taro & Error: spawn taro ENOENT

    taro & Error: spawn taro ENOENT https://stackoverflow.com/questions/27688804/how-do-i-debug-erro ...

  4. Windows Server2012 r2 nginx反向代理图片服务器

    1.下载nginx  http://nginx.org/en/download.html,本人下载的1.18.0版本 2.下载 Windows Service Wrapper(winsw.exe) v ...

  5. epoll原理详解及epoll反应堆模型

    本文转载自epoll原理详解及epoll反应堆模型 导语 设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻 ...

  6. epoll使用

    epoll通过下面3个epoll系统调用为用户提供服务. (1)epoll_create系统调用 epoll_create在C库中的原型如下: int epoll_create(int size); ...

  7. List和String的非空判断

    1.如果想判断list是否为空,可以这么判断: if(null == list || list.size() ==0 ){ //为空的情况 }else{ //不为空的情况 } 2.list.isEmp ...

  8. Linux流量查看工具

    目录 监控总体带宽使用 nload.bmon.slurm.bwm-ng.cbm.speedometer和netload 监控总体带宽使用(批量式输出) vnstat.ifstat.dstat和coll ...

  9. JS产生GUID

    //生成全球唯一字符串function guidGenerator() { var S4 = function () { return (((1 + Math.random()) * 0x10000) ...

  10. 原始提货单OBL

    转: 原始提货单OBL 什么是原始提货单OBL? 原始提货单Original Bill of Lading,简称OBL.是货运单据或运输合同,可作为货物标题和装运收据.该文件确认承运人已收到货物.签发 ...