非公网IP用户如何直接穿透家庭路由器

描述

今天将向大家介绍当前唤醒最优方案:非公网IP用户如何直接穿透家庭路由器,一键唤醒内网计算机,实现远程开机。

需要提前准备的材料:

路由器一台(本文以华硕AU886路由器为例);

固件包(本文以华硕梅林固件为例);

一台公网服务器(作为FRPS,实现内网穿透);

U盘移动硬盘(用于文件的传输和挂载,存储)

支持WOL远程唤醒的计算机(只要不是古老的计算机,默认上述要求都已经满足。

一、配置计算机(默认已开启,一般可以跳过这一步)

1.主板 BIOS

BIOS 里关于 WOL 网络唤醒的选项一般有 wake on lan;resume on lan;power on PME;power on by PCI-E device; Power on by Onboard LAN 等等,将其设为 Enabled 即可。

2.网卡驱动

”控制面板-网络和 Internet-网络和共享中心-本地连接-属性-配置“:

“高级”选项卡如下图设置:
计算机
“电源管理”选项卡如下图设置:
计算机

windows[8-10]需要禁用windows的快速启动功能, 因为快速启动会使得网卡在关机时候处于彻底关闭的状态, 控制面板>>电源选项>>修改关机按键的功能>>修改不可用选项, 启动模式从快速启动改为普通模式。

二、路由器刷梅林固件

以华硕AC88U为例:

还原路由器至出厂值,进入 “系统管理–系统设置”,按图示开启ssh以及JFFS,重启路由器以初始化JFFS。

计算机

注意:重启后检查Format JFFS partition at next boot是否已经自动还原为”否“,如果没有,手动调成“否”,否则下次开机会再次还原配置。

三、路由器配置

计算机与路由器之间插上网线,以固定MAC码。

”内部网络–DHCP服务器–手动指定 IP 的 DHCP 列表“,建立IP-MAC地址的映射。
计算机

ARP绑定静态ip地址
由于在华硕路由器内,没有这个设置,因此我们选择通过用ssh命令的形式做ARP绑定。

 

arp -s 192.168.1.103 F0:76:1CEA: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

 

”tools–scripts添加脚本“,脚本类型:WANSTART;脚本地址:/jffs/scripts/arp-s.sh

计算机
现在从理论上看,在内网环境下已经能够通过路由器控制界面唤醒本地计算机

进入”网络工具–通过网络(LAN)唤醒“,按下图设置后,检验内网环境下是否能够通过输入目标MAC码并点击”唤醒“按钮唤醒计算机。
计算机
之后关闭计算机,用处于局域网内的其他设备登陆路由器后台,点击唤醒,可以看到计算机被唤醒。

四、配置路由器SSH唤醒命令

1.安装entware环境

由于梅林是基于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环境,entware将无法正常安装

计算机

情况二:先安装entware环境,后安装了“软件中心-虚拟内存”,路由器重启后entware环境丢失

而在成功安装entware环境后我们可以看到opkg被配置完成。

计算机

2.安装wakeonlan和etherwake工具

 

opkg install wakeonlan
opkg install etherwake

 

查看etherwake命令格式:

计算机

内网环境下尝试使用 etherwake -b [MAC码] 唤醒计算机
如: etherwake -b F0:76:1CEA:D8
也可 ether-wake -b F0:76:1CEA:D8

 

计算机
在按照上述步骤全部操作完毕后,如果发现仍然无法正常唤醒路由器,多半是由于魔术包没有发在正确的内网里。可以尝试前往:“外部网络-双线路”,开启双线路,选择负载均衡,即可解决问题。其原理目前猜测是路由器的特殊地位(既是网关也是设备)造成的,欢迎评论讨论,
计算机
计算机
至此,在内网环境下,我们实现了通过一条路由器SSH命令唤醒局域网内指定主机。

五、使用Frp内网穿透路由器22端口,实现外网环境ssh登陆

方法1:传统frpc包配置,在此不在赘述。

缺点:需要解决开机数据丢失的问题

方法2:在固件”软件中心“直接下载使用Frpc

缺点:由于路由器固件下载的Frpc版本固定,因此VPS上的Frps版本需要向Frpc版本看齐(一般就是要求最新版本的Frp),如果之前VPS上已经做过其他穿透,极大可能老的Frps和路由器上的最新Frpc版本不一致,如果没有多余闲置穿透服务器,需要重装Frps版本,在本次穿透完成后可能会花费大量时间更改其他穿透客户端的版本,需要注意。

1.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 报错。

2.路由器Frpc配置

前往“软件中心”下载“Frpc”,进入配置:

计算机
计算机
计算机
计算机
计算机
计算机
尝试使用服务器IP的6100端口远程登陆路由器shell命令行,成功,至此路由器22端口已成功穿透,实现外网环境ssh登陆。
计算机

六、进阶——外网环境下手机 语音/一键 唤醒内网计算机(以IOS为例)

1. 下载 捷径 app(iphone用户需要ios12版本)

计算机

2. 将开机SSH命令写入APP(用户密码指路由器ssh登陆密码)

计算机

3. 加入Siri

计算机

一键点击或语音唤醒:

计算机
计算机

七、简便替代方案

对于不想追求上述全部功能,或者远程唤醒使用频率较低(可以容忍多步操作)的读者,也可以选择在完成前文一(配置计算机)二(路由器刷梅林固件)两步骤并建立IP-MAC地址的映射后,直接尝试内网穿透路由器后台页面。

(1)在frpc中添加http穿透。

计算机
注意事项:
1、服务名称:名称不能重复。
2、域名配置(也可以直接填写主机ip地址):使用http或https穿透服务时,所有的“远程主机端口”都会默认绑定到“vhost http port”,懂web服务的应该知道,如果多个http都用80端口,需要绑定域名或者分配端口来进行区分服务,如果不指定域名那么将访问默认的80服务,同样,填写的域名也不能和服务器上其他的冲突。

(2)外网访问后台手动唤醒

如在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;
       }
}

 

 

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分