Mac-Mini服务器及内网穿透配置教程

1/24/2025 Mac-MiniRustdesk远程控制NPSFRP内网穿透tshark抓包

# 1. 背景介绍

# 1.1 需求分析

# 1.1.1 当前现状

服务器:我有2台在Banwagon租用的服务器,1台准备作为服务器的M4 Mac Mini,还有若干单位的GPU算力集群节点。

  • Banwagon服务器1:Debian12系统、8GB内存、160GB存储(IP已被墙,后面用M4 Mac Mini替代掉)
  • Banwagon服务器2:Debian12系统、1GB内存、20GB存储(IP没被墙,后面接着续费,用于内网穿透)
  • M4 Mac Mini:MacOS Sequoia 15.2系统、16GB内存、256GB存储(刚购买添置,准备当服务器来用)
  • 单位GPU算力集群:若干具有低端显卡(3090、4090)和高端显卡(A100、A800)的高配GPU服务器

主力机:我有2台MacbookPro,其中一台作为日常学习办公的主力机,另一台用于备用机来应对主力机出故障的情况。

  • MacbookPro2021-16寸:M1 Pro芯片、MacOS Sonoma 14.5系统、16GB内存、1TB存储(平时用的)
  • MacbookPro2021-14寸:M1 Pro芯片、MacOS Sonoma 14.5系统、16GB内存、512GB存储(备用机)

# 1.1.2 痛点分析

[1] 自己的国外Banwagon服务器续费太贵了(折扣后也要每年3500多RMB),且内存、磁盘也不能自由扩展。而租用国内服务器是出了名的小带宽,还有备案这种屁事儿。因此打算使用M4 Mac Mini替代掉主Banwagon服务器,只留个低配的国外服务器用于内网穿透。

目前租用的Banwagon服务器价格

[2] 租用的Banwagon服务器那么贵还没有GPU,跑不了需要用到GPU的推理服务。Mac由于用的是统一内存(内存可以当显存用),且可以用mps来加速推理,对于这方面会有所改善。但这次买的是丐版M4 Mac Mini,能跑GPU推理但性能不高,且资源有限,目前还是不计划用它来跑LLM推理服务,后续有需要的话可以升配置或者组成Mac Mini集群来用,顺便可以用来支持智能家居的配件。

苹果芯片的UMA技术

[3] 单位的服务器集群虽然配置很高,但毕竟机器不是自己的,是多人共用环境,不适合存放个人的资料。部署的推理服务,也出于安全性考虑不适合搞内网穿透。目前阶段有模型训练需求就先用单位服务器,而模型推理需求可以用商业API代替,后续计划再添置个英伟达的Project Digits桌面超算专门用于模型的训练与推理,也当成私有化的GPU服务器来用,把需要GPU的任务放这里去运行。

Project-Digits本地超算

# 1.2 优势分析

M4的Mac Mini较于前代尺寸变小了很多,丐版内存由8GB升至16GB,加量不加价。且可以叠加国补优惠,还不到3600RMB。

M4-Mac-Mini

# 1.2.1 小巧美观

长宽都是12.7cm,高度是4.97cm,重量仅为0.67kg。单手就可以轻松拿起,放在家里当服务器来用只需要一个路由器的空间。

M4-Mac-Mini尺寸与重量

# 1.2.2 性能出色

搭载了Apple M4芯片,丐版标配16GB统一内存,可以使用mps加速LLM推理。

M4-Mac-Mini性能出色

# 1.2.3 价格低廉

丐版官方售价4499RMB,教育优惠3749RMB,电商平台叠加国补优惠不到3600RMB就能拿下。

M4-Mac-Mini价格低廉

# 1.2.4 功耗极低

基于ARM架构的Apple M4芯片能耗极低,实际使用过程基本不发热,也没有风扇噪音,非常适合作为服务器来用。

M4-Mac-Mini功耗极低

# 1.3 缺点分析

以下缺点是对于我自身现状而言,用M4 Mac Mini作为服务器来用时麻烦的几点问题,并不是产品本身的问题。

# 1.3.1 系统及架构兼容

[1] Apple M4芯片是ARM架构的,而我原先Linux服务器上的Docker镜像都是x86架构的,不同架构的镜像及容器是不能够直接迁移的,需要从Dockerfile重新构建镜像,迁移过程较为麻烦。

