之前文章向大家介绍了 外网环境下基于FRP、VNC技术远程访问计算机,实现内网穿透 以及利用 WOL远程唤醒功能 基于FRP、VNC技术实现远程开机。此后,基于Linux主机udp广播特性,更进一步,针对局域网内有Linux主机(如树莓派)的用户,介绍了更为简便的方式实现远程开机!
然而,上述方式或多或少都需要直接或间接借助其他设备才能完成内网计算机的唤醒,今天将向大家介绍当前唤醒最优方案:非公网IP用户如何直接穿透家庭路由器,一键唤醒内网计算机,实现远程开机。
BIOS 里关于 WOL 网络唤醒的选项一般有 wake on lan;resume on lan;power on PME;power on by PCI-E device; Power on by Onboard LAN 等等,将其设为 Enabled 即可。
”控制面板-网络和 Internet-网络和共享中心-本地连接-属性-配置“:
windows[8-10]需要禁用windows的快速启动功能, 因为快速启动会使得网卡在关机时候处于彻底关闭的状态, 控制面板>>电源选项>>修改关机按键的功能>>修改不可用选项, 启动模式从快速启动改为普通模式。
以华硕AC88U为例:
还原路由器至出厂值,进入 “系统管理–系统设置”,按图示开启ssh以及JFFS,重启路由器以初始化JFFS。
注意:重启后检查Format JFFS partition at next boot是否已经自动还原为”否“,如果没有,手动调成“否”,否则下次开机会再次还原配置。
arp -s 192.168.1.103 F0:76:1C:E1:EA:D8
上述设置在路由器重启(包括断电后),ARP绑定将会丢失,如需永久有效并且开机自启,需要分别利用文件不会丢失的jffs目录以及scripts开机自启脚本,具体操作如下:
cd /jffs/scripts/
vi arp-s.sh #建立启动脚本arp-s.sh;
写入:
#!/bin/sh
sleep 30
arp -s IP地址 MAC 地址
chmod 7777 arp-s.sh
现在从理论上看,在内网环境下已经能够通过路由器控制界面唤醒本地计算机
进入”网络工具–通过网络(LAN)唤醒“,按下图设置后,检验内网环境下是否能够通过输入目标MAC码并点击”唤醒“按钮唤醒计算机。
之后关闭计算机,用处于局域网内的其他设备登陆路由器后台,点击唤醒,可以看到计算机被唤醒。
由于梅林是基于Entware来安装插件的,因此需要安装entware环境。
插入U盘/移动硬盘(推荐EXT4文件系统,可以用“分区助手”格式化方式更改挂载盘文件系统类型)
梅林固件可以在插入磁盘的时候自动识别文件系统并挂载,不过考虑到有些固件可能还没有很完善,所以给出手动挂载的方法,供参考。
# 挂载
mkdir /mnt/sda1
mount -t ext4 /dev/sda1 /mnt/sda1/
# 检查
df -h
Filesystem Size Used Available Use% Mounted on
/dev/sda1 916.9G 2.0G 868.4G 0% /tmp/mnt/sda1
#安装entware环境
entware-setup.sh
因为这会导致jffs里的post-mount.sh在安装时不能正确产生,并且“虚拟内存”应用貌似卸载脚本有问题,正常卸载后相关的脚本仍然在jffs,这会致使entware环境重启后opt路径无效。同时本来安装 entware-ng就会创建虚拟内存。
而在成功安装entware环境后我们可以看到opkg被配置完成。
opkg install wakeonlan
opkg install etherwake
查看etherwake命令格式:
内网环境下尝试使用 etherwake -b [MAC码] 唤醒计算机
如: etherwake -b F0:76:1C:E1:EA:D8
也可 ether-wake -b F0:76:1C:E1:EA:D8
在按照上述步骤全部操作完毕后,如果发现仍然无法正常唤醒路由器,多半是由于魔术包没有发在正确的内网里。可以尝试前往:“外部网络-双线路”,开启双线路,选择负载均衡,即可解决问题。其原理目前猜测是路由器的特殊地位(既是网关也是设备)造成的,欢迎评论讨论,
至此,在内网环境下,我们实现了通过一条路由器SSH命令唤醒局域网内指定主机。
缺点:需要解决开机数据丢失的问题
缺点:由于路由器固件下载的Frpc版本固定,因此VPS上的Frps版本需要向Frpc版本看齐(一般就是要求最新版本的Frp),如果之前VPS上已经做过其他穿透,极大可能老的Frps和路由器上的最新Frpc版本不一致,如果没有多余闲置穿透服务器,需要重装Frps版本,在本次穿透完成后可能会花费大量时间更改其他穿透客户端的版本,需要注意。
tar -zxvf 文件名 #解压缩
cd 文件名 #进入解压目录
#修改frps.ini文件
sudo vim ./frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
token = 设置你的token
vhost_http_port = 8080
vhost_https_port = 443
dashboard_port = 7500
tcp_mux = true
max_pool_count = 50
log_level = info
log_max_days = 1
kcp_bind_port = 7000
开放服务器相应端口!
开放服务器相应端口!
开放服务器相应端口!
#在文件目录下,临时启动命令,查看是否报错
./frps -c ./frps.ini
0.20版本privilege_token应写作token,否则会出现 uthorization failed 报错。
前往“软件中心”下载“Frpc”,进入配置:
尝试使用服务器IP的6100端口远程登陆路由器shell命令行,成功,至此路由器22端口已成功穿透,实现外网环境ssh登陆。
对于不想追求上述全部功能,或者远程唤醒使用频率较低(可以容忍多步操作)的读者,也可以选择在完成前文一(配置计算机)二(路由器刷梅林固件)两步骤并建立IP-MAC地址的映射后,直接尝试内网穿透路由器后台页面。
注意事项:
1、服务名称:名称不能重复。
2、域名配置(也可以直接填写主机ip地址):使用http或https穿透服务时,所有的“远程主机端口”都会默认绑定到“vhost http port”,懂web服务的应该知道,如果多个http都用80端口,需要绑定域名或者分配端口来进行区分服务,如果不指定域名那么将访问默认的80服务,同样,填写的域名也不能和服务器上其他的冲突。
如在frpc端域名名配置/sk选项选择了填写域名,需要进行域名解析。
域名配置/sk选择填写域名:通过 域名:8080 形式访问
域名配置/sk选择填写主机IP地址:通过 IP:8080 形式访问
这里在外网环境下我通过访问 “http://r.顶级域名.com:8080” 的方式登陆路由器后台
进入后台在侧栏进入“网络工具”——>“通过网络(LAN)唤醒”——>“选择需要唤醒的机器mac码”——>“唤醒”。
如果服务器上开启了nginx的web服务,那么在安装的时候“vhost http port”或“vhost https port”将不能使用80或443端口,如果习惯访问地址后面不添加端口,可以使用nginx反向代理的代码,修改下面的代码后就可以使用“http://你设置的域名”来访问frp了,其他的代码自行百度如何设置反向代理解决,下面给出NGINX的配置:
map $http_x_forwarded_for $clientRealip {
"" $remote_addr;
~^(?P[0-9\.]+),?.*$ $firstAddr;
}
server {
listen 80;
server_name manage.frp.com; #为frp的控制台绑定一个域名,这样你就可以用http://manage.frp.com访问你的控制台了
location / {
proxy_pass http://127.0.0.1:6443; #此处的6443就是你安装frp时设置的dashboard_port端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $clientRealip; # $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name *.frp.com; #将所有的frp.com子域名都绑定,这样就不用客户端填写一个你设置一个了,这样你可以用http://lisi-route.frp.com或http://zhangsan-route.frp.com访问你的穿透服务了。
location / {
proxy_pass http://127.0.0.1:7080; #此处的7080就是你安装frp时设置的vhost_http_port端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $clientRealip; # $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}