通过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并安装打开。
在右下角的设置里:

  1. 选择你想要安装的Linux发行版,这里我出于使用习惯考虑安装了Ubuntu。

  2. 为了提高国内访问速度,源地址相应改成
    https://mirrors.ustc.edu.cn/ubuntu-ports/
    架构一般选择 arm64/aarch64,除非你的手机是32位古董或者其他神奇架构。

  3. 设置一下用户密码

    Linux属性设置

  4. 启用初始化系统和SSH选项,方便相应服务开机自启和远程终端控制。

    Linux属性设置2

  5. 其他不需要动,我也没弄懂

  6. 返回上一层,在左上角的菜单中打开设置,启用CPU唤醒和开机自启动,确保服务的可用。

  7. 返回上一层,在右上角的三个点菜单里选择安装,并等待安装完成。

  8. 安装完成后,点击下方按钮启动容器。

SSH连接到Ubuntu

使用其他设备或其他终端程序,通过SSH连接到Ubuntu。例如Xshell。
将默认终端改为/bin/bash,不然按个退格都费劲。默认的/bin/sh需要按着Ctrl才能退格。

1
2
chsh
/bin/bash

安装nano作为默认编辑器,也是因为vi难退格
sudo apt install nano
安装wget
sudo apt install wget

安装ddns-go

1
2
wget https://github.com/jeessy2/ddns-go/releases/download/v4.0.4/ddns-go_4.0.4_Linux_arm64.tar.gz
tar -xzvf ddns-go_4.0.4_Linux_arm64.tar.gz

赋予运行权限
chmod +x ddns-go
运行一下试试
./ddns-go
打开 http://手机IP地址:9876/ ,即可进入配置界面,懂得都懂,懒得写了,自己看ddns-go的文档吧,记得勾选ipv6就行。

ddns-go

安装WolGoWeb

1
wget https://github.com/xiaoxinpro/WolGoWeb/releases/download/V0.0.4/WolGoWeb_0.0.4_linux_arm64

可能有更新的版本,不妨先去Release页看看
改个文件名,不然好长一串
mv WolGoWeb_0.0.4_linux_arm64 wolgoweb
赋予运行权限
chmod +x wolgoweb
运行一下试试
./wolgoweb
可以自己先在内网试试好不好使,默认端口9090。
打开 http://手机DDNS域名或IP地址:9090/ 就能看到提示页

WolGoWeb

用法是这样,浏览器访问

http://你的域名或IP地址:9090/wol?mac=00-00-00-00-00-00 (改成你的电脑网卡MAC地址)

像这样就是成功发出唤醒魔术包了。

成功发包

现在就试试看你的电脑有没有开机吧。 记得把网络唤醒/PCIE唤醒等设置打开,不会的自己搜搜吧。

设置自启动

因为LinuxDeploy下不能使用systemctl,只能使用其他的初始化方法。记得在Linux属性里启用初始化系统(第3步)。
sudo nano /etc/rc.local
添加内容

1
2
3
4
#!/bin/sh
#
nohup /home/android/ddns-go &
nohup /home/android/wolgoweb &

如果你的目录不一样,那自己改吧。
Ctrl+s保存,Ctrl+x退出
加权限
chmod +x /etc/rc.local
在手机上重启一下Ubuntu,试试有没有自启动。

安装手机客户端

这里用的是MyEasyWOL的客户端,其他的wol应用不知道行不行,懒得试了。
添加服务器信息:

添加服务端信息

添加待唤醒设备信息:

待唤醒设备信息

然后像这样就发包成功啦:

发包成功

试试看电脑有没有开机成功吧。

结束语

由于这个只需要访问一个URL就能唤醒电脑,所以弄个Siri指令或是小爱同学联动啥的也是很简单的,发挥想象吧!

不觉得这很酷吗?作为一名理工男我觉得这太酷了,很符合我对网络唤醒的想象,科技并带着趣味。


通过IPV6实现远程开机
https://zhouym.tech/2022/Wake-On-Lan/
作者
zhouym
发布于
2022年8月13日
许可协议