OpenWrt入坑记录
自动之前从手头一个小主机开始玩软路由,虚拟机等等,算是彻底入坑了,发现了很多好玩的东西,原来家庭网络可玩性真是挺高的!
近期买了个红米AX6,刷了openwrt实话说真好用,比专门的软路由还好用!中间遇也到过一些奇奇怪怪的问题,折腾起来比较折磨人。所以,再开一篇内容,记录一下,方便以后查阅。
首先,我用openwrt做什么
我没有所谓科学上网的需求,毕竟github一类对我有用的工具其他方式也能解决。
激活windows或者office
之前在我的all in one主机里面详细讲过,目前不爱用office了,姑且认为就是用来激活Windows吧。
1.激活准备
管理员打开PowerShell
2.激活命令:
先卸载当前序列号(不一定需要)
slmgr.vbs /upk
WIN11 专业版 激活
slmgr -ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr -skms lede.zizdog.com
slmgr -ato
win 10 专业版 激活
slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr /skms kms.zizdog.com
slmgr /ato
win 10 家庭版 激活
slmgr /ipk PVMJN-6DFY6-9CCP6-7BKTT-D3WVR
slmgr /skms kms.zizdog.com
slmgr /ato
win server 2016 激活
slmgr /ipk CB7KF-BWN84-R7R2Y-793K2-8XDDG
slmgr /skms kms.zizdog.com
slmgr /ato
注:kms.zizdog.com是我用端口映射把域名连接到路由器的kms服务上了,正常直接填写路由地址即可(如192.168.10.1)
4.其他版本一样,更改秘密即可,密钥自行百度
DDNS
想要顺场地玩家庭网络服务,域名是必不可少的,那么动态dns解析也就是硬性需求了。通常openwrt固件中都会集成ddns的,简单配置即可使用,不过也有可能会遇到一些比较烦人的坑,这个我在openwrt踩坑中详细介绍过。
我遇到的一些小坑
坑虽小,麻烦却大,任何一个小问题,都会导致整个组网的实效。
问题一:ddns失效
ddns偶尔会在重启后无法自启动,后面了解到是ddns启动太快,在pppoe拨号成功之前就启动了,还没有ip地址,因此导致失败,解决办法也很简单,加入“本地启动脚本”,位置在”系统“-”启动项“最下面。以下启动脚本插入到 'exit 0' 之前即可随系统启动运行。
# ddns restart
sleep 15s
/etc/rc.d/S95ddns start
特别简单,就是延时15秒后重启ddns程序。
问题二:断网后不能重拨
拨号上网断线,这样家里就断网了。这里网上有现成的脚本,拿来主义,别说写得真挺用心的。
#!/bin/sh
#网络检测脚本 通过PING来判断网络互通状态
#by:朱君绰绰 V1.5
#shell测试命令
#./my_pppoe.sh runA
#计划任务命令
#*/5 * * * * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1
#状态解释(State)
# Carry Out=执行脚本
# Create Log=创建日志文件
# Clear Log = 清空日志内容
# Log Byte 123/456=日志文件大小
# Ping 8.8.8.8=ping
# Ping 8.8.8.8 Yes=ping正常
# Ping 8.8.8.8 No=ping异常
# Ping Retry 1/3=ping重试
# Restart Wan=重连wan
# Restart Wan Yes=重连wan完成
# Restart Network=重启网络进程
# Restart Network Yes=重启网络进程完成
# Restart Reboot=重启路由器
# Restart Reboot Yes=已发送重启路由器命令
#相关变量解释
# LogMax=日志大小(KB)
# LogFile=日志文件
# PingA,PingB=IP地址
# CycleIndex=重试次数
# IntervalTime=重试间隔时间(秒)
function NowTimeCall()
{
NowTime=$(date "+%Y-%m-%d %H:%M:%S")
}
function LogTextCall()
{
if [ ! -f "$1" ]; then
echo "$NowTime - State:Create Log"
else
Size=`ls -l $1 | awk '{ print $5 }'`
Max=$((1024*$2))
if [ $Size -ge $Max ]; then
cat /dev/null > $1
echo "$NowTime - State:Clear Log"
else
echo "$NowTime - State:Log Byte $Size/$Max"
fi
fi
}
#NowTime=$(date "+%Y-%m-%d %H:%M:%S")
NowTimeCall
echo "<my_pppoe> ----------------------------------------------"
echo "$NowTime - State:Carry Out"
LogMax=512
LogFile="/root/my_pppoe.log"
PingA=114.114.114.114
PingB=202.108.22.5
CycleIndex=3
IntervalTime=10
LogTextCall $LogFile $LogMax
i=0
PingError=0
while [[ $i -lt $CycleIndex ]]
do
NowTimeCall
echo "$NowTime - State:Ping $PingA"
if /bin/ping -c 1 $PingA >/dev/null
then
NowTimeCall
echo "$NowTime - State:Ping $PingA Yes"
PingError=0
break
else
NowTimeCall
echo "$NowTime - State:Ping $PingA No"
NowTimeCall
echo "$NowTime - State:Ping $PingB"
if /bin/ping -c 1 $PingB >/dev/null
then
NowTimeCall
echo "$NowTime - State:Ping $PingB Yes"
PingError=0
break
else
NowTimeCall
echo "$NowTime - State:Ping $PingB No"
i=$(($i + 1))
echo "$NowTime - State:Ping Retry $i/$CycleIndex"
PingError=1
sleep $IntervalTime
fi
fi
done
if [ $PingError = 1 ]; then
if [ $1 = runA ]; then
NowTimeCall
echo "$NowTime - State:Restart Wan"
ifup wan
NowTimeCall
echo "$NowTime - State:Restart Wan Yes"
fi
if [ $1 = runB ]; then
NowTimeCall
echo "$NowTime - State:Restart Network"
/etc/init.d/network restart
NowTimeCall
echo "$NowTime - State:Restart Network Yes"
fi
if [ $1 = runC ]; then
NowTimeCall
echo "$NowTime - State:Restart Reboot"
echo "$NowTime - State:Restart Reboot Yes"
reboot
fi
fi
exit 0
具体操作:
将脚本文件上传至root目录,并设置0755权限。然后添加一个计划任务。
*/5 * * * * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1
我这里选择了每5分钟执行一次检查。
当然这个脚本的用法还是比较丰富的,接单介绍如下:
注意命令首尾无空格 1分钟执行一次,异常重启wan
/2 * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1 2分钟执行一次,异常重启wan
/5 * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1 5分钟执行一次,异常重启wan
/5 * /root/my_pppoe.sh runB >> /root/my_pppoe.log 2>&1 5分钟执行一次,异常重启网络连接
/5 * /root/my_pppoe.sh runC >> /root/my_pppoe.log 2>&1 5分钟执行一次,异常重启路由器runA=重启WAN(极力推荐),支持1-30分钟
runB=重启网络连接(不推荐),支持5-30分钟,最少需要5分钟(设置太短可能无法进入路由器后台)
runC=重启路由(不推荐),支持5-30分钟,最少需要5分钟(设置太短可能无法进入路由器后台)
检查计划任务是否成功执行脚本:如果脚本目录下出现my_pppoe.log则说明成功了(计划任务间隔时间以上再检查)。
问题三:upnp失效/不起作用
1, vi /etc/config/upnpd
2,在option internal_iface 'lan'
前插入一行option external_iface 'wan'
(wan为接口中WAN的名称一般默认wan)
3,在option uuid 'xxx'
后面插入一行option presentation_url 'http://192.168.10.1'
(url值为lan地址)
修改完成代码如下:
config upnpd 'config'
option download '1024'
option upload '512'
option external_iface 'wan'
option internal_iface 'lan'
option port '5000'
option upnp_lease_file '/var/upnp.leases'
option enabled '1'
option igdv1 '1'
option uuid 'da28d8d5-8ae4-4b75-b769-e8223e58358c'
option presentation_url 'http://192.168.10.1'
config perm_rule
option action 'allow'
option ext_ports '1024-65535'
option int_addr '0.0.0.0/0'
option int_ports '1024-65535'
option comment 'Allow high ports'
config perm_rule
option action 'deny'
option ext_ports '0-65535'
option int_addr '0.0.0.0/0'
option int_ports '0-65535'
option comment 'Default deny'
4,保存后重启upnpetc/init.d/miniupnpd restart
问题四:SSL
这个没有坑,就是记录一下
1,下载gninx的证书,命名uhttpd.key
,uhttpd.crt
,上传到/etc/
目录(这个位置可能有不同,具体在/etc/config/uhttpd
中查看)
2,service uhttpd restart
更改主机名
编辑网络配置文件:vi /etc/config/system
。
在文件中找到config system
的部分,然后找到option hostname
行。
将option hostname
后面的值更改为你想要的设备名称。按下Esc
键,然后输入:wq
保存并退出文件。
重新服务生效/etc/init.d/system restart
本文最后更新时间为 2024-10-11 14:41
本站仅用作个人记录,不交流、不讨论,留言板可以留言但无邮件回复。