环境情况:
主路由:友善 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 [email protected]: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: 个人兴趣,非专业人员,如遇到问题,多搜索解决。
