自动之前从手头一个小主机开始玩软路由,虚拟机等等,算是彻底入坑了,发现了很多好玩的东西,原来家庭网络可玩性真是挺高的!
近期买了个红米AX6,刷了openwrt实话说真好用,比专门的软路由还好用!中间遇也到过一些奇奇怪怪的问题,折腾起来比较折磨人。所以,再开一篇内容,记录一下,方便以后查阅。

openwrt.png

首先,我用openwrt做什么

我没有所谓科学上网的需求,毕竟github一类对我有用的工具其他方式也能解决。

激活windows或者office

之前在我的all in one主机里面详细讲过,目前不爱用office了,姑且认为就是用来激活Windows吧。

1.激活准备

管理员打开PowerShell

2.激活命令:

先卸载当前序列号

slmgr.vbs /upk

win 10 专业版 激活

slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
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
/1 * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1 2分钟执行一次,异常重启wan
/2 * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1 5分钟执行一次,异常重启wan
/5 * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1 5分钟执行一次,异常重启网络连接
/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

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,保存后重启upnp
etc/init.d/miniupnpd restart

问题四:SSL

这个没有坑,就是记录一下
1,下载gninx的证书,命名uhttpd.key,uhttpd.crt,上传到/etc/目录(这个位置可能有不同,具体在/etc/config/uhttpd中查看)
2,service uhttpd restart

问题五:

。。。