[2] 作为服务器来用的话,还是Linux系列的系统用起来更舒服一些,这个系统是可以刷成Ubuntu的,但由于本身芯片架构就不一样,我这里就懒得弄了,还是用原来自带的MacOS系统吧。

# 1.3.2 稳定供电与网络

[1] 相较于租用云平台的VPS,自己托管服务器需要有稳定的供电和网络环境,而家庭供电和网络都不够稳定。反正也不会在这上面跑商业化的东西,就是拿来自用的,偶尔不稳定就不稳定吧,另外可以将其放到单位里。

[2] 家庭网络是缺少IPV4公网IP的,这个找运营商是能给开的,但我懒得去弄,还是在境外服务器上用NPS或FRP搞个内网穿透省事儿。

# 1.3.3 需购买配件使用

由于我不习惯用桌面主机,平时都是用笔记本来学习办公,因此家里是没有显示屏幕、有线鼠标、有线键盘的。虽然我作为服务器使用并不需要这些,但系统初始化操作是需要用到的(直到配置好远程访问之前),不然无法操作。

这里我去京东花了不到500块买了套廉价配件凑合用一下,屏幕买了个Eimio便携屏,有线鼠标和键盘都买的十几块钱的便宜货,它通常都是USB口的,而M4 Mac mini提供的是Type-C口,因此还需要买几个USB转Type-C的转接头。

M4-Mac-Mini外设连接与扩展

# 2. Mac-Mini配置基础环境

# 2.1 系统基本配置

# 2.1.1 系统的基础初始化

给Mac Mini连接电源、显示器、键盘、鼠标等配件,按照正常操作Mac的逻辑进入主界面完成初始化设置,连接上网络。

# 2.1.2 限制系统进入休眠

作为服务器使用,需限制系统进入休眠,这个可在系统设置的“能源”菜单里配置,将下面3项全部打开。

  • 显示器关闭时,防止自动进入睡眠
  • 唤醒以供网络访问
  • 断电后自动启动

Mac取消自动睡眠并断电开机自启

此时 Mac mini 关闭显示器不会进入睡眠状态,且遇到意外断电的情况,通电之后也会自己开机,而手动关机不受此影响。

# 2.1.3 限制系统锁定屏幕

作为服务器使用,需限制系统锁定屏幕,这个可在系统设置的“锁定屏幕”菜单里配置,将下面3项全部设置为“永不”。

  • 不活跃时启动屏幕保护程序
  • 不活跃时关闭显示器
  • 屏幕保护程序启动或显示器关闭后需要密码

锁定屏幕设置成永不

# 2.1.4 用户与群组设置

将“用户与群组”菜单下的“自动以此身份登录”选择管理员用户。配置之后,开机会自动进入桌面而无需输入密码,方便App自启。

  • 注:如果之前设置了“文件保险箱”,需要先将其关闭(在“隐私与安全性——文件保险箱”处配置)

用户与群组设置自动以此身份登录

# 2.2 远程控制访问

设置好远程访问后,就可以给Mac Mini抛弃屏幕、鼠标、键盘了,直接在主力机上进行操作。

  • 在局域网访问,可以使用MacOS自带的屏幕共享功能,注意需要配置一下网络,防止路由器IP发生变化导致无法连接。
  • 在公网访问,可以使用向日葵、ToDesk、TeamViewer等商业工具,也可以使用开源的Rustdesk工具(服务端可自建)。

# 2.2.1 局域网远程控制

Step1:在Mac Mini上打开屏幕共享

通用——共享——屏幕共享,将其打开即可

开启屏幕共享

拉到底可以看到本地主机名(可以修改)

查看本地主机名

Step2:防止路由器IP发生变化

为防止路由器IP发生变化,可在Mac mini中,将网络设置改成“手动”,或者在路由器后台绑定这台Mac mini的IP地址,我这里采用前者。

网络——WiFi / 以太网——详细信息——TCP/IP这里把“使用DHCP”的设置改为手动,并将原先“使用DHCP”的IP地址、子网掩码、路由器原封不动填写回去。

修改网络设置为手动

Step3:在MacbookPro连接访问

在MacbookPro主力机打开屏幕共享,可以查看到那台Mac mini了(找不到的话就手动添加)。屏幕共享类型的设置,如果用的是WiFI就选择标准,如果是有线网络可以使用高性能。

使用屏幕共享去远程连接

