小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面

文章目录


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、开启SSH

这里使用的是github上的开源项目XMiR-Patcher实现。
https://github.com/openwrt-xiaomi/xmir-patcher

下载项目到本地。

然后运行以下命令,需要注意的是linux或mac需要安装python3.8和openssl

  • Windows
    Run run.bat
  • Linux / Mac OS
    Install python 3.8, openssl
    Run run.sh

运行并输入ip和密码

先输入路由器ip-》回车-》输入2-》数据路由器密码

成功后ssh的账号密码都为root

bash 复制代码
==========================================================

Xiaomi MiR Patcher


 1 - Set IP-address (current value: 192.168.31.1)
 2 - Connect to device (install exploit)
 3 - Read full device info
 4 - Create full backup
 5 - Install EN/RU languages
 6 - Install Breed bootloader
 7 - Install firmware (from directory "firmware")
 8 - {{{ Other functions }}}
 9 - [[ Reboot device ]]
 0 - Exit

Select: 192.168.31.1 #输入自己的路由器ip


==========================================================

Xiaomi MiR Patcher


 1 - Set IP-address (current value: 192.168.31.1)
 2 - Connect to device (install exploit)
 3 - Read full device info
 4 - Create full backup
 5 - Install EN/RU languages
 6 - Install Breed bootloader
 7 - Install firmware (from directory "firmware")
 8 - {{{ Other functions }}}
 9 - [[ Reboot device ]]
 0 - Exit

Select: 2 # 选择2 然后根据提示输入密码

二、配置阿里云ddns

小米路由器本身自带了ddns,但是局限性比较高只能用以下4种。

1.准备工作

如何想使用自己的域名,需要上阿里云购买一个域名。

注册AccessKey

首先登录个人的阿里云账号,我的是RAM账户。各位的可以使用主账户进行使用AccessKey。

点击ACCESSKEY管理

创建你的AccessKey,并记录下来。

注意如果是RAM的话一定要添加AliyunDNSFullAccess授权策略

2.创建ddns脚本

aliyun_ddns.sh

bash 复制代码
#!/bin/sh
set -e

#================================================================================================================#
# 功能:用于更新阿里云域名IP,实现DDNS功能
#
# 在 http://www.gebi1.com/forum.php?mod=viewthread&tid=287344&page=1&_dsign=8f94f74c 提供的脚本文件基础上修改的。
# ghui, modified 12/2/2019
# 在 N1 debian Buster with Armbian Linux 5.3.0-aml-g12 手动执行/定时任务(crontab)执行测试通过
#================================================================================================================#
#
# 使用方法:
#
# 方法1. 外部参数
# 修改源码,将对应参数 修改为$1,$2,$3,$4,$5,$6 
# aliddns.sh <aliddns_ak> <aliddns_sk> <aliddns_subdomain> <aliddns_domain> <aliddns_iptype> <aliddns_ttl>
# 示例(A 代表 IPv4,AAAA 代表 IPv6): 
# 执行:aliddns.sh "xxxx" "xxx" "test" "mydomain.site" "A" 600
# 执行:aliddns.sh "xxxx" "xxx" "test" "mydomain.site" "AAAA" 600
#
# 方法2. 内部参数
# 修改源码,将$1,$2,$3,$4,$5,$6 替换为对应参数
# 
# 示例: 
# aliddns_ak="<aliddns_ak>"
# aliddns_sk="<aliddns_sk>"
# aliddns_subdomain="<aliddns_subdomain>"
# aliddns_domain="<aliddns_domain> "
# aliddns_iptype="<aliddns_iptype>"
# aliddns_ttl=<aliddns_ttl> 
# 执行:aliddns.sh
#
#================================================================================================================#

#--------------------------------------------------------------
# 参数
#
# (*)阿里云 AccessKeyId 
aliddns_ak="阿里云 AccessKeyId "
# (*)阿里云 AccessKeySecret 
aliddns_sk="阿里云 AccessKeySecret "


