公司发的电脑因为会有各种限制,所以不能通过任何软件层面/RDP来远程,然而内部资源只能通过这台电脑访问,本来想着买一个 PiKVM ,但穷,且 PiKVM 目前不支持声音的转发,于是花了一周时间发现 Intel AMI 可以被利用并成功组合起来,实现用自己的电脑远程办公。
由于不方便截图,以下内容尽量以文字形式来描述
事前警告:此行为本身很可能会违反雇主对雇员的行为限制,基本上有一定能力的 IT 部门只要想就能发现在利用 AMI ,且一旦 wg/AMI 出现安全漏洞则可能会直接威胁到企业内安全,还请自行斟酌是否构筑,并自行承担带来的风险
先说准备部分,需要的东西有以下:
(1). 被远程的电脑支持 Intel AMI (带有vPro功能,且组织本身没有在利用)
(2). 准备额外一台电脑处理音频,并且安装 TeamViewer、Anydesk 等远程软件,不可用RDP
(3). 准备一个 VPN/Tun 来远程进来
(4). Teamspeak 3 Server(自己搭建即可,可以和 VPN 放到一个机器上)
(5). 一些3.5mm音频线
(6). VoiceMeeter Banana
(7). Dummy HDMI(情况不同有些电脑可能不需要)
- 配置带外管理,来实现画面的转发和键鼠的操作
进入 UEFI ,将 AMI 开启,第一次设置的时候默认密码是 admin ,然后需要自行设置一个安全的密码进去,设置完成后以防万一,将允许挂载磁盘和串口功能关掉,并将访问远程时的认证改为不需要密码。
(这个功能在后面远程的时候也可以被开启,这里关掉单纯只是为了防止手贱不小心挂上东西然后被监控软件监测到)
设置的时候发现没有配置 IP 的选项,学习了一番后了解到:必须要有 Intel 的有线网卡才可以,由于我的电脑属于轻薄本,只有无线网卡,所以接下来网络配置需要进入系统内配置。
进入系统后,去安装 Intel Management Engine Components ,可以从各厂家的网站上找到,这个软件之后用来查看带外管理的 IP 地址用。
然后去 Intel 官网上去下载 Intel Setup and Configuration Software,解压缩后安装 ACUWizard ,这个软件是用来配置带外管理用。
接下来通过 ACUWizard 来配置网络,这一块由于不方便截图,可以参考这个教程
https://zhuanlan.zhihu.com/p/105326863
有几个注意点:
(1). WiFi 的 Data Encryption 里,不应按照此教程的设置,而是分别设置为 RSN 和 CCMP,否则系统关闭后会连不上
(2). 证明书不用开启,因为 Intel AMI 不支持自签证书,必须要去购买,这意味着自建环境只能走 http (这点很重要,请各位骚操作的时候要切记流量是明文的)
配置完成后,就可以去刚才安装过的 Intel Management Engine Components 里查看带外管理的 IP 地址了,这种方式配置好的 IP 会和你系统内的 IP 是一样的,且查看端口会发现 8006 端口有暴露出去,但实际上流量不会进入系统内而是直接进入 Intel AMI 里。
之后为了防止 IP 出现变动,在路由器内设置了 IP MAC 绑定,然后可以从别的电脑里用浏览器尝试访问一下来检查是否已经可用,地址是 http://<IP>:8006 ,账号密码分别是 admin 和你最开始设置的密码,能登录进去则说明配通了。
但这个页面并不自带KVM功能,所以需要搭配使用软件来访问。
Windows 的话 可以使用 Intel 自家的 Intel Manageability Commander
mac/Linux的话则可以尝试使用开源的 meshcommander
连接上后,被远程的机器的屏幕上会有一圈红黄相间的警示框,这个框无法隐藏,但截图或者共享桌面的时候不会被发现,这个框是从显卡上直接输出的。 - 解决完了远程,开始解决音频的双向传输
这一块相比 AMI 其实要更复杂一些,但逻辑上来讲就是通过虚拟声卡和 TeamSpeak 来实现声音的转发。
总之先搭建一个 TeamSpeak 3 服务器,这一块比较简单就不描述了,搭建好了能访问即可。
然后需要准备一些音频用的线,具体情况需要具体分析,但一般可以简单分为 耳机+麦克风 2合1插孔 和 耳机/麦克风 2个插孔 两种形式。
由于我的两个笔记本电脑都是2合1的插孔,这种情况下需要准备如下材料:
一根 4芯(3个塑料圈)的公对公 的连接线
一根 4芯公头转耳机/麦克风2个母口 的转接线
一根 4芯母头转耳机/麦克风2个公头 的转接线
然后在音频转发的电脑里安装如下软件:
TeamSpeak 3 Client 用作音频的收发
Voicemeet Banana 虚拟声卡&音频的路由调整 (另外就是我给他们家捐款过,他家的这些软件需求符合的情况下还挺好使的)
接下来是接线环节,这里先说怎么接,然后再说坑
(1). 把4芯跳线插到被远程的电脑的音频口,确认音频设置里能同时识别到耳机和麦克风均已插入
(2). 把 4芯公头转耳机/麦克风母头 的线插入到音频转发的电脑上,一样需要确认下耳机和麦克风均以识别到
(3). 都识别到后,将4芯跳线插入 4芯母头转耳机/麦克风2个公头 上,然后分出来的2个头反转着插入音频转发上接着的母头上(耳机插麦克风,麦克风插耳机)
这样接线的部分就完成了,然后关于坑,提前说一下比较好:
(1). 如果带着线重启,或者关机后再开机的话,进入系统后会发现找不到麦克风,且可能存在不管有没有开机,都会听到送出去的声音被送了回来的情况,推测是 Realtek 音频芯片的问题,不更换双口声卡的话没有解决办法,只能是开机后重新插线,或者是不关机来解决此问题(出远门的话建议买双口的 USB 声卡替换掉单口插槽)
(2). 开头写道要准备 TeamViewer/Anydesk 等远程软件而不要用 RDP 的原因是, RDP 连接上后会变成只有一个远程声卡的状态,物理声卡会在音频设置里消失不见,Voicemeeter 也抓不到
(3). 用 TeamViewer/Anydesk 的话,有些电脑合上盖子后显卡输出会停止,这种情况下需要准备一个 Dummy HDMI 让显卡保持工作,没有这个问题的话就不需要
接下来是音频上的软件设置:
(1). 收进来的音频进入 VoiceMeeter Banana ,打开mono(混合成单声道),并转发到 B1 (虚拟声卡的麦克风)
(2). TeamSpeak 3 的麦克风硬件设置为虚拟声卡的麦克风
(3). TeamSpeak 3 的音频输出设置为虚拟声卡的输出
(4). VoiceMeeter Banana 里面,将虚拟声卡的输出转发到 A1,这样就会送到被远程电脑的物理声卡-麦克风里
(5). 把被远程电脑的音频输出音量调整低(我的电脑是设置成了30%左右),不调整的话底噪太大没法听
这样设置好了后就可以直接使用了,自己的电脑上装一个 TeamSpeak 3 然后进入同一个房间后即可通讯,之前用监听麦克风功能然后数秒,测得一来一回的延迟在 1s 左右,推算单方向延迟大约在 0.5s 左右
另外,一个小坑:TeamSpeak 3 的 macOS 版可能是年久失修,一连接房间就崩溃,而 iOS 版本可以安装上但无法识别音频设备(耳机和麦克风均无法工作)
可能是 Apple Silicon 的问题,也可能是 macOS 13 的问题,手头没有其他机器所以不太好判断。
3. VPN/Tun
因为流量全都走了 http ,出门用的话着实不安全,所以AMI侧选择不开启 IPv6 ,且 v4 的端口也不暴露出去,这里我选择了 Wireguard 来打一个隧道。
服务端的配置如下:[Intelface]
Address = 10.0.1.1/24
PrivateKey = <私钥,自己生成>
ListenPort = 50000
PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o <此服务器的物理网卡> -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o <此服务器的物理网卡> -j MASQUERADE
[peer]
PublicKey = <隧道另一头的公钥>
AllowedIPs = <打算分配给另一头的IP,不需要CIDR>
客户端的配置如下:[Interface]
PrivateKey = <私钥>
Address = <这一头的IP,需要CIDR>
[Peer]
PublicKey = <对方的公钥>
AllowedIPs = <这一头的网段>, <对端物理网卡所在的网段>
Endpoint = <对端的IP:端口>
这样服务端和客户端分别起来后,试着ping一下应该就通了
接下来就是一些细节上的配置和收尾,例如:
· 给 TeamSpeak 3 房间设置权限&密码,防止被人随意访问进来
· TeamSpeak 3的提示音关掉(主要是声音的中转侧),否则房间进出的提示音会传到被远程的电脑里
· 通话测试(像是 Microsoft Teams 就自带这个功能)
· 两边的电源都设置成屏幕常亮、合盖不睡眠等,可以尝试一下 PowerToys 的 Awake 功能,但此功能绕不过 GPO 的限制
· 或者,写个 vbs 脚本来模拟键盘按下,不会写的可以让 ChatGPT 帮你写一个,间隔10秒循环,这样不需要的时候也有足够的时间开 Taskmgr 杀掉 wscript 进程来结束循环
参考资料:
https://www.intel.com/content/dam/www/public/us/en/documents/guides/amt-configuration-utility-user-guide.pdf
https://zhuanlan.zhihu.com/p/105326863
https://zhuanlan.zhihu.com/p/105525209
https://zhuanlan.zhihu.com/p/106000423
https://github.com/Ylianst/MeshCommander
https://new.negoces.top/posts/2fcbf547/