如果用的是“标准”模式,连接后可能会略有延迟与卡顿,且清晰度不是很高(这也是这篇博客部分截图不清晰的原因)。

屏幕共享连接的效果

# 2.2.2 公网远程控制

我采用自建Rustdesk的方案,这里就不介绍向日葵、ToDesk、TeamViewer这些商业工具了,我不喜欢它们,但适合小白使用。

[1] Rustdesk简介

RustDesk是一款优秀的免费开源的远程控制软件,采用rust语言编写,无需任何配置开箱即用。服务端代码开源,可自建中继节点,采用TLS 1.3端到端加密协议保护用户的通信安全,用户可以完全掌控数据,不用担心安全问题。可作为向日葵与TeamViewer的开源替代品。

[2] 搭建rustdesk-server

项目地址:https://github.com/rustdesk/rustdesk-server (opens new window)

拉取镜像并运行hbbs与hbbr。

$ docker image pull rustdesk/rustdesk-server
$ docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -it --net=host --rm rustdesk/rustdesk-server hbbs -r 自己的服务器IP   // 运行hbbs
$ docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -it --net=host --rm rustdesk/rustdesk-server hbbr   // 运行hbbr
1
2
3

[3] 客户端配置自建服务器

使用公共服务器:无需配置即可使用。

使用私有服务器:找到“ID/中继服务器”配置,把ID服务器的地址填写成自己的服务器IP即可。

Rustdesk

# 3. Mac-Mini安装工具应用

本节是按照我的个人习惯修改系统设置,并安装工具应用,按需即可,详见我的另一篇博客:MacOS的基础设置及使用指南 (opens new window)

# 3.1 其他系统设置修改

# 3.1.1 修改终端里显示的主机名

$ sudo scutil --set HostName "m4-mac-mini"
1

# 3.1.2 允许安装任意来源的应用

Step1:打开终端,输入以下命令(未输入以下命令之前没有“任意来源”选项)

$ sudo spctl --master-disable
1

Step2:苹果小图标——系统偏好设置——安全性与隐私——通用——“允许从以下位置下载的App”处选择“任意来源”

安装任意来源的应用

# 3.1.3 访达显示路径栏

任意打开一个访达窗口,在左上角菜单栏里找到“显示” →点击“显示路径栏”即可显示文件路径。(快捷键:Command-Option-P)

右键路径栏,可以进行复制路径、在当前路径打开终端等操作。

# 3.1.4 显示隐藏文件

$ defaults write com.apple.finder AppleShowAllFiles TRUE
$ killall Finder
1
2

# 3.1.5 设置屏幕分辨率

苹果小图标——系统偏好设置——显示器——缩放(下面有四种分辨率选项)

如果想要扩展使用其他的屏幕分辨率,可借助 display-maestro 软件来实现,破解包:https://macwk.com/soft/display-maestro

右键 display-maestro 图标——从 Color LCD 中选择一个合适的分辨率即可

# 3.2 安装基础开发环境

# 3.2.1 安装Homebrew包管理器

基本介绍:Homebrew 是Mac OS X下的一款软件包管理器, 相当于Linux下的yum、apt-get。通过它可以方便的下载、安装、管理应用, 不再需要亲自动手去搜索各种安装包。

安装命令:选择一个可用的安装源去安装即可。

// 国内源卸载并安装(首选)
$ /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"     
// 官方源安装命令(备用,需代理)
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"   
// 官方卸载命令(备用,需代理)
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" 
// 中科大镜像源安装命令(备用)
$ /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"   
// 中科大镜像源卸载命令(备用)
$ /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/uninstall.sh)"     
1
2
3
4
5
6
7
8
9
10

# 3.2.2 安装tree查看目录层级结构

$ brew install tree   // 安装tree命令(需要先安装Homebrew包管理器)
$ tree -L 2           // 显示当前目录的目录结构,限制目录层级为2
1
2

# 3.2.3 安装telnet测试端口连接性

$ brew install telnet       // 安装telnet命令(需要先安装Homebrew包管理器)
$ telnet www.baidu.com 80   // 用telnet命令测试端口连接性
1
2

# 3.2.4 安装Docker环境并迁移镜像

可以选择官方的Docker Desktop和第三方的OrbStack,安装后即可使用docker命令,建议选择后者,它比官方的性能还要好一些。

OrbStack是一款专为macOS设计的快速、轻量级且易于操作的Docker容器工具,官方声称它比DockerDesktop速度更快。

