情况是这样的,公司有台内网服务器,有一天公司要求部分人员在家办公。一般来讲,在家办公的同事想连内网服务器是不可能的。为了解决这个问题内网穿透
就该了解一下了
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
frp有很多功能,这里只介绍ssh和web服务
模拟场景
- 一台公网服务器(Linux)
- 一台虚拟机(Linux,相当于内网服务器)
- ssh服务测试:宿主机通过frp访问虚拟机;公网服务器通过frp访问虚拟机
- web服务测试:通过公网IP 端口号访问内网服务
ssh服务
公网服务器
代码语言:javascript复制[root@iZbp1430s16l9piu268n8rZ ~]# wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_amd64.tar.gz
[root@iZbp1430s16l9piu268n8rZ ~]# 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
虚拟机
代码语言:javascript复制[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 vagrant]# 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
然后,重新启动服务端
代码语言:javascript复制[root@iZbp1430s16l9piu268n8rZ frp]# ./frps -c ./frps.ini
虚拟机
准备一个web服务,确保可以通过localhost:8080
访问
在frpc.ini
追加以下配置
[web]
type = http
local_port = 8080
custom_domains = frp.cw.net
然后,重新启动客户端
代码语言:javascript复制[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
然后,重新启动服务端
代码语言:javascript复制[root@iZbp1430s16l9piu268n8rZ frp]# ./frps -c ./frps.ini
测试一下
访问 http://47.98.227.00:7500/
提示
上面提到的端口7000,6000,8999,7500都需要在公网服务器放开
参考
https://github.com/fatedier/frp