一 场景说明
该方案适合有多条宽带且不在同一个位置,其中一条宽带有公网的场景。有公网端的不作介绍,很多方法可以实现远控,但内网机器 无法直接进行远程控制,借助另一条带有公网的机器 ,实现中转。当然如果有国内vps,直接使用vps进行中转最好,国内的不推荐,延迟太高,远程桌面控制体验不好。
二 准备条件
1..自带公网的家宽一条,内网宽带多条。
2.连接公网端的设备完成安装frps,推荐使用openwrt,自带frps服务,注意不是frp穿透,是服务端。
3.动态域名一个,县城已设置可以成功解析公网的动态域名,用作服务端的地址,
4.chatgtp账号一个,用于生成代码。
三 实现思路解析
在有公网的设备上安装frps服务端,内网机器安装frpc客户端进行穿透,由于是家宽,服务端为动态一般每隔二至三天便会变化 ,客户端就会失去联网。为保持连接,使用脚本检查动态域名的变化,如果动态域名I地址变化了,就重启frpc服务,它会重新连接,保持客户端的连接。
四 脚本实现功能
有了想法,不会写代码,简单,交给强大的CHATGPT,先直接贴出它生成的代码,后面描述调试过程。
# 设置你的 frps 域名和 frpc 配置路径
$frpsDomain = "your.dynamic.domain"
$frpcConfigPath = "C:\path\to\your\frpc.ini"
$frpcPath = "C:\path\to\your\frpc.exe"
# 获取当前域名的 IPv4 地址
function Get-CurrentIPv4 {
try {
return (Resolve-DnsName $frpsDomain -Type A | Where-Object { $_.QueryType -eq 'A' }).IPAddress
} catch {
Write-Output "Error resolving domain: $_"
return $null
}
}
# 初始获取域名的 IPv4 地址
$previousIP = Get-CurrentIPv4
if ($previousIP) {
# 启动 frpc 服务
Write-Output "Starting frpc..."
Start-Process -FilePath $frpcPath -ArgumentList "-c $frpcConfigPath"
} else {
Write-Output "Failed to resolve initial IP. Exiting script."
exit 1
}
while ($true) {
# 获取当前域名的 IPv4 地址
$currentIP = Get-CurrentIPv4
# 如果 IP 发生变化
if ($currentIP -and $currentIP -ne $previousIP) {
Write-Output "Domain IP changed from $previousIP to $currentIP. Restarting frpc..."
# 停止 frpc 服务
Stop-Process -Name frpc -Force
# 重启 frpc 服务
Start-Process -FilePath $frpcPath -ArgumentList "-c $frpcConfigPath"
# 更新之前的 IP
$previousIP = $currentIP
}
# 等待一段时间(例如,检查每 60 秒)
Start-Sleep -Seconds 60
}
以上代码直接使用即可。
详细步骤:
- 设置路径和域名:
your.dynamic.domain
替换为你的动态域名。C:\path\to\your\frpc.ini
替换为frpc.ini
的实际路径。C:\path\to\your\frpc.exe
替换为frpc.exe
的实际路径。
- 保存脚本: 将上述内容保存为
monitor-frpc.ps1
。 - 以管理员身份运行 PowerShell: 打开 PowerShell 并以管理员身份运行,以便具有足够的权限来启动和停止进程。
运行脚本: 执行脚本:
.\monitor-frpc.ps1
五 转成系统服务
为方便开机即使用,避免cmd窗口的出现,将此转换成系统服务,步骤如下:
详细步骤:
- 设置路径和域名:
your.dynamic.domain
替换为你的动态域名。C:\path\to\your\frpc.ini
替换为frpc.ini
的实际路径。C:\path\to\your\frpc.exe
替换为frpc.exe
的实际路径。
- 保存脚本: 将上述内容保存为
monitor-frpc.ps1
。 - 创建批处理文件: 创建一个新的
.bat
文件,例如start-frpc-monitor.bat
,并将以下内容复制到其中:@echo off PowerShell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\path\to\monitor-frpc.ps1"
将
C:\path\to\monitor-frpc.ps1
替换为你的 PowerShell 脚本的实际路径。 - 使用 NSSM 创建服务: 打开命令提示符(以管理员身份运行),并运行以下命令来创建和配置服务:
nssm install FRPCMonitorService "C:\path\to\start-frpc-monitor.bat"
将 C:\path\to\start-frpc-monitor.bat
替换为你的批处理文件的实际路径。
接下来,可以通过以下命令打开 NSSM 的服务配置界面:
nssm edit FRPCMonitorService
在这里你可以设置服务的详细信息,例如启动类型(自动、手动等)。
- 启动服务: 配置完服务后,可以通过以下命令启动服务:
nssm start FRPCMonitorService
- 验证服务运行状态: 你可以通过 Windows 服务管理器(services.msc)或者在命令提示符中使用以下命令检查服务状态:
nssm status FRPCMonitorService
这样,PowerShell 脚本将作为一个 Windows 服务运行,并会在系统启动时自动启动,持续监控 frps
动态域名的 IPv4 地址变化并在需要时重启 frpc
服务。
六 调试过程