本人拥有一个国内云服务商的云主机和一个备案好的域名,通过caddy2来作为web服务器。
我的云主机是公网ip,地址为:43.126.100.78;我备案好的域名是:hotgirl.com 。后面的文章都以上述的ip和域名来进行讲解。
域名 hotgirl.com 已经通过云服务商的域名解析功能,解析到43.126.100.78。
我这里安装的是docker版本的frps。
#创建frps目录
mkdir -p /docker/frps
[common]
bind_port = 1600
kcp_bind_port = 1600
token = YU&*JB%
dashboard_port = 2500
dashboard_user = root
dashboard_pwd = root vhost_http_port = 8108
vhost_https_port = 4334authentication_timeout=0
privilege_mode=truemax_pool_count = 50
tcp_mux=true
log_file = ./frps.log
log_level = info
log_max_days = 3subdomain_host = frp.hotgirl.com
上述配置文件存为frps.ini ,然后放入/docker/frps 路径内。
version: '3'
services:frps:restart: alwaysnetwork_mode: hostvolumes:- './frps.ini:/etc/frp/frps.ini'container_name: frpsimage: snowdreamtech/frps
cd /docker/frpsdocker-compose up -d

firewall-cmd --add-port=1600/tcp --permanentfirewall-cmd --add-port=2500/tcp --permanentfirewall-cmd --add-port=8108/tcp --permanentfirewall-cmd --add-port=4334/tcp --permanent#重启防火墙
firewall-cmd --reload
然后在云主机的“配置安全组规则” 中,手动添加上述四个端口,这里我就不截图了,可以参考 Caddy2反向代理docker版本的headscale 这篇文章中的第四部分内容。
客户端根据自己的平台来选择服务安装或者docker安装,都一样。这里贴一下配置:
[common]
server_addr = 43.126.100.78 #远程frp服务器IP
server_port = 1600 #远程frp服务器端口
token = YU&*JB% #远程frp服务器token#穿透内网的OpenWRT
[http_OpenWRT]
type = http
local_ip = 192.168.1.1 #根据自己内网网段修改
local_port = 80 #OpenWRT管理地址的端口
remote_port = 8108 #远程frp服务器的http服务端口号
#custom_domains = 自定义配置的域名
#我这里用的子域名模式,只需要在服务端配置了“subdomain_host = frp.hotgirl.com”
#后面客户端只需要填写subdomain = XXX
#就可以通过 XXX.frp.hotgirl.com 来访问内网的web服务了
subdomain = opt #匹配服务端配置的subdomain_host,随后通过opt.frp.hotgirl.com 来访问内网的OpenWRT#穿透内网的NAS
[http_Nas]
type = http
local_ip = 192.168.1.7 #根据自己内网网段修改
local_port = 5000 #nas管理地址的端口
remote_port = 8108 #远程frp服务器的http服务端口号
#custom_domains = 自定义配置的域名
#我这里用的子域名模式,只需要在服务端配置了“subdomain_host = frp.hotgirl.com”
#后面客户端只需要填写subdomain = XXX
#就可以通过 XXX.frp.hotgirl.com 来访问内网的web服务了
subdomain = nas #匹配服务端配置的subdomain_host,随后通过nas.frp.hotgirl.com 来访问内网的nas
根据我前面的文章 Caddy2的安装、部署和编译小白教程 这篇文章中讲解的,修改Caddyfile这个文件:
vim /etc/caddy/Caddyfile
加入以下代码:
*.frp.hotgirl.com {tls {dns alidns {access_key_id "ali key_id"access_key_secret "ali key_secret"}}reverse_proxy 127.0.0.1:8108{header_up X-Real-IP {http.request.remote}header_up X-Forwarded-For {http.request.remote}header_up X-Forwarded-Port {http.request.port}header_up X-Forwarded-Proto {http.request.scheme}}
}
因为我内网的web服务多,所以我就用“ *.frp.hotgirl.com ”这种简便的方式,但是这种泛域名需要用caddy的dns插件实现,需要自行编译,编译的教程已经在Caddy2的安装、部署和编译小白教程 这篇文章中讲过了,不明的同学可以回看一下。当然如果,你的内网的web服务不是很多,也没有自行编译caddy,用的还是官方标准版本,那么还可以一个web服务一个web服务的写,比如内网的OpenWRT和内网的nas,就可以这样写:
opt.frp.hotgirl.com {tls 112244@qq.comreverse_proxy 127.0.0.1:8108{header_up X-Real-IP {http.request.remote}header_up X-Forwarded-For {http.request.remote}header_up X-Forwarded-Port {http.request.port}header_up X-Forwarded-Proto {http.request.scheme}}
}nas.frp.hotgirl.com {tls 112244@qq.comreverse_proxy 127.0.0.1:8108{header_up X-Real-IP {http.request.remote}header_up X-Forwarded-For {http.request.remote}header_up X-Forwarded-Port {http.request.port}header_up X-Forwarded-Proto {http.request.scheme}}
}
说明
大家都知道,内网PVE的管理端口是8006,而且是https,如果直接用上面反代Frp的方式是不行的。
用Frp中的TCP模式
那么修改后的客户端的frpc.ini配置文件如下:
[common]
server_addr = 43.126.100.78 #远程frp服务器IP
server_port = 1600 #远程frp服务器端口
token = YU&*JB% #远程frp服务器token#穿透内网的OpenWRT
[http_OpenWRT]
type = http
local_ip = 192.168.1.1 #根据自己内网网段修改
local_port = 80 #OpenWRT管理地址的端口
remote_port = 8108 #远程frp服务器的http服务端口号
#custom_domains = 自定义配置的域名
#我这里用的子域名模式,只需要在服务端配置了“subdomain_host = frp.hotgirl.com”
#后面客户端只需要填写subdomain = XXX
#就可以通过 XXX.frp.hotgirl.com 来访问内网的web服务了
subdomain = opt #匹配服务端配置的subdomain_host,随后通过opt.frp.hotgirl.com 来访问内网的OpenWRT#穿透内网的NAS
[http_Nas]
type = http
local_ip = 192.168.1.7 #根据自己内网网段修改
local_port = 5000 #nas管理地址的端口
remote_port = 8108 #远程frp服务器的http服务端口号
#custom_domains = 自定义配置的域名
#我这里用的子域名模式,只需要在服务端配置了“subdomain_host = frp.hotgirl.com”
#后面客户端只需要填写subdomain = XXX
#就可以通过 XXX.frp.hotgirl.com 来访问内网的web服务了
subdomain = nas #匹配服务端配置的subdomain_host,随后通过nas.frp.hotgirl.com 来访问内网的nas#穿透内网的PVE
[tcp]
type = tcp
local_ip = 192.168.1.2 #PVE的管理页面地址
local_port = 8006 #PVE的管理页面的端口
remote_port = 8777 #映射到云服务器上
上面这个 “8777” 端口,可以自定义,根据自己需要修改。但是还是需要再云服务器上,放行这个端口:
firewall-cmd --add-port=8777/tcp --permanent#重启防火墙
firewall-cmd --reload
然后在云主机的“配置安全组规则” 中,手动添加上述8777端口,这里我就不截图了,可以参考 Caddy2反向代理docker版本的headscale 这篇文章中的第四部分内容。
vim /etc/caddy/Caddyfile
修改为以下代码:
opt.frp.hotgirl.com {tls 112244@qq.comreverse_proxy 127.0.0.1:8108{header_up X-Real-IP {http.request.remote}header_up X-Forwarded-For {http.request.remote}header_up X-Forwarded-Port {http.request.port}header_up X-Forwarded-Proto {http.request.scheme}}
}nas.frp.hotgirl.com {tls 112244@qq.comreverse_proxy 127.0.0.1:8108{header_up X-Real-IP {http.request.remote}header_up X-Forwarded-For {http.request.remote}header_up X-Forwarded-Port {http.request.port}header_up X-Forwarded-Proto {http.request.scheme}}
}pve.hotgirl.com {encode gziptls 112244@qq.comreverse_proxy https://127.0.0.1:8777{transport http {tls_insecure_skip_verify}}
}
不出意外,输入“https://pve.hotgirl.com” 就可以访问内网的PVE了。
