ONEISALL

一个博客

反向代理 + 内网穿透 = 无需端口访问内网所有服务

2023-12-02
反向代理 + 内网穿透 = 无需端口访问内网所有服务

首先,我们需要明确一些概念。在这个场景中,FRP(Fast Reverse Proxy)将用于内网穿透,将你的内网服务暴露到公网。Nginx Proxy Manager将用于管理你的反向代理配置,它将运行在你的VPS(Virtual Private Server)上。以下是详细的步骤:

步骤1:设置VPS

我的Nginx Proxy Manager是安装在一台闲置的 Mac mimi 上,用了桌面版的 Portainer,来运行 NPM。常见的家用 Nas 会占用 443 端口(我在使用群晖搭建时发现),请注意这一点。

#安装 portainer 的命令

docker volume create portainer_data

docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest 

  1. 首先,你需要购买一台VPS,并确保你能够通过SSH访问它。(实际操作过程中,这台 vps 只需要安装 fprs)

  2. 安装Docker和Docker Compose。在Ubuntu系统上,你可以使用以下命令:

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

步骤2:安装和配置Nginx Proxy Manager

  1. 在你的VPS上创建一个docker-compose.yml文件,例如:
version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./config.json:/app/config/production.json
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  1. 在相同的目录下创建一个config.json文件,例如:
{
  "database": {
    "engine": "knex-native",
    "knex": {
      "client": "sqlite3",
      "connection": {
        "filename": "/data/database.sqlite"
      }
    }
  }
}
  1. 运行 docker-compose up -d 来启动Nginx Proxy Manager。

  2. 打开浏览器,访问 http://your-vps-ip:81,使用默认的用户名 admin@example.com 和密码 changeme 登录。

  3. 更改默认的用户名和密码。

步骤3:设置FRP服务器

  1. 在你的VPS上下载FRP。你可以从GitHub下载最新的版本。

  2. 解压下载的文件,并进入解压后的目录。

  3. 创建一个frps.ini文件,例如:

[common]
bind_port = 7000
token = zhoufeifan
  1. 运行 ./frps -c ./frps.ini 来启动FRP服务器。

步骤4:设置FRP客户端

  1. 在你的内网机器上下载和解压FRP。

  2. 创建一个frpc.ini文件,例如:

[common]
server_addr = your-vps-ip
server_port = 7000

[NPM]
type = tcp
local_ip = 192.168.100.100
local_port = 443 
remote_port = 443
  1. 运行 ./frpc -c ./frpc.ini 来启动FRP客户端。

步骤5:配置Nginx Proxy Manager

  1. 返回到Nginx Proxy Manager的界面。

  2. 点击 "Proxy Hosts",然后点击 "Add Proxy Host"。

  3. 在 "Domain Names" 字段输入你的域名。

  4. 在 "Forward Hostname / IP" 字段输入 " 内网 ip",在 "Forward Port" 字段输入 "服务端口号"。

  5. 点击 "Save"。

不要忘记添加证书。

完成以上步骤后,你应该可以通过你的域名访问你的内网服务了。