OrbStack下载:https://orbstack.dev (opens new window)

OrbStack

对旧服务器用Docker部署的应用进行迁移,从Dockerfile重新构建镜像,详见我的另一篇博客:Docker容器化及项目环境管理 (opens new window)

# 3.3 安装常用应用软件

# 3.3.1 安装查看剪贴板记录的工具

可借助 Maccy (opens new window) 开源工具实现,默认快捷键为 Shift (⇧)+ Command (⌘)+C,安装命令如下:

$ brew install --cask maccy
1

# 3.3.2 安装ClashX并配置科学上网

可以使用ClashX、Quantumult X等工具配置科学上网环境,详见我的另一篇博客:Clash配置转换及全平台科学上网 (opens new window)

ClashX下载:https://github.com/yichengchen/clashX/releases(备用下载地址:ClashX.dmg (opens new window)

这里直接将主力机的配置文件(设置——打开配置文件夹)拷贝过去即可使用。

# 3.3.3 安装Chrome并同步用户配置

Chrome下载:https://www.google.com/chrome (opens new window),登录账号后即可同步主力机的用户配置。

# 4. Mac-Mini配置内网穿透

# 4.1 内网穿透概述

[1] 什么是内网穿透

  • 内网穿透,是指计算机在内网内使用私有IP地址,在连接外网时使用全局IP地址的技术。该技术被普遍使用在有多台主机但只通过一个公有IP地址访问的私有网络中。简单来说内网穿透的目的是:让外网能访问你本地的应用,例如在外网打开你本地的Web站点。

[2] NPS相较于FRP的优势

  • FRP手动编写映射规则配置文件。NPS在浏览器中可视化配置。
  • FRP新增映射规则需要重启客户端。NPS无需重启客户端,所有配置均在服务端进行配置立即生效。
  • FRP需要手动设置开机自启。NPS安装后自动注册到系统服务,随系统启动而启动。

# 4.2 NPS内网穿透

# 4.2.1 NPS基本介绍

NPS内网穿透工具是一款轻量级、高性能、功能强大的代理服务器,用于实现内网与外网之间的通信。它可以将外部网络请求转发到内网服务器,使得内网服务器可以被外部访问到。NPS支持TCP和UDP流量转发,并且可以支持任何TCP和UDP上层协议,例如访问内网网站、本地接口调试、SSH访问、远程桌面等。

# 4.2.2 服务端配置NPS

Step1:查看服务端的内核版本

$ arch
x86_64
1
2

Step2:下载对应内核版本的NPS服务端安装包

$ mkdir nps && cd nps
$ wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz
$ tar -zxvf linux_amd64_server.tar.gz
1
2
3

Step3:修改NPS服务端的配置信息

$ vim conf/nps.conf
1

通常只需要修改 web_password、http_proxy_port、https_proxy_port 即可(为了安全性,建议设置成强密码),其他常用配置如下:

  • http_proxy_port:域名代理http代理监听端口。
  • https_proxy_port:域名代理https代理监听端口。
  • https_just_proxy:为false时仅代理https转发,为true则可以配置站点的ssl证书。
  • web_port:web管理端口。
  • web_username:web界面管理账号。
  • web_password:web界面管理密码。

注:服务端默认配置启用了8024,8080,80,443端口,端口冲突无法启动,请修改配置。默认配置里有个 web_host=a.o.com,这个不需要修改,不影响内网穿透。

Step4:启动NPS的服务端

$ ./nps install
$ nps start
1
2

Step5:访问NPS服务端管理面板

使用Chrome浏览器打开 http://ip:8080地址(如果web_port配置未修改则为8080),使用 web_username 和 web_password 登录。

NPS服务端管理面板

注:如果该地址无法访问,那就是启动报错了,可通过如下命令进行查看,通常是端口被占用了。

$ cat /var/log/nps.log
1

另注:如果之前安装时因端口冲突导致启动失败,并在修改配置和卸载后重新安装启动,却发现配置并没有生效。原因是实际使用的配置文件位于 /etc/nps 目录,它被拷贝过来了,并不是你原来目录的。这也太坑了,nps uninstall卸载根本没清理干净,将它删掉即可。

$ rm -rf /etc/nps
1

# 4.2.3 客户端配置NPS

[1] Linux客户端

Step1:查看客户端的内核版本

$ arch
x86_64
1
2