# (*)域名:test.mydomain.com 
aliddns_subdomain="test.mydomain.com " #'test'
aliddns_domain="mydomain.com.cn"  #'mydomain.com'

# (*)ip地址类型:'A' 或 'AAAA',代表ipv4 和 ipv6
aliddns_iptype="A" # 'A' 或 'AAAA',代表ipv4 和 ipv6

# TTL 默认10分钟 = 600秒 
aliddns_ttl=600 #"600"

#--------------------------------------------------------------

machine_ip=""
ddns_ip=""
aliddns_record_id=""

if [ "$aliddns_subdomain" = "@" ]
then
  aliddns_name=$aliddns_domain
else
  aliddns_name=$aliddns_subdomain.$aliddns_domain
fi

now=`date`
echo "**************************************************"
echo "$now"
echo "$aliddns_name"

function getMachine_IPv4() { 
   
    echo $(/usr/bin/wget -qO- -t1 -T2 http://ip.3322.net)
}

function getMachine_IPv6() { 
   
    ipv6=`ip addr | grep "inet6.*global" | grep -v "deprecated" | awk '{print $2}' | awk -F"/" '{print $1}' | sed -n '1,1p'`
    echo $ipv6
}

function getDDNS_IP() { 
   
    current_ip=`nslookup -query=$aliddns_iptype $aliddns_name | grep "Address" | grep -v "#53" | awk '{print $2}'`
    echo $current_ip
}

function 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
}

function enc() { 
   
    echo -n "$1" | urlencode
}

function 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")"
}

function get_recordid() { 
   
    grep -Eo '"RecordId":"[0-9]+"' | cut -d':' -f2 | tr -d '"'
}

function query_recordid() { 
   
    send_request "DescribeSubDomainRecords" "SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$aliddns_name&Timestamp=$timestamp&Type=$aliddns_iptype"
}

function update_record() { 
   
    send_request "UpdateDomainRecord" "RR=$aliddns_subdomain&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddns_ttl&Timestamp=$timestamp&Type=$aliddns_iptype&Value=$(enc $machine_ip)"
}

function add_record() { 
   
    send_request "AddDomainRecord&DomainName=$aliddns_domain" "RR=$aliddns_subdomain&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddns_ttl&Timestamp=$timestamp&Type=$aliddns_iptype&Value=$(enc $machine_ip)"
}

if [ "$aliddns_iptype" = 'A' ]
then
    echo "ddns is IPv4."

    machine_ip=`echo "$(getMachine_IPv4)"`
    echo "machine_ip = $machine_ip"

    aliddns_record_id=$aliddnsipv4_record_id
else
    echo "ddns is IPv6."

    machine_ip=`echo "$(getMachine_IPv6)"`
    echo "machine_ip = $machine_ip"

    aliddns_record_id=$aliddnsipv6_record_id
fi

ddns_ip=`echo "$(getDDNS_IP)"`
echo "ddns_ip = $ddns_ip"

if [ "$machine_ip" = "" ]
then
    echo "machine_ip is empty!"
    exit 0
fi

if [ "$machine_ip" = "$ddns_ip" ]
then
    echo "skipping\n"
    exit 1
fi

echo "start update..."

timestamp=`date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"`

if [ "$aliddns_record_id" = "" ]
then
    aliddns_record_id=`query_recordid | get_recordid`
    echo "----------------" $aliddns_record_id "\n"
    
    if [ "$aliddns_iptype" = 'A' ]
    then
        aliddnsipv4_record_id=$aliddns_record_id
    else
        aliddnsipv6_record_id=$aliddns_record_id
    fi
fi

#add support */%2A and @/%40 record
if [ "$aliddns_record_id" = "" ]
then
    echo "add record starting"

    aliddns_record_id=`add_record | get_recordid`

    if [ "$aliddns_record_id" = "" ]
    then
        echo "aliddns_record_id is empty. \n"
    else
        if [ "$aliddns_iptype" = 'A' ]
        then
            aliddnsipv4_record_id=$aliddns_record_id
        else
            aliddnsipv6_record_id=$aliddns_record_id
        fi

        echo "added record $aliddns_record_id \n"
    fi
else
    echo "update record starting"
    update_record $aliddns_record_id
    echo "updated record $aliddns_record_id \n"
fi

该脚本来自https://cloud.tencent.com/developer/article/2093275


将脚本放到/data/scripts/下命名为aliyun_ddns.sh

可以使用命令运行脚本测试是否可行

bash 复制代码
/data/scripts/aliyun_ddns.sh

3.添加定时任务

添加定时任务,每20分钟执行一次脚本

bash 复制代码
echo "*/20 * * * * /data/scripts/aliyun_ddns.sh" >> /etc/crontabs/root
/etc/init.d/cron restart

三、开启外网访问SSH和WEB管理界面

由于小米路由为了安全考虑,对WEB与防火墙规则进行限制,WEB管理、SSH只能通过内网登 陆,外网无法访问,在路由器的WEB管理页面新建端口转发中不能添加路由本机内网IP。

开启小米路由的SSH后,我们可以通过登陆SSH在命令行中手动添加防火墙中端口转发规则

1、解除WEB管理页面访问限制

  • cd /etc/nginx //切换目录
  • cp miwifi-webinitrd.conf miwifi-webinitrd.conf.bak //养成备份好习惯:
  • vi miwifi-webinitrd.conf //编辑miwifi-webinitrd.conf

动光标找到 set $finalvar "$canproxy $isluci";

在图中位置插入下面代码(按i键进入编辑模式)

bash 复制代码
set $isluci "1";

完成后按ESC退出编辑,Shift + ;键 :输入wq 回车保存并退出

重启httpd服务使配置生效

bash 复制代码
/etc/init.d/sysapihttpd restart

如果是老版本位置在/etc/sysapihttpd/

2.手动添加防火墙端口转发规则,开启外网访问WEB管理和SSH

bash 复制代码
vi /etc/config/firewall                    //编辑防火墙配置

1.添加WEB管理外网端口转发规则代码段:

bash 复制代码
config redirect 'MIWEB'                                                          
        option src 'wan'                                                            
        option src_dport '1314'                                                    
        option name 'WEB'                                
        option ftype '1'                                                                                 
        option dest_port '80'                              
        option proto 'tcp'     

WEB管理界面外网端口为1314 可通过外网IP:1314访问 (例 http://61.181.133.5:1314),绑定DDNS的用户可通过域名:1314进行访问。

2.添加SSH外网登陆端口转发规则代码段:

bash 复制代码
config redirect 'Myssh'                                         
        option src 'wan'                                        
        option src_dport '2345'                                
        option dest 'lan'                                       
        option dest_port '22'                                   
        option proto 'tcp' 

SSH登陆外网端口为2345

添加对应规则后保存退出

重启防火墙使规则生效

bash 复制代码
/etc/init.d/firewall restart

现在就可以通过外网WEB管理设置小米路由和进行SSH登陆了.

相关推荐
EnCi Zheng12 分钟前
M5-markconv自定义CSS样式指南 [特殊字符]
前端·css·python
kyriewen16 分钟前
你的网页慢,用户不说直接走——前端性能监控教你“读心术”
前端·性能优化·监控
广州华水科技16 分钟前
北斗GNSS变形监测在大坝安全监测中的应用与优势分析
前端
前端老石人28 分钟前
前端开发中的 URL 完全指南
开发语言·前端·javascript·css·html
CAE虚拟与现实28 分钟前
五一假期闲来无事,来个前段、后端的说明吧
前端·后端·vtk·three.js·前后端
Sarvartha39 分钟前
三目运算符
linux·服务器·前端
晓晨的博客1 小时前
ROS1录制的bag包转换为ROS2格式
前端·chrome
Wect1 小时前
LeetCode 72. 编辑距离:动态规划经典题解
前端·算法·typescript
donecoding1 小时前
别再让 pnpm 跟着 nvm 跑了!独立安装终极指南
前端·node.js·前端工程化
GISer_Jing1 小时前
AI全栈转型_TS后端学习路线
前端·人工智能·后端·学习