使用FRP做内网穿透

为什么要做内网穿透?
普通家庭里使用的都是局域网,比如说你家在A,然后你工作的地方在B,然后你突然间想远程家里A的电脑,这时候是不能在B的网络里直接远程到A的电脑上,因为不是在同个局域网内,虽然我们可以借助第三方软件来实现远程的功能,但还是存在一些不方便,第三方软件对桌面系统很友好,例如Windows系统,ubuntu桌面,或者deepin桌面系统,这些都会有开发好的图形化的远程软件来支持。但是对命令界面的操作系统就很不友好了,我家里放的一台笔记本是装了命令界面的centos7系统。安装那些远程软件是一个问题,配置是一个问题,让很多人操碎了心,这时候制作一个内网穿透的功能就显得有一定的作用了,简而言之,有了内网穿透功能,我们就可以随时随地的远程回家的电脑了。

配置流程

这些教程是我通过在网上学来的,然后通过自己实践并总结做出来的笔记。

首先要有一个云服务器(VPS服务器)在亚马逊、阿里云、微软云等等都可以。

在云服务器上安装FRP服务端
有两种方法:

方法一:
export FRP_VERSION=0.29.1
sudo mkdir -p /etc/frp
cd /etc/frp
sudo wget "https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz"
sudo tar xzvf frp_${FRP_VERSION}_linux_amd64.tar.gz
sudo mv frp_${FRP_VERSION}_linux_amd64/* /etc/frp
方法二:
sudo wget https://github.com/fatedier/frp/releases/download/v0.29.1/frp_0.29.1_linux_amd64.tar.gz
tar xzvf frp_0.29.1_linux_amd64.tar.gz
mv frp_0.29.1_linux_amd64 frp

如果是windows系统则去平台下载对应的包:
更多平台的软件包下载地址:https://github.com/fatedier/frp/releases

防火土啬和安全组开放指定的端口:
请一定要记住,你需要将服务器的系统防火土啬,以及阿里云、腾讯云后台里找到“安全组策略”的相关配置,设置 7000 或你修改过的对应端口的「允许入站和出站」,否则会一直连接不上的哦!!!这个切记!!

启动 FRP 服务端

./frps -c ./frps.ini (不推荐这样的启动)这样退出启动控制台程序便中断了。于是我们通常选择后台启动。在linux中使用如下命令进行后台启动。然后运行的日志会输出到当前目录的nohup.log文件中
nohup ./frps -c frps.ini & (推荐)
可以使用 ps -ef | grep frps 查看程序是否在运行。

如服务器使用 Win 系统,假设解压到 c:\frp 文件夹,那么只需这样启动:

c:\frp\frps.exe -c c:\frp\frps.exe
配置 Frp 客户端 (安装在内网的机器上):

Linux系统跟上面的安装一样,Windows系统去平台下载。

vim /etc/frp/frpc.ini

[common]
server_addr = 52.231.111.111     #公网ip
server_port = 7000                 #公网端口 需要在云服务器的管理后台开放此端口。

[ssh]
type = tcp
local_ip = 192.168.2.138          #内网ip
local_port = 22
remote_port = 6000               #内网端口 需要在云服务器的管理后台开放此端口。

[DSM]
type = tcp
local_ip = 192.168.1.40 #群晖 NAS 在局域网中的内网 IP
local_port = 5000
remote_port = 7001

[RDP]
type = tcp
local_ip = 192.168.1.30 #电脑在局域网中的内网 IP (如是本机,也可使用 127.0.0.1)
local_port = 3389
remote_port = 7002

[common]表示以下配置信息是一些公用配置信息
server_addr是我们服务端即外网服务器的公网访问ip
server_port是我们前面在服务端配置的frps.ini中bind_port中对应的端口。需保持两边一致
[ssh]表示以下配置信息是我们使用ssh连接内网服务器时需要的一些配置信息
type 是连接类型,ssh方式连接就用tcp
local_ip 是本机ip,直接使用127.0.0.1即可
local_port 是本地ssh端口,ssh默认端口为22
remote_port 是外网服务器请求过来的端口 注:阿里云服务器需要在esc管理中配置安全组规则中添加6000端口

启动 FRP 客户端:

假设你已将 Frp 的客户端解压缩到 c:\frp 目录中,那么启动 Frp 客户端的命令就是:

c:\frp\frpc.exe -c c:\frp\frpc.ini

Linux 启动 Frp 客户端命令:

nohup ./frpc -c ./frpc.ini &

启动之后看到 “start proxy success”字样就表示启动成功了。

进行远程访问:

前面搞了这么多,我们终于可以正式使用 Frp 内网穿透来进行远程访问内网里的设备了!按照上面的配置,我们想要访问群晖 NAS 的界面,只需打开浏览器,在地址栏输入 服务器公网IP:7001 即可访问到群晖后台管理界面。

而如果需要远程桌面连接到家里的 Windows 电脑,那么打开“微软远程桌面客户端”后,在地址栏里填入 服务器公网IP:7002 即可连接。

远程linux客户端:
ssh root@52.231.111.111:6000

由此,借助 Frp,你就能轻松地为本地局域网内网的设备提供公网直接访问的能力了,你可以用 Frp 来转发包括但不限于 ssh、http、https、转发 Unix 域套接字等服务。

上面只是最基础的教程,Frp 还有很多很多高级功能,比如给 Web 增加密码保护、点对点内网穿透、设置端口白名单等等,Frp 官网上也提供了很详细的文档,感兴趣的朋友可以去研究一下。

外网服务器HTTP配置

通常我们在开发的时候想让别人通过外网可以直接访问到我们的系统,以便于调试和测试,我是在做微信开发的时候需要使用到内网穿透的http服务,于是我们需要在frp中添加http服务的内网穿透配置

在外网服务器的frps.ini中添加http服务配置如下:

[common]
bind_port = 7000
vhost_http_port = 6001

bind_port和之前做ssh时是一个意思。也是为了和客户端建立通信的端口,只需要在之前的配置文件中添加上vhost_http_port = 6001,这个配置意思是让别人在访问我们的服务器6001端口时。frp将http请求转发到内网服务器

服务端的http请求配置到这里就结束了

内网服务器HTTP配置

内网服务器需要在frpc.ini中添加上如下内容:

[web]
type = http
local_port = 80
custom_domains = wannabe.fun

[web]表示我们的配置是一个web服务
type表示我们的请求方式是http方式
local_port表示我们的本地服务端口号为80
custom_domains表示配置为一个已经备案的域名(必填,并且需要域名可用,开始我认为这个不是必须的,于是花了很长时间,),并且域名解析配置为外网服务器ip

以上配置完成后,我们就可以使用wannabe.fun:6001访问到我们部署在内网服务器的80端口的服务了。