Step2:下载对应内核版本的NPS客户端安装包

$ mkdir npc && cd npc
$ wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz
$ tar -zxvf linux_amd64_client.tar.gz
1
2
3

Step3:在NPS服务端的管理面板创建客户端

客户端——新增——只填写备注即可(只是用于区分)——新增后可以在面板上看到“唯一验证密钥”。

NPS新增客户端

Step4:启动NPS客户端

-server填写服务端IP,端口号如果没改默认是8024(仪表盘的“客户端连接端口”处也可以查看),-vkey填写面板上的“唯一验证密钥”。

$ ./npc install -server=xxx.xxx.xxx.xxx:8024 -vkey=your_vkey
$ npc start
1
2

[2] Mac客户端

Step1:查看客户端的内核版本

$ arch
arm64
1
2

Step2:下载对应内核版本的NPS客户端安装包

$ mkdir npc && cd npc
$ wget https://github.com/ehang-io/nps/releases/download/v0.26.10/darwin_amd64_client.tar.gz
$ tar -zxvf darwin_amd64_client.tar.gz
1
2
3

Step3:在NPS服务端的管理面板创建客户端

客户端——新增——只填写备注即可(只是用于区分)——新增后可以在面板上看到“唯一验证密钥”。

Step4:启动NPS客户端

-server填写服务端IP,端口号如果没改默认是8024(仪表盘的“客户端连接端口”处也可以查看),-vkey填写面板上的“唯一验证密钥”。

$ sudo ./npc install -server=xxx.xxx.xxx.xxx:8024 -vkey=your_vkey
$ sudo npc start
1
2

注意事项:

[1] 执行安装命令时会提示“无法打开npc,因为无法验证开发者”,这个要去系统设置的“隐私与安全性”处允许npc的访问。

[2] 必须带上sudo去执行命令,不然权限是不足的,报错信息如下:

Failed to start nps内网穿透客户端: "launchctl" failed with stderr: Warning: Expecting a LaunchAgents path since the command was ran as user. Got LaunchDaemons instead.
1

[3] 如果给NPS配置了域名,在npc install的时候也还是配置IP地址,不然可能会无法连上客户端。

# 4.2.4 开启隧道映射

在NPS服务端面板的对应客户端里,点击“隧道”按钮,再点击“新增”,模式用默认的TCP隧道,配置客户端与服务端的端口映射即可。

  • 做微信公众号开发、小程序开发等 ----> 域名代理模式
  • 想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射 ----> tcp代理模式
  • 在非内网环境下使用内网dns,或者需要通过udp访问内网机器等 ----> udp代理模式
  • 在外网使用HTTP代理访问内网站点----> http代理模式
  • 搭建一个内网穿透ss,在外网如同使用内网vpn一样访问内网资源或者设备----> socks5代理模式

NPS开启隧道映射

之后就可以用服务端的映射端口去访问了,如果可以访问成功则代表配置成功,管理面板上的仪表盘也能看出来。

# 4.3 FRP内网穿透

# 4.3.1 FRP基本介绍

[1] FRP简介

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

[2] FRP原理

frp 由客户端(frpc)和服务端(frps)组成,服务端部署在有公网 IP 的机器上,客户端部署在需要穿透的内网服务的机器上。用户可以通过访问frps服务端,然后由frp根据请求将数据包路由到对应的内网服务器,从而实现内外网之间的通信需求。

代理类型:在 frp 中一个代理对应一个需要暴露的内网服务。一个客户端支持同时配置多个代理。

类型 描述
tcp 单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。
udp 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。
http 针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。
https 针对 HTTPS 应用定制了一些额外的功能。
stcp 安全的TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
sudp 安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
Xtcp 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。
tcpmux 支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。

[3] FRP特点

通过在有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供很多的功能特性,这包括:

  • 代理组间的负载均衡
  • 服务端和客户端 UI 页面
  • 端口复用,多个服务通过同一个服务端端口暴露
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展
  • 多个原生支持的客户端插件,便于独立使用 frp 客户端完成某些工作
  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间

# 4.3.2 服务端配置FRP

服务端配置:服务端可以使用这个一键脚本进行安装配置,https://github.com/MvsCode/frps-onekey (opens new window)

$ wget https://raw.githubusercontent.com/mvscode/frps-onekey/master/install-frps.sh -O ./install-frps.sh
$ chmod 700 ./install-frps.sh
$ ./install-frps.sh install
1
2
3

