内网穿透

原理

内网环境下的服务,可以让外网看到。

以一个公网服务器为踏板,将内网服务器所有服务映射上去。

这里用到的是frp和1panel。

前期准备

  1. 准备好一个有公网ip的服务器和一个内网环境下的服务器(公网只需要一个,就可以对应n个内网服务)。

  2. 两个服务器都下载安装1panel。

  3. 公网服务器开放端口:7500、7000

  4. 内网服务器开放端口:7500

  5. 到1panel的应用商店,公网服务器安装frps,内网服务器安装frpc。

  6. 进入对应的配置文件位置

在文件./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查看对应服务的状态,验证是否有被接收到。