使用frp实现内网穿透

本文最后更新于:2021年9月22日 中午

最近购买了一个域名muzing.top,通过阿里云的DNS服务解析到了我的阿里云服务器上,从此访问我的云服务器变得非常简单。

那就利用一下这个服务器,通过frp把本地服务器上的服务传到云服务器上,实现内网穿透

一、什么是frp

项目GitHub地址
官方文档
摘自项目README

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

官方文档中给出的示例

二、安装frp

转到frp的GitHub Releases页面下载最新的发行版

1. 安装frp服务端(frps)到阿里云服务器

可以通过wget 下载最新的版本

1
root@XXXX:/opt# wget https://github.com/fatedier/frp/releases/download/v0.34.0/frp_0.34.0_linux_arm64.tar.gz

如果直接wget下载太慢,可以现在本地电脑上通过IDM等工具快速下载,然后通过ssh把压缩包上传至云服务器:

1
muzing@muzing-PC:~/Downloads$ scp /home/muzing/Downloads/frp_0.34.0_linux_amd64.tar.gz root@121.XX.XXX.XXX:/opt/ #这是在本地电脑的操作,把已经下载到Downloads文件夹中的压缩包上传到服务器

解压

1
2
root@XXXX:/opt# tar -zxvf frp_0.34.0_linux_arm64.tar.gz
root@XXXX:/opt# cd frp_0.34.0_linux_amd64/

进入刚刚解压出来的文件夹,ls查看里面的内容

1
2
root@XXXX:/opt/frp_0.34.0_linux_amd64# ls
frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE systemd

frps为服务器端使用,frpc为客户端使用,这里删掉所有frpc,以免干扰

1
root@XXXX:/opt/frp_0.34.0_linux_amd64# rm frpc frpc_full.ini frpc.ini

然后编辑 frps.ini 配置文件

1
root@XXXX:/opt/frp_0.34.0_linux_amd64# vim frps.ini

文件内容如下

1
2
3
4
[common]
bind_port = 7000 # 通过这个端口和本地机器连接,默认为7000
token = 5678 # 相当于验证码,客户端的token与此一致才允许连接
vhost_http_port = 80 #只有需要使用http时才添加这一行

2. 设置阿里云防火墙

由于阿里云的安全设置,7000端口是默认不允许的,需要我们在控制台中手动设置

进入控制台

选择配置安全组规则

设置安全组规则

3.本地机器上安装客户端(frpc)

我的本地服务器是一台安装deepen v20系统的低功耗x86主机,解压等操作可以直接通过图形界面完成,这里还是把命令行方法写一下

1
2
3
4
5
6
muzing@muzing-PC:~/Downloads$ sudo mv frp_0.34.0_linux_amd64.tar.gz /opt/
muzing@muzing-PC:~/Downloads$ cd /opt/
muzing@muzing-PC:/opt$ sudo tar -zxvf frp_0.34.0_linux_amd64.tar.gz # 解压
muzing@muzing-PC:/opt$ cd frp_0.34.0_linux_amd64/ # 进入目录
muzing@muzing-PC:/opt/frp_0.34.0_linux_amd64$ sudo rm frps frps_full.ini frps.ini #删除以免干扰
muzing@muzing-PC:/opt/frp_0.34.0_linux_amd64$ sudo vim frpc.ini # 编辑配置文件

frpc.ini 文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[common]
server_addr = 121.XX.XXX.XXX #云服务器的ip地址
server_port = 7000 #云服务器使用frp的端口号,即为刚才frps.ini中的'bind_port = 7000'
token = 5678 和刚才设置的保持一致

[ssh]
type = tcp
local_ip = 192.168.3.11 #本地服务器的ip地址
local_port = 22 本地服务器用来ssh连接的端口号,默认为22
remote_port = 6000 通过远程服务器的6000端口访问

[web]
type = http
local_port = 4000 #本地服务器的端口号
remote_port = 80 # 云服务器的端口号
custom_domains = muzing.top # 访问域名

三、启动frp

启动服务端

1
2
3
4
5
root@XXXX:/opt/frp_0.34.0_linux_amd64# ./frps -c ./frps.ini # -c 参数表示使用指定的配置文件

2020/09/22 11:46:11 [I] [service.go:190] frps tcp listen on 0.0.0.0:7000
2020/09/22 11:46:11 [I] [service.go:232] http service listen on 0.0.0.0:80
2020/09/22 11:46:11 [I] [root.go:212] start frps success

此时服务器端已经成功启动,可以看到在本机的7000端口上等待连接frps tcp,在80端口上等待连接http


启动客户端

1
2
3
4
5
6
muzing@muzing-PC:/opt/frp_0.34.0_linux_amd64$ ./frpc -c frpc.ini

2020/09/22 11:57:16 [I] [service.go:288] [9298fee2521f691b] login to server success, get run id [9298fee2521f691b], server udp port [0]
2020/09/22 11:57:16 [I] [proxy_manager.go:144] [9298fee2521f691b] proxy added: [web ssh]
2020/09/22 11:57:16 [I] [control.go:180] [9298fee2521f691b] [ssh] start proxy success
2020/09/22 11:57:16 [I] [control.go:180] [9298fee2521f691b] [web] start proxy success

可以看到成功启动了frp,并与服务器建立连接,ssh和web都成功启动了


而此时云服务器也输出了正确的信息

1
2
3
4
5
2020/09/22 11:57:16 [I] [service.go:444] [9298fee2521f691b] client login info: ip [XXX.XX.XXX.XXX:41226] version [0.34.0] hostname [] os [linux] arch [amd64]
2020/09/22 11:57:16 [I] [tcp.go:63] [9298fee2521f691b] [ssh] tcp proxy listen port [6000]
2020/09/22 11:57:16 [I] [control.go:446] [9298fee2521f691b] new proxy [ssh] success
2020/09/22 11:57:16 [I] [http.go:92] [9298fee2521f691b] [web] http proxy listen for host [muzing.top] location [] group []
2020/09/22 11:57:16 [I] [control.go:446] [9298fee2521f691b] new proxy [web] success

四、验证效果

见证奇迹的时刻:

ssh

现在我的笔记本电脑和内网服务器不在同一局域网下,但也能够ssh连接了

ssh连接成功

注意ssh连接到指定端口的方法

1
ssh -p xx user@ip  # xx为端口号 user用户名 ip为云服务器的ip

出门在外也能ssh调试宿舍里的服务器,nice


web

成功把我在本地服务器4000端口运行的hexo博客穿透到了服务器的80端口,直接浏览器中输入域名即可访问

可以通过域名访问原本在内网运行的博客啦!

五、后台运行、开机自启动

待补充……

1
nohup ./frps -c ./frps.ini &

使用frp实现内网穿透
https://muzing.top/posts/7496/
作者
Muzing
发布于
2020年9月22日
更新于
2021年9月22日
许可协议