所有配置都使用默认的就可以跑起来(公网IP这里我脱敏成了111.111.111.111),实际使用可以按照需求进行配置,安装过程如下:

vhost http port、vhost https port 这里特意不使用默认的 80与443,因为之后可能会再配置 Nginx,这里尽量不去占用它的端口。

  • 另注:Nginx 配置里加上 proxy_set_header Host $proxy_host; 可解决配置域名后出现 Invalid Host header 的问题。
+------------------------------------------------------------+
|   frps for Linux Server, Author Clang ,Mender MvsCode     |
|      A tool to auto-compile & install frps on Linux        |
+------------------------------------------------------------+


Please select frps download url:
[1].gitee
[2].github (default)
Enter your choice (1, 2 or exit. default [github]): 2
-----------------------------------
       Your select: 2    
-----------------------------------
Loading network version for frps, please wait...
frps Latest release file frp_0.51.3_linux_amd64.tar.gz
Loading You Server IP, please wait...
You Server IP:111.111.111.111
————————————————————————————————————————————
     Please input your server setting:
————————————————————————————————————————————

Please input frps bind_port [1-65535](Default Server Port: 5443):
frps bind_port: 5443


Please input frps vhost_http_port [1-65535](Default : 80):
frps vhost_http_port: 81


Please input frps vhost_https_port [1-65535](Default : 443):
frps vhost_https_port: 444


Please input frps dashboard_port [1-65535](Default : 6443):
frps dashboard_port: 6443


Please input frps dashboard_user(Default : admin):
frps dashboard_user: admin


Please input frps dashboard_pwd(Default : dmmSEiiE):
frps dashboard_pwd: dmmSEiiE


Please input frps token(Default : wbWhbDKpjZmlC01s):
frps token: wbWhbDKpjZmlC01s


Please input frps subdomain_host(Default : 111.111.111.111):
frps subdomain_host: 111.111.111.111


Please input frps max_pool_count [1-200]
(Default : 50):
frps max_pool_count: 50

Please select log_level
1: info (default)
2: warn
3: error
4: debug
-------------------------
Enter your choice (1, 2, 3, 4 or exit. default [1]): 
log_level: info


Please input frps log_max_days [1-30]
(Default : 3 day):
frps log_max_days: 3

Please select log_file
1: enable (default)
2: disable
-------------------------
Enter your choice (1, 2 or exit. default [1]): 
log_file: enable

Please select tcp_mux
1: enable (default)
2: disable
-------------------------
Enter your choice (1, 2 or exit. default [1]): 
tcp_mux: true

Please select kcp support
1: enable (default)
2: disable
-------------------------
Enter your choice (1, 2 or exit. default [1]): 
kcp support: true

============== Check your input ==============
You Server IP      : 111.111.111.111
Bind port          : 5443
kcp support        : true
vhost http port    : 81
vhost https port   : 444
Dashboard port     : 6443
Dashboard user     : admin
Dashboard password : dmmSEiiE
token              : wbWhbDKpjZmlC01s
subdomain_host     : 111.111.111.111
tcp_mux            : true
Max Pool count     : 50
Log level          : info
Log max days       : 3
Log file           : enable
================================================

frps status manage : frps {start|stop|restart|status|config|version}
Example:
  start: frps start
   stop: frps stop
restart: frps restart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115

注意事项:开启KCP之后,无论在下载还是延迟上都会有很大的优化,由于支持端口复用,就算环境不支持KCP也不会出错,所以这个选项建议默认开启。

  • KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据的发送方式,以 callback的方式提供给 KCP。连时钟都需要外部传递进来,内部不会有任何一次系统调用。
  • TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。
  • 可以简单理解为基于UDP的KCP协议就是在保留UDP高传输速度的同时尽可能地提高了可靠性。

安装目录为/usr/local/frps,除了上面给出的命令之外,还有更新和卸载的命令:

$ ./install-frps.sh update         // 更新
$ ./install-frps.sh uninstall      // 卸载
1
2

使用Chrome浏览器打开http://111.111.111.111:6443地址,账号密码为 admin / dmmSEiiE,可以访问到管理面板。

frp管理面板

# 4.3.3 客户端配置FRP

客户端配置:客户端从Releases里下载相应系统的版本,修改配置文件启动即可。https://github.com/fatedier/frp/releases/tag/v0.51.3 (opens new window)

$ wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
$ tar -xzf frp_0.51.3_linux_amd64.tar.gz
$ cd ./frp_0.51.3_linux_amd64
$ vim frpc.ini
1
2
3
4

假设有个内网的http://127.0.0.1:3000服务需要开内网穿透,客户端配置如下:

[common]
server_addr = 111.111.111.111
server_port = 5443        
token = wbWhbDKpjZmlC01s    

[ssh]
type = tcp
local_ip = 127.0.0.1  
local_port = 3000       
remote_port = 3000   
1
2
3
4
5
6
7
8
9
10

注:server_addr是服务端的公网IP,server_port是服务端绑定的端口地址(与服务端一致),token是与服务端通信的Token(与服务端一致),local_port是内网服务的端口(与实际服务一致),remote_port是外网服务的端口(可以随便配)

配置完成之后,后台启动frp工具的客户端即可。

$ nohup ./frpc -c ./frpc.ini &
1

配置成功之后,使用Chrome浏览器打开http://111.111.111.111:3000地址,就可以访问到原来在内网的服务了。

# 4.3.4 抓包检查数据混淆

[1] 安装抓包工具

在客户端安装抓包工具,由于Debian系统没有图形化界面,这里使用 tshark 代替常用的 wireshark 进行抓包。

$ sudo apt install tshark 
1

根据以上配置,我们的抓包规则为:

ip dst host 111.111.111.111 or tcp port 3000 or udp port 3000
1

[2] 捕获数据包

捕获数据包:首先确保你已经用合适的过滤条件捕获了数据包

$ sudo tshark -i eth0 -f "ip dst host 111.111.111.111 or tcp port 3000 or udp port 3000"

Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'
    1 0.000000000 222.222.222.222 → 111.111.111.111 TCP 66 171805003 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 WS=128
    2 12.037029685 222.222.222.222 → 111.111.111.111 TLSv1.2 88 Application Data
    3 12.037170596 222.222.222.222 → 111.111.111.111 TLSv1.2 87 Application Data
    4 12.037993845 222.222.222.222 → 111.111.111.111 TCP 54 441585443 [ACK] Seq=68 Ack=35 Win=501 Len=0
    5 12.038056372 222.222.222.222 → 111.111.111.111 TCP 54 441585443 [ACK] Seq=68 Ack=68 Win=501 Len=0
    6 19.710702001 222.222.222.222 → 111.111.111.111 TCP 66 172425003 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 WS=128
1
2
3
4
5
6
7
8
9
10

[3] 查看数据包

查看数据包:使用 -x 选项,你可以在捕获输出中查看数据的十六进制表示。

$ sudo tshark -i eth0 -f "ip dst host 111.111.111.111 or tcp port 3000 or udp port 3001" -x

Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'
0000  10 0e 7e a5 5a a1 aa aa 00 18 74 07 08 00 45 00   ..~.Z.....t...E.
0010  00 34 bf a8 40 00 40 06 c7 ff 62 8e 8b 63 68 80   .4..@.@...b..ch.
0020  5c aa 1e 02 13 8b fe e4 a8 67 00 00 00 00 80 02   \........g......
0030  fa f0 b3 42 00 00 02 04 05 b4 01 01 04 02 01 03   ...B............
0040  03 07     
1
2
3
4
5
6
7
8
9

以上可以看到,数据包的协议标识为TLSv1.2,数据包是被加密的。查看十六进制输出,它不是明文或可轻易解读的格式,这与加密或混淆的数据特性一致。

# 5. 参考资料

[1] 对新手最友好的服务器!Mac mini 家用服务器手把手配置教程 from YouTube (opens new window)

[2] 允许远程电脑访问你的 Mac from Apple支持 (opens new window)

[3] Mac mini 功耗和热输出 (BTU) 信息 from Apple支持 (opens new window)

[4] rustdesk中继服务器的docker镜像使用 from CSDN (opens new window)

[5] NPS-比frp还简单易用的内网穿透及端口映射工具 from 谢雨尘安的博客 (opens new window)

[6] 70.3K Star!最强开源网络穿透工具推荐 from 知乎 (opens new window)

[7] 内网渗透代理之frp的应用与改造(一)from 安全客 (opens new window)

[8] 通过Frp内网穿透实现内网网络连接并创建vmess节点 from cnblogs (opens new window)

Last Updated: 3/30/2025, 9:40:20 AM