内网穿透
原理
内网环境下的服务,可以让外网看到。
以一个公网服务器为踏板,将内网服务器所有服务映射上去。
这里用到的是frp和1panel。
前期准备
准备好一个有公网ip的服务器和一个内网环境下的服务器(公网只需要一个,就可以对应n个内网服务)。
两个服务器都下载安装1panel。
公网服务器开放端口:7500、7000
内网服务器开放端口:7500
到1panel的应用商店,公网服务器安装frps,内网服务器安装frpc。
进入对应的配置文件位置
在文件./home/frps.toml或./home/frpc.toml
配置文件描述
公网服务器 frps.toml 配置
通用配置,支持http和https。详细描述可以看注释。
bindAddr = "0.0.0.0"
bindPort = 7000
# 开放http的80端口和https的443端口
vhostHTTPPort = 80
vhostHTTPSPort = 443
auth.method = "token"
auth.token = "token123456"
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin123"
内网服务器 frpc.toml 配置
公网服务器的 frps.toml 基本上配置一次就可以了,但内网需要频繁调整,所以这里描述几个例子
基础配置部分
和公网服务器建立链接
# 公网frp服务的ip和端口,需要调整
serverAddr = "1.1.1.1"
serverPort = 7000
# 公网服务器的token配置,需要调整
auth.method = "token"
auth.token = "token"
# 内网服务器frpc的webserver配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin_123"
webServer.pprofEnable = false
额外配置:ssh
如果需要以外网的方式访问ssh,可以添加这段配置。
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
通过命令查看:ssh -p 2222 username@your_server_ip
额外配置:https
如果需要以外网的方式访问https服务,可以添加这段配置。
[[proxies]]
name = "web"
type = "https"
localPort = 443
customDomains = ["guoshunfa.com","www.guoshunfa.com"]
guoshunfa.com 服务本身可以正常配置,比如配置静态网页、端口映射、配置ssl,对frp都没有影响,frp只需要添加这部分配置就可以。
name是唯一标识,不能重复
额外配置:http
如果需要以外网的方式访问http服务,可以添加这段配置。
[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["guoshunfa.com","www.guoshunfa.com"]
guoshunfa.com 服务本身可以正常配置,比如配置静态网页、端口映射,对frp都没有影响,frp只需要添加这部分配置就可以。
name是唯一标识,不能重复
开发机如何配置
一半开发机是mac和windows,没办法使用1panel,那就自己docker。
前提
本机要有docker环境。
已经配置好了公网frps服务
已经准备好了域名
http服务
只需要两个文件:docker-compose.yml和frpc.toml,在同目录下。
docker-compose.yml:
version: '3.8'
services:
# FRP客户端服务
frpc:
image: snowdreamtech/frpc:0.63.0
container_name: frpc
restart: always
network_mode: host
volumes:
- ./frpc.toml:/etc/frp/frpc.toml
- ./logs:/var/log
environment:
- TZ=Asia/Shanghai
frpc.toml:
serverAddr = "1.1.1.1"
serverPort = 7000
auth.method = "token"
auth.token = "token1"
[[proxies]]
name = "web-http"
type = "http"
localIP = "192.168.1.1"
localPort = 7221
customDomains = ["xxx.guoshunfa.com"]
https服务
https需要绑定ssl,这里用到的是nginx反向代理
目录结构
文件太多就不粘贴了,源码地址:http://gitea.guoshunfa.com/guoshunfa/docker-templates
后续如果源码开源,可以把前缀换为gitee或者github查看。
如何验证配置是否正确
通过frps的webserver查看对应服务的状态,验证是否有被接收到。