Featured image of post 内网穿透-Frp

内网穿透-Frp

搭建内网穿透的记录

因为自个的台式机(Christina)和服务器(Maffia)都放在实验室工位,有的时候人不在工位需要远程控制,之前一直用的是向日葵,但是向日葵免费版本的带宽实在是太小了,免费用户的体验实在是不太好,常常断流,而且会有弹窗广告,还是当备案,首选搭建别的穿透服务来远程控制。

Zerotier

Zerotier是用来搭建虚拟局域网的工具,在没有公网Ipv4的情况下,还是挺好用的,但是它的服务器毕竟是国外的,有的时候常常打洞失败,并且有的时候会出BUG,还没细究是Win版远程桌面的锅还是是什么别的原因(つづく)

准备工作

软件下载

这个是Zerotier的官网下载地址: Download - ZeroTier,Christina是Windows系统,正常安装就好,一般这种服务本身不太占内存,就直接装在C盘了,免去一些配置路径和依赖。

Zerotier注册

注册一个自己的虚拟局域网,由zerotier服务器来配置ip和路由管理,免费版本一个Network下能提供至多25个设备支持(一般是足够了),权限设置成私人,对设备进行授权管理。 Rename Zerotier Network

注册完毕并创建一个网络服务后,会获得该网络下的网络ID(Networkd ID),再选择性得配置好该网络的名称和相关说明就好。 Add&Authorize services

将设备加入到虚拟局域网当中

join the network

打开下载好的zerotier程序,右键进行配置,能看到当前主机的ID,选择「Join New Network」,填入Step2创建好的网络ID,再回到网页配置中(一般会有一点延迟),能看到Members选项下会出现未授权的设备,Address对应到当前主机的ID,进行对应的授权后就能看到Zerotier配置的ip(Managed IPs),这样就将当前主机加入到创建好的虚拟局域网当中了。 我这边加入了4台自己的设备,可以尝试ping一下各台主机来进行测试。

Ping Test

能正常ping通就表明成功了

题外

zerotier的服务器在海外,不受控,有的时候服务会失效,可以额外搭建moon来加速,感觉还是多一步不方便,之前淘了一个云服务器,有了公网ip就选择开frp服务了,更方便一点。

Frp

之前淘了台云服务,有了公网服务器,那这不是可以肆意妄为?,肆意折腾。 Frp可以自定义TLS加密,支持frpc和frps之间的流量通过TLS协议加密,并且支持客户端或服务端单向验证,双向验证等功能。 当 frps.toml 中 transport.tls.force = true 时,表示 server 端只接受 TLS 连接的客户端,这也是 frps 验证 frpc 身份的前提条件。如果 frps.toml 中 transport.tls.trustedCaFile 内容是有效的话,那么默认就会开启 transport.tls.force = true

从 v0.50.0 开始,transport.tls.enable 的默认值将会为 true,默认开启 TLS 协议加密。 如果 frps 端没有配置证书,则会使用随机生成的证书来加密流量。 默认情况下,frpc 开启 TLS 加密功能,但是不校验 frps 的证书。

服务端-配置

下载服务端软件

下载地址: Releases · fatedier/frp WebChristina用的系统镜像是Ubuntu22.04,对应frp_0.61.1_linux_amd64版本

上传&解压

1
2
3
4
5
6
#打开/usr/local路径文件夹 
cd /usr/local
#创建frp文件夹,并且进入 
mkdir frp && cd frp
#解压frp_0.61.1_linux_amd64.tar.gz文件,并打开此文件夹
tar -zxvf 'frp_0.61.1_linux_amd64.tar.gz' && cd 'frp_0.61.1_linux_amd64'

服务器配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#编辑frps配置文件 
vi frps.toml
# 客户端与服务连接端口 
bindPort = 7000 
# 客户端连接服务端时认证的密码
auth.method = "token" 
auth.token = "xxxxx" 
# http协议监听端口 
vhostHTTPPort = 28080 
# web界面配置 
webServer.addr = "0.0.0.0" 
webServer.port = 7500 
webServer.user = "xxxxx" 
webServer.password = "xxxxx"

确认无误后,保存并退出。

运行frps服务

1
2
#编辑/etc/systemd/system/frps.service文件 
sudo vi /etc/systemd/system/frps.service
1
2
3
4
5
6
7
8
9
[Unit] 
Description=frp server 
After=network.target syslog.target 
Wants=network.target 
[Service] 
Type=simple 
ExecStart=/usr/local/frp/frp_0.61.1_linux_amd64/frps -c /usr/local/frp/frp_0.61.1_linux_amd64/frps.toml 
[Install] 
WantedBy=multi-user.target

确认无误后保存并退出,并在系统启动frps服务:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#检查frp配置文件是否正确 
sudo systemctl status frps.service
# 启动frp 
sudo systemctl start frps 
# 停止frp 
sudo systemctl stop frps 
# 重启frp 
sudo systemctl restart frps
#设置开机自启
sudo systemctl enable frps

记得在服务器内打开各项服务的端口

客户端-配置

下载客户端软件

下载地址: Releases · fatedier/frp Christina用的系统镜像是Win1123H2,对应frp_0.61.1_windows_amd64版本

客户端环境配置

正常解压到工作目录,客户端只需要配置frpc.toml就可以

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
serverAddr = "`服务器的公网IP`" 
serverPort = 7000

auth.method = "token"
auth.token = "xxxxxx"

# frp 日志配置,按需配置
log.to = "./frpc.log"
log.level = "info"
log.maxDays = 5

#TCP的配置 
[[proxies]] 
name = "9600X_Christina_RDP" 
type = "tcp" 
localIP = "127.0.0.1" 
localPort = 3389 
remotePort = 23389

简单的配置结束了,可以在终端里打开对应的目录,运行服务并检查是否正常开启了:

1
.\frpc.exe -c frpc.toml

检查对应的日志文件

1
2
3
4
5
2025-02-24 10:56:49.852 [I] [sub/root.go:142] start frpc service for config file [frpc.toml]
2025-02-24 10:56:49.862 [I] [client/service.go:295] try to connect to server...
2025-02-24 10:56:50.015 [I] [client/service.go:287] [xxxxx] login to server success, get run id [xxxxx]
2025-02-24 10:56:50.015 [I] [proxy/proxy_manager.go:173] [xxxxx] proxy added: [9600X_Christina_RDP]
2025-02-24 10:56:50.066 [I] [client/control.go:168] [xxxxx] [9600X_Christina_RDP] start proxy success

让服务后台运行,设置开机自启动

1.将下列代码存为一个.vbs文件,例如 frpcStart.vbs

1
2
set ws=WScript.CreateObject("WScript.Shell")
ws.run "cmd /c E:\900_Tools\913_Frp\frp_0.61.1_windows_amd64\frpc.exe -c E:\900_Tools\913_Frp\frp_0.61.1_windows_amd64\frpc.toml",0

2.把这个vbs文件放到计算机的启动下面 win11的启动路径是这个 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 对vbs不熟,就按绝对路径处理了

题外存疑

  1. Windows的远程桌面rdp服务走的是tcp&udp吧,但是frpc&frps配置都写tcp协议
  2. 虽然官方文档写的是默认开启tls加密,我尝试加了证书(这个会后续更新),但是要开启stcp服务后,rdp就无法使用了,猜测是stcp和tcp不一样ㄟ( ▔, ▔ )ㄏ
“普通”とか”あたりまえ”ってなんだろう?
使用 Hugo 构建
主题 StackJimmy 设计
本博客已稳定运行