Yufelix's Blog

Yufelix

【技术方案分享】一文搞定内网穿透(1)

Nas
36
2025-02-13

大家好!今天我们来聊聊内网穿透。如果你有一台自己的服务器,并且想通过它来访问家里的设备(比如 NAS 或者软路由),那这篇文章就是为你准备的。如果你没有服务器,可能这篇文章就不太适合你啦,可以看看其他更简单的方案哦~

整体架构

111 (1).png

方案部署

服务器端

首先,我们需要在服务器上安装 Frp 服务端 。别担心,安装过程很简单,跟着下面的步骤走就行。

1. 安装 Frp 服务端

我们可以用 Docker 来快速部署 Frp 服务端。下面是 docker-compose.yml 的配置:

version: "3.5"
services:
  frp:
    image: snowdreamtech/frps
    ports:
      - '7000:7000'  # Frp 服务端端口
      - '7500:7500'  # Frp 管理界面端口
      - '443:443'    # HTTPS 端口
      - '80:80'     # HTTP 端口
    volumes:
      - ./frps.toml:/etc/frp/frps.toml  # 配置文件挂载
    restart: always
    container_name: frp

2. 配置 Frp 服务端

接下来,我们需要配置 Frp 服务端。创建一个 frps.toml 文件,内容如下:

bindAddr = "0.0.0.0"
bindPort = 7000

vhostHTTPPort = 80
vhostHTTPSPort = 443
subdomainHost = "yourdomain.com"  # 这里换成你的域名

webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"          # 管理界面用户名
webServer.password = "admin"     # 管理界面密码

auth.method = "token"
auth.token = "123456"            # 这里换成复杂度高的 token

maxPortsPerClient = 100          # 每个客户端允许的端口数量

客户端

Frp 客户端可以部署在 NAS 或者软路由上。下面我们分别来看看怎么操作。

1. Docker 部署

如果你用的是 Docker,可以用下面的配置:

version: "3.5"
services:
  frp:
    image: snowdreamtech/frpc
    volumes:
      - ./frpc.toml:/etc/frp/frpc.toml  # 配置文件挂载
      - /opt/docker/certd/tmp:/tmp       # 证书目录映射
    restart: always
    container_name: frpc
    network_mode: host
    command:
      - -c
      - /etc/frp/frpc.toml

2. 软路由部署

如果你用的是软路由(比如 ImmortalWrt),可以通过以下命令安装 Frp 客户端:

opkg install frpc
opkg install luci-app-frpc
opkg install luci-i18n-frpc-zh-cn

3. 配置 Frp 客户端

Frp 客户端的配置文件 frpc.toml 如下:

serverAddr = "xxx.xxx.xxx.xxx"  # 你的服务器 IP 地址
serverPort = 7000
auth.method = "token"
auth.token = "123456"           # 和服务端的 token 保持一致

[[proxies]]
name = "blog"
type = "https"
subdomain = "blog"
[proxies.plugin]
type = "https2http"
localAddr = "127.0.0.1:28090"
crtPath = "/tmp/cert.pem"       # HTTPS 证书路径
keyPath = "/tmp/cert.key"       # HTTPS 私钥路径
hostHeaderRewrite = "127.0.0.1"
requestHeaders.set.x-from-where = "frp"

证书配置

为了让 HTTPS 正常工作,我们需要配置证书。这里推荐使用 Certd 来自动化管理证书。按照官方文档部署即可,非常简单。

  1. 首先,确保 /tmp 目录被映射出来。
  2. 然后,按照 Certd 的官方文档添加证书申请任务。
  3. 最后,添加一步“主机-复制到本机阶段”,把证书复制到本地。

证书配置截图

参考资料