frp是一个使用非常简单的开源内网穿透软件,代码地址://github.com/fatedier/frp ,使用条前提你需要有一台公网服务器,大致原理是:公网服务器监听某个端口等待内网服务器连接,内网服务器连接成功后用户访问公网的某一个端口,访问的所有内容都会转发到内网服务器,也就是所有的请求都会经过公网服务器转发一次,还不是真正的完全内网穿透。
准备一台公网服务器,内网服务器可以直接用本地电脑模拟;
tar -zxvf frp_0.43.0_linux_amd64.tar.gz
mv frp_0.43.0_linux_amd64 frps
cd frps
# 删除客户端相关无用文件
rm -rf frpc*
vim frps.ini
frps.ini
配置:
[common]
# 等待内网服务器连接的端口
bind_port = 7000
# 最终用户访问的端口(http)
vhost_http_port = 7080
# 最终用户访问的端口(https)
vhost_https_port = 7081
# 密钥,最好设置,避免你的服务器被他人冒用
token = 123456
启动:./frps -c ./frps.ini
,不出意外的话就启动成功了:
tar -zxvf frp_0.43.0_darwin_arm64.tar.gz
mv frp_0.43.0_darwin_arm64 frpc
cd frpc
# 删除服务端相关文件
rm -rf frps*
vim frpc.ini
frpc.ini
配置:
[common]
# 你的公网IP
server_addr = 112.*.*.*
# 前面设置的连接端口
server_port = 7000
# 前面设置的密钥
token = 123456
# 这个名字可以随便取web1、web2等,但是需要保证所有客户端唯一
[web1]
type = http
# 需要转发的内网端口
local_port = 8080
# 自定义域名,如果没有域名直接填写公网服务器的IP
custom_domains = 112.*.*.*
然后启动:./frpc -c ./frpc.ini
,不出意外的话已经内网穿透成功了:
访问 //公网IP:7080 返回的应该是 //127.0.0.1:8080 的内容。
直接使用IP最多只能允许一台内网服务器访问连接,自定义域名可以解决此问题。内网服务器将custom_domains
修改为一个能指向公网服务器的域名,例如:
custom_domains = testfrp.haoji.me
然后访问://testfrp.haoji.me:7080 即可看到 //127.0.0.1:8080 的内容。
公网服务器的vhost_port其实可以和bind_port保持一致,这样可以更好理解:
[common]
bind_port = 7000
vhost_http_port = 7000
vhost_https_port = 7000
token = 123456
然后访问://testfrp.haoji.me:7000 即可看到 //127.0.0.1:8080 的内容。
用户访问的时候还需要带一个端口,访问不太方便,可以利用nginx再转发一层:
server {
listen 80;
server_name testfrp.haoji.me;
location / {
proxy_pass //testfrp.haoji.me:7000;
}
}
作者:codingnote,文章来源于https://codingnote.cc/p/700548/