环境情况:
主路由:友善NanoPi R2S软路由(OpenWRT)
宽带:中国电信,由光猫桥接,主路由PPOE拨号,已向ISP申请公网IPV4并实测生效(家庭网络,IPV4会不定期变更)
苹果手机安装捷径Shortcut软件
远程ssh软件:FinalShell
DDNS
我用的Now-DNS ,地址为https://now-dns.com/
通过邮箱注册,可选域名较多(都是二级域名),申请超级简单,主要是稳定且完全免费,介绍如下:
Now-DNS 是一个超级简单易用的动态 DNS (DDNS)服务,为您提供无限的自定义主机名,完全免费!与其他 DDNS提供商不同的是,您无需每 30 天检查一次。事实上,它们消失的唯一方法就是您自己删除它们!*立即向我们注册,您将在几分钟内管理您自己的动态DNS。我们甚至有一个客户端,如果您的 IP 发生变化,它会自动更新您的主机名。
但是有个小问题,OpenWRT的DDNS插件中并没有收录该DNS网站,可以不用DDNS,自己DIY一下。
通过网站申请一个二级域名后,目标ip设置为1.1.1.1(只要不是本机ip就行,更新的时候好区分是否生效),保存即可,然后需要用到:
curl -u email:password "https://now-dns.com/update?hostname=hostname"
部分内容需根据自身情况手动配置替换,其中:
email:Now-DNS的登录邮箱;
password:Now-DNS的登陆密码;
hostname:Now-DNS申请的域名。
如:
curl -u admin@126.com:123 "https://now-dns.com/update?hostname=123.myiphost.com"
(注意空格)
将以上代码保存至txt文档,文件改名为ddns.sh文件(注意文件后缀),使用FinalShell软件登录R2S软路由,将该文件保存至OpenWRT的/etc/ddns目录下(可以自定义),然后在OpenWRT的计划任务中添加自定义的任务。
如:
/5 * * * * sh /etc/ddns/ddns.sh
这个代码是一个 cron 表达式,用于定期执行一个 shell 脚本。
具体来说,"/5 " 表示该脚本将每隔5分钟执行一次。
解释每个字段:
第一个字段:分钟 (0-59)
第二个字段:小时 (0-23)
第三个字段:月份中的某一天 (1-31)
第四个字段:月份 (1-12)
第五个字段:星期中的某一天 (0-6,其中 0 表示星期天)
所以 "/5 " 意味着在每小时的每天的每月的每周,每隔5分钟执行一次命令。
而命令部分是 "sh /etc/ddns/ddns.sh",表示执行指定位置的 shell 脚本 "/etc/ddns/ddns.sh"。而ddns.sh脚本是连接Now-DNS网站,更新目标域名的IPV4地址,从而实现DDNS。
注意在OpenWRT-启动项中启动cron脚本,重启路由器,过5-10分钟尝试ping域名或登录Now-DNS,如结果与OpenWRT的公网ip一致,那么DDNS就基本搞定了。
注:如OpenWRT设置了网络代理,可能会导致更新的是代理服务器ip地址,注意设置now-dns.com不走代理。
端口转发
OpenWRT-网络-防火墙-端口转发,设置外部端口(如8080)转发至对应ip的端口(如80),如
http://123.myiphost.com:8080,即可访问本地OpenWRT路由器的登录界面(公网环境,务必不要设置弱密码),输入对应账号密码对路由器进行各项管理。
注:一般家庭PPOE网络的80、443被ISP封堵,外部端口注意不要选择这两个,否则出现连接不上。
主路由禁ping
家庭网络一般只是提供个人使用,为防止被ping攻击,可以关闭ICMP协议避免被ping探测,这并不影响服务器的其他功能的使用。
方法:
在R2S主路由openwrt系统中打开和关闭ICMP以开启或禁上ping本机:
登录openwrt-网络-防火墙-通信规则-Alow-Ping-启用项目取消勾选,保存&应用,重启openwrt系统,此时通过外网便不能ping通openwt外网地址,反之,如选中"启用”保存&应用,外网计算机可ping通本地IP地址,这里需要注意,取消“Alow-Ping”时需要重启openwt路由器方可生效,而启用“Allow-Ping”时无需重启openwrt路由器即可即时生效。
你以为这就完了,不不不。
WOL唤醒
可以通过手机内网唤醒本地电脑(当然需要本地电脑的主板支持),具体是否支持,请自行搜索并寻找开启方法,如果已本地测试可以WOL开机后,咱们继续往下聊。
首先,通过端口转发将OpenWRT路由器的22端口开放,可以通过域名及外部端口配置从公网ssh连接OpenWRT主路由。
其次,苹果手机使用捷径软件,新建一个快捷指令,添加一个“通过SSH运行脚本”,根据实际情况配置连接状态,代码为:
/usr/bin/etherwake -D -i "br-lan" "04:7C:16:47:C4:XX"
这个命令使用了 etherwake 工具(一般都默认有安装),它用于唤醒(Wake-on-LAN)网络上的某台设备。具体而言,命令的含义如下:
/usr/bin/etherwake: 这是 etherwake 工具的路径。
-D: 这个选项是用来启用调试模式,它会输出更详细的信息,有助于调试。
-i "br-lan": 这个选项指定了网络接口,这里是 "br-lan"。它告诉 etherwake 在哪个网络接口上发送唤醒包。(有的可能是eth0, eth1,可逐个测试)
"04:7C:16:47:C4:XX": 这是目标设备的物理地址(MAC 地址)。
同时,可以把捷径自定义名称和图标,保存在手机桌面上,只需要轻松一点,可以直接通过捷径启动家里的局域网内电脑了。
远程桌面
windows电脑设置开启远程桌面连接,同时主路由OpenWRT的防火墙设置端口(如8000)转发至目标主机的3389端口,公网状态下可直接通过windows自带的的远程桌面连接(域名加外部端口,如123.myiphost.com:8000)直连并控制该windows电脑。
再次提醒,务必注意不要在公网直接暴露3389端口,且远程桌面连接的密码不是弱密码。
20224年1月24日补充,远程桌面建议使用rushdesk,原因很简单,该软件开源、免费,支持文件传输,而且可以跨平台(windows、MAC OS、Android、linux等,IOS端因封闭权限问题,仅可作为控制方)使用,需要注意的一点,被连接端一般有三种连接方式:
1、使用公网的服务器连接,缺点很明显,这些服务器都是在国外,相当于国内AB两点之间的连接需要通过境外公网服务器C中转数据,延迟很大,可以满足基本用途,但是不佳;
2、通过国内的自建服务器连接,且该服务器也需要固定公网信息,方便国内的AB端通过该国内服务器中转,缺点就是自建网络把整个系统变得负责,且存在各类维护成本。
3、设置直连,缺点也很明显,被控制端必须有公网IP和端口,这样控制端不同通过服务器,直接建立连接,延迟和管理都相当简单。
以上三种各有优缺,这里我使用第三种控制家里的Android手机和windows电脑,软件下载地址:https://github.com/rustdesk/rustdesk
安卓端作为被控制端注意按需启动如下权限:
屏幕录制 是否启动屏幕录制共享权限,启动的同时即开启监听服务
输入控制* 是否允许控制者控制手机的输入,比如用鼠标进行虚拟触屏操作
文件传输* 是否开启文件传输权限,启动后可远程控制这台手机的文件系统
音频录制 是否共享手机内部的系统音乐(非麦克风输入)
其中,* 代表特殊权限,获取此类权限需要跳转到Android系统设置页面手动获取。
打开设置中的IP直连,设置好端口,启动服务。
同时设置好主路由中的端口转发,在上文已经配置好DDNS的基础上,就可以直接连接并控制家里的安卓手机了。
此时,控制端这时在RustDesk Client 控制远程桌面的输入对方ID连接内输入DDNS域名地址:端口(如:123.myiphost.com:4000)进行连接,延迟在20毫秒左右,相当丝滑顺畅。
总结
现在我们可以通过ssh控制主路由,控制启动局域网内的电脑,甚至远程控制家里的各类设备,如果你已经操作到这一步,相信对局域网络已经有自己的认识,可以拓展出更多玩法了(如公网访问nas,摄像头等等)。
PS:个人兴趣,非专业人员,如遇到问题,多搜索解决。