Cane's Blog

Cane

【Nas】无公网v4/v6, 一键回到家庭局域网

Nas
298
2024-09-27

前言

本方案需要一台自有服务器提供核心 FRP 穿透服务,不打算使用服务器的朋友,可以不用往下看了。

项目亮点

  • 方便: 与传统的 FRP 单端口穿透相比,一键回到家庭局域网,访问整个家庭网络,而非一个服务一个服务映射

  • 快捷: 与 Tailscale 等服务相比,无需注册、无需下载客户端,全过程自建可控

  • 高效: 任意设备支持,PC/PAD/Phone, Windows/Mac/Linux, Android/iOS,所有支持 HTTP 代理的设备均可使用

  • 安全: 控制开关可接入「微信 / Telegram」 等第三方服务,一键物理断开网络,安全有效

效果展示

以下演示为异地连接家庭局域网,家庭无v4/v6!Frp 服务器带宽 5M!

企业微信.png

手机回家模式.jpg

整体架构

网络架构.png

方案部署

服务器端

安装 Frp 服务端 + Nginx Proxy Manager

version: "3.5"
services:
  frp:
    image: snowdreamtech/frps
    ports:
      - "7000:7000"
    volumes:
      - /home/frp/frps.toml:/etc/frp/frps.toml
    restart: always
    container_name: frp
    networks: 
      - nginx
  nginx:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx
    ports:
      - "81:81"
      - "8888:8888"
    restart: always
    volumes:
      - /home/nginx/data:/data
    environment:
      - TZ=Asia/Shanghai
    networks:
      - nginx
networks:
  nginx:
    name: nginx

Frp 服务端配置(frps.toml)

bindAddr = "0.0.0.0"
bindPort = 7000
kcpBindPort = 7000
auth.method = "token"
auth.token = "xxxxxxxxxx"

NPM 配置

npm配置1.png

npm配置2.png

家庭网络

这里我已群晖为例,其他的 Nas 系统也都是可以的,全过程可以使用 Docker 搭建

安装 Frp 客户端(这里我选择的群晖套件版)、Tinyproxy

version: "3.5"
services:
  tinyproxy:
    image: dannydirect/tinyproxy:latest
    container_name: tinyproxy
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "8888:8888"
    command: "ANY"
    restart: unless-stopped

Frp 客户端配置

serverAddr = "xx.xx.xx.xx"
serverPort = 7000
auth.method = "token"
auth.token = "xxxxxxxxxx"

[[proxies]]
name = "tinyproxy"
type = "tcp"
localIP = "192.168.3.5"
localPort = 8888
remotePort = 8888

连接 企业微信应用 / Telegram

  1. 首先抓包下 NPM 的登录接口(http://xxxxxx/api/tokens),抓取 token

  2. 抓包下 Stream 开关的请求,具体来说有两个

http://xxxx/api/nginx/streams/{item_id}/enable

http://xxxxxx/api/nginx/streams/{item_id}/disable

item_id 是具体的规则排序号

使用方法及注意事项

不用的时候一定要在 NPM 里面把转发关掉!

不用的时候一定要在 NPM 里面把转发关掉!

不用的时候一定要在 NPM 里面把转发关掉!

重要的事情说三遍。这套方案唯一的弱点是在开启期间,http 代理是有被扫到的风险的(可以通过给 http 代理加安全验证来规避)

但是我觉得没必要,因为我都是随用随关的。我在外接入家庭网络一般是为了管理或部署一些服务,基本就 30 ~ 60 分钟开启窗口期

攻破我的「群晖系统」 需要:

1.在我使用的这 30 - 60 分钟,正好被扫描器扫到我的代理

2.使用了我的代理,且猜到了我的内网服务+端口号

3.在 10次 重试内,成功猜到我的群晖帐号密码(否则会被系统锁定)

这一套下来跟被陨石砸死的概率差不多,而且群晖 QucickLink 是常年开启的,也没听说几个被猜到的,这个只有你使用的窗口期开启,概率更低

手机 / PAD

可以通过在网络设置里,设置代理服务器,就可以一键回家了

手机代理.png

PC

PC可以通过代理设置(不推荐,一般使用家庭局域网,用浏览器就够了,我更倾向于使用浏览器插件)

PC代理.png

浏览器

Chrome 系浏览器,推荐使用 「SwitchyOmega」插件,新建一个情景模式,可以一键回家!

浏览器代理.png

一键回家.png