frp配置内网穿透

编辑于 2022-12-02 08:52:18 阅读 805

情况是这样的,公司有台内网服务器,有一天公司要求部分人员在家办公。一般来讲,在家办公的同事想连内网服务器是不可能的。为了解决这个问题内网穿透就该了解一下了

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

frp有很多功能,这里只介绍ssh和web服务

模拟场景

  • 一台公网服务器(Linux,47.98.227.00)
  • 一台虚拟机(Linux,相当于内网服务器)
  • ssh服务测试:宿主机通过frp访问虚拟机;公网服务器通过frp访问虚拟机
  • web服务测试:通过公网IP+端口号访问内网服务

ssh服务

公网服务器

[root@iZbp1430s16l9piu268n8rZ data]# wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_amd64.tar.gz
[root@iZbp1430s16l9piu268n8rZ data]# tar -xvzf frp_0.45.0_linux_amd64.tar.gz 
[root@iZbp1430s16l9piu268n8rZ data]# mv frp_0.45.0_linux_amd64 frp
[root@iZbp1430s16l9piu268n8rZ data]# cd frp/
[root@iZbp1430s16l9piu268n8rZ frp]# ls
frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini  LICENSE
[root@iZbp1430s16l9piu268n8rZ frp]# cat frps.ini
[common]
bind_port = 7000
#默认frps.ini不用修改,直接启动服务
[root@iZbp1430s16l9piu268n8rZ frp]# ./frps -c ./frps.ini

虚拟机

[root@nfsFileSystem vagrant]# wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_amd64.tar.gz
[root@nfsFileSystem vagrant]# tar -xvzf frp_0.45.0_linux_amd64.tar.gz 
[root@nfsFileSystem vagrant]# mv frp_0.45.0_linux_amd64 frp
[root@nfsFileSystem vagrant]# cd frp/
[root@nfsFileSystem frp]# ls
frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini  LICENSE
[root@nfsFileSystem frp]# cat frpc.ini 
[common]
server_addr = 47.98.227.00
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
#启动客户端
[root@nfsFileSystem frp]# ./frpc -c ./frpc.ini

确认客户端,服务端都起来了,开始测试

宿主机通过frp访问虚拟机

实现免密码登陆,将宿主机的public key添加的虚拟机[root@nfsFileSystem frp]# echo '宿主机的public key'>> ~/.ssh/authorized_keys

cuiwei@weideMacBook-Pro nfsFileSystem % ssh -oPort=6000 root@47.98.227.00
Last login: Thu Dec  1 13:51:32 2022
[root@nfsFileSystem ~]# ls
[root@nfsFileSystem ~]# ls /vagrant/
Vagrantfile

公网服务器通过frp访问虚拟机

实现免密码登陆,将公网服务器的public key添加的虚拟机[root@nfsFileSystem frp]# echo '公网服务器的public key'>> ~/.ssh/authorized_keys

[root@iZbp1430s16l9piu268n8rZ voice]# ssh -oPort=6000 root@47.98.227.00
Last login: Thu Dec  1 13:59:05 2022 from 127.0.0.1
[root@nfsFileSystem ~]# ls
[root@nfsFileSystem ~]# ls /vagrant/
Vagrantfile

web服务

公网服务器

frps.ini追加以下配置

vhost_http_port = 8999

然后,重新启动服务端

[root@iZbp1430s16l9piu268n8rZ frp]# ./frps -c ./frps.ini

虚拟机

准备一个web服务,确保可以通过localhost:8080访问

frpc.ini追加以下配置

[web]
type = http
local_port = 8080
custom_domains = frp.cw.net

然后,重新启动客户端

[root@nfsFileSystem frp]# ./frpc -c ./frpc.ini

测试一下

访问 http://frp.cw.net:8999/

不出意外看到的就是虚拟机8080端口提供的服务

仪表盘

frps.ini追加以下配置

dashboard_port = 7500
# dashboard's username and password are both optional
dashboard_user = admin
dashboard_pwd = admin

然后,重新启动服务端

[root@iZbp1430s16l9piu268n8rZ frp]# ./frps -c ./frps.ini

测试一下

访问 http://47.98.227.00:7500/

WX202212012350182x.png

提示

上面提到的端口7000,6000,8999,7500都需要在公网服务器放开

优化:上面的客户端,服务端的启动方式可以改为后台进程,交给 Supervisor 管理。可参考 https://www.cuiwei.net/p/1109683129

参考

https://github.com/fatedier/frp

广而告之,我的新作品《语音助手》上架Google Play了,欢迎下载体验