之前的水星MW4530R路由器退役了,现在入手了华硕的RT-AC86U路由器作为替代。本文将记述AC86U的作用。
路由器选择
我选路由器有几个原则:
-
必须可以自行刷系统,无论是OpenWRT还是其它系统,只要能进行二次开发,能安装第三方软件,能写脚本即可。
-
路由性能必须足够,因为现在家中网络设备一般都比较多。
-
路由器必须能稳定运行,最好是7x24不间断运行,被动散热。
-
无线信号必须支持5G信号。
-
USB必须支持3.0。
-
网口必须支持千兆。
-
NAT刷机后也支持硬件加速。
在购买路由器之前,在网上搜了一些资料,发现只有网件R6300和华硕AC86U两款,最终因为梅林系统和AC86U血缘比较近,就选择了AC86U(某东购入价829)。
路由刷机
刷入梅林系统,具体刷机过程比较简单,网上教程也很多。不再赘述。
基本功能配置
-
PPPoE拨号配置
-
WIFI配置
-
DHCP配置
-
VPN配置
-
端口转发配置
-
开启SSH管理功能
jffs配置
-
新增
/jffs/config/dnsmasq.conf.add
,内容可以填入需要屏蔽的域名,绑定特定IP的域名等 -
新增
/jffs/script/ddns-start
, 该脚本在路由WAN口IP地址变更时会调用,目前该脚本实现两个功能,一是邮件通知当前最新IP,另一个功能是更新域名对应的IP。 -
新增
/jffs/script/firewall-start
, 该脚本在防火墙启动时被调用,可以添加自定义防火墙规则。 -
新增
/jffs/script/post-mount
, 该脚本在U盘挂载后被调用,可以在这脚本里添加U盘处理规则,比如挂载SWAP分区文件,执行U盘内脚本等。
附
-
alidns.sh, 本脚本可以通过阿里云提供的接口自动更新域名对应的IP。
#!/bin/sh # usage: alidns.sh 192.168.1.1 aliddns_name="router" # your sub domain aliddns_domain="example.com" # your domain aliddns_ak="******" # your ali key aliddns_sk="********" # your ali key aliddns_dns="1.1.1.1" # your isp dns aliddns_ttl="600" ip=$1 current_ip=`nslookup $aliddns_name.$aliddns_domain $aliddns_dns 2>&1` if [ "$?" -eq "0" ] then current_ip=`echo "$current_ip" | grep 'Address 1' | tail -n1 | awk '{print $NF}'` if [ "$ip" = "$current_ip" ] then echo "DNS: IP not changed" exit 0 fi fi timestamp=`date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"` urlencode() { # urlencode <string> out="" while read -n1 c do case $c in [a-zA-Z0-9._-]) out="$out$c" ;; ,*) out="$out`printf '%%%02X' "'$c"`" ;; esac done echo -n $out } enc() { echo -n "$1" | urlencode } send_request() { local args="AccessKeyId=$aliddns_ak&Action=$1&Format=json&$2&Version=2015-01-09" local hash=$(echo -n "GET&%2F&$(enc "$args")" | openssl dgst -sha1 -hmac "$aliddns_sk&" -binary | openssl base64) curl -s "http://alidns.aliyuncs.com/?$args&Signature=$(enc "$hash")" } get_recordid() { grep -Eo '"RecordId":"[0-9]+"' | cut -d':' -f2 | tr -d '"' } query_recordid() { send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$aliddns_name.$aliddns_domain&Timestamp=$timestamp" } update_record() { send_request "UpdateDomainRecord" "RR=$aliddns_name&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddns_ttl&Timestamp=$timestamp&Type=A&Value=$ip" } add_record() { send_request "AddDomainRecord&DomainName=$aliddns_domain" "RR=$aliddns_name&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddns_ttl&Timestamp=$timestamp&Type=A&Value=$ip" } if [ "$aliddns_record_id" = "" ] then aliddns_record_id=`query_recordid | get_recordid` fi if [ "$aliddns_record_id" = "" ] then aliddns_record_id=`add_record | get_recordid` echo "added record $aliddns_record_id($aliddns_name.$aliddns_domain) = $ip" else update_record $aliddns_record_id echo "updated record $aliddns_record_id($aliddns_name.$aliddns_domain) = $ip" fi