通过IPV6实现远程开机
经典废话环节
总之就是最近有了远程访问家里电脑的需求,但是也不是很频繁,让家里电脑一直开着有点不环保,所以来整个远程开机吧!
实现思路
最初的想法
目前家中的网络架构比较简陋。当前使用的是千兆宽带,受限于弱电箱空间和弱电箱供电以及预埋线路质量等一系列原因,目前只放了一个电信光猫(Huawei HN8145V 10G-GPON)在弱电箱里,没有用上我心爱的OpenWRT,不然就一个插件轻松搞定了。
本来我是想直接把光猫或者待开机的电脑的IPV6地址通过DDNS暴露出去,然后直接远程发包的,然而这光猫的DDNS功能甚至不支持ipv6,第一步就尬住了,直接放弃。
后来发现了前人走过的路,MyEasyWOL,可惜Android服务端安装包有点不兼容装不上,客户端是好的。
终极解决方案
在内网再放一台保持开启且高自由度的设备,作为远程开机的桥梁。
经过多次踩坑之后,最终的方案是:
在我吃灰的小米6上通过Linux Deploy运行Ubuntu,在Ubuntu上运行WolGoWeb
和ddns-go,使用MyEasyWOL发起唤醒。
操作步骤
事前准备
首先你需要一台拥有Root权限的Android机器,并保持常供电。如果担心常供电下电池怀孕,可以参考我之前的文章。
确认你拥有2开头的公网IPv6地址且网络可用,并且有权限在防火墙上放行端口或关闭IPv6防火墙,例如我使用超级管理员账户关掉了光猫的IPv6防火墙(这玩意儿似乎不能指定放行单个端口)。
安装并设置Linux Deploy
下载Linux Deploy并安装打开。
在右下角的设置里:
选择你想要安装的Linux发行版,这里我出于使用习惯考虑安装了Ubuntu。
为了提高国内访问速度,源地址相应改成
https://mirrors.ustc.edu.cn/ubuntu-ports/
架构一般选择 arm64/aarch64,除非你的手机是32位古董或者其他神奇架构。设置一下用户密码
启用初始化系统和SSH选项,方便相应服务开机自启和远程终端控制。
其他不需要动,我也没弄懂
返回上一层,在左上角的菜单中打开设置,启用CPU唤醒和开机自启动,确保服务的可用。
返回上一层,在右上角的三个点菜单里选择安装,并等待安装完成。
安装完成后,点击下方按钮启动容器。
SSH连接到Ubuntu
使用其他设备或其他终端程序,通过SSH连接到Ubuntu。例如Xshell。
将默认终端改为/bin/bash
,不然按个退格都费劲。默认的/bin/sh
需要按着Ctrl才能退格。
1
2chsh
/bin/bash
安装nano作为默认编辑器,也是因为vi难退格
sudo apt install nano
安装wget
sudo apt install wget
安装ddns-go
1 |
|
赋予运行权限chmod +x ddns-go
运行一下试试./ddns-go
打开 http://手机IP地址:9876/ ,即可进入配置界面,懂得都懂,懒得写了,自己看ddns-go的文档吧,记得勾选ipv6就行。
安装WolGoWeb
1 |
|
可能有更新的版本,不妨先去Release页看看
改个文件名,不然好长一串mv WolGoWeb_0.0.4_linux_arm64 wolgoweb
赋予运行权限chmod +x wolgoweb
运行一下试试./wolgoweb
可以自己先在内网试试好不好使,默认端口9090。
打开 http://手机DDNS域名或IP地址:9090/
就能看到提示页
用法是这样,浏览器访问
http://你的域名或IP地址:9090/wol?mac=00-00-00-00-00-00 (改成你的电脑网卡MAC地址)
像这样就是成功发出唤醒魔术包了。
现在就试试看你的电脑有没有开机吧。 记得把网络唤醒/PCIE唤醒等设置打开,不会的自己搜搜吧。
设置自启动
因为LinuxDeploy下不能使用systemctl,只能使用其他的初始化方法。记得在Linux属性里启用初始化系统(第3步)。sudo nano /etc/rc.local
添加内容
1 |
|
如果你的目录不一样,那自己改吧。Ctrl+s
保存,Ctrl+x
退出
加权限chmod +x /etc/rc.local
在手机上重启一下Ubuntu,试试有没有自启动。
安装手机客户端
这里用的是MyEasyWOL的客户端,其他的wol应用不知道行不行,懒得试了。
添加服务器信息:
添加待唤醒设备信息:
然后像这样就发包成功啦:
试试看电脑有没有开机成功吧。
结束语
由于这个只需要访问一个URL就能唤醒电脑,所以弄个Siri指令或是小爱同学联动啥的也是很简单的,发挥想象吧!
不觉得这很酷吗?作为一名理工男我觉得这太酷了,很符合我对网络唤醒的想象,科技并带着趣味。