今天突然想试一下用域名绑定我的个人电脑,搜了点视频了解了原理之后发现很简单就试了下,流程如下:

1.宽带修改为公网(联通直接打电话96480说改为公网接入)

一般默认就是公网宽带,具体需要自己测试下

2.宽带修改为拨号上网模式,我上午问了下,下午就给弄好了,他们可以直接给远程操作很简单

3.然后使用路由器(我用的是红米AX6000,其他路由器可能会比较麻烦,具体测试下)拨号上网

此时路由器的网络环境就已将属于公网了,接下来就是把内网的设备映射到外网

4.端口映射/DMZ(应该叫IP映射吧)

image-20250105172648329

这个路由器稳定版中就有这个功能,直接打开发现就可以实现映射到公网了

也可以通过端口映射,这样可能安全些

5.实现DDNS

实现ssh连接路由器

有很多工具可以做,搜到一个教程

https://www.gaicas.com/redmi-ax6000.html

只需要开启ssh即可

设备参数

红米路由器 · AX6000

这台路由器被大家诟病最多就是没有配备 2.5G 网口,只拥有四个千兆网口,无法体验超千兆的网络带宽。TP-Link旗下相同的解决方案均已配备多个 2.5G 的网口。

红米AX6000搭载的是 MTK 在 2021 年发布的 Filogic 830 平台,具体型号是mt7986a,四核 ARM,A53 的架构,主频 2.0GHz ,制程 12nm,内存 512M,闪存 128M,对于路由器来说,这个配置已经非常耐打了。

准备工作

  1. Windows系统推荐安装 💾Putty 和 💾WinSCP;Mac系统直接使用终端
  2. 红米路由器 AX6000 💾1.0.67版固件

注意:解锁设备有风险,若无编程能力请严格按照教程步骤执行,切勿随意插拔设备,以免设备变砖。

第一步 · 刷入稳定版固件

**确认固件版本****

  1. 登陆小米路由器的后台。依次点击常用设置-系统状态,检查路由器的系统版本是否为1.0.67版。
  2. 若路由器当前版本低于1.0.67版,请将 💾1.0.67 版固件上传至设备,进行手动升级。
  3. 若路由器当前版本高于1.0.67版,系统将提示无法降级,你可以使用官方的小米路由器修复工具完成降级。

小米路由器修复工具

img

第二步 · 获取小米路由器TOKEN密钥

登录小米路由器后台,在浏览器的地址栏中获取token秘钥并记录。token秘钥为下图地址栏中蓝色部分数值

img

第三步 · 开启设备调试模式

开启设备 telnet 端口

http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3B%20zz%3D%24%28dd%20if%3D%2Fdev%2Fzero%20bs%3D1%20count%3D2%202%3E%2Fdev%2Fnull%29%20%3B%20printf%20%27%A5%5A%25c%25c%27%20%24zz%20%24zz%20%7C%20mtd%20write%20-%20crash%20%3B%20

将上述代码中的{token}替换为第二步你获取的数值,替换完成后粘贴到浏览器中打开。

img

如上图所示,将第二步获取的{token}值复制到浏览器地址栏中并请求访问,如果浏览器反馈显示{"code":0}内容,则表示操作成功

通过浏览器请求重启

http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20

打开浏览器,复制上面的内容到地址栏中,并替换{token},通过浏览器执行完这一步骤后,路由器会重启,请等待重启完成。

第四步 · 设置Bdata永久开启telnet

操作方式

http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3B%20bdata%20set%20telnet_en%3D1%20%3B%20bdata%20set%20ssh_en%3D1%20%3B%20bdata%20set%20uart_en%3D1%20%3B%20bdata%20commit%20%3B%20

待路由器重启完成后,重新进入路由器管理后台,获取新的{token};之后打开浏览器,复制上面的内容到地址栏,并替换{token}

之后请再次执行通过浏览器请求重启并等待设备重启完成。

通过浏览器请求重启

http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20

打开浏览器,复制上面的内容到地址栏中,并替换{token},通过浏览器执行完这一步骤后,路由器会重启,请等待重启完成。

如果浏览器反馈显示{“code”:0},则表示操作成功

第五步 · 开启设备SSH端口

操作方式

创建 Telnet 会话,链接设备。

在主机地址中输入路由器的管理地址并点击链接即可。无用户名和密码

img

第六步 · 永久开启并固化SSH

Telnet 登录设备并执行命令

echo -e 'admin\nadmin' | passwd root
nvram set ssh_en=1
nvram set telnet_en=1
nvram set uart_en=1
nvram set boot_wait=on
nvram commit
sed -i 's/channel=.*/channel="debug"/g' /etc/init.d/dropbear
/etc/init.d/dropbear restart
mkdir /data/auto_ssh
cd /data/auto_ssh
curl -O https://fastly.jsdelivr.net/gh/lemoeo/AX6S@main/auto_ssh.sh
chmod +x auto_ssh.sh
uci set firewall.auto_ssh=include
uci set firewall.auto_ssh.type='script'
uci set firewall.auto_ssh.path='/data/auto_ssh/auto_ssh.sh'
uci set firewall.auto_ssh.enabled='1'
uci commit firewall
uci set system.@system[0].timezone='CST-8'
uci set system.@system[0].webtimezone='CST-8'
uci set system.@system[0].timezoneindex='2.84'
uci commit
mtd erase crash
reboot

这将会把设备的 SSH 密码设置为admin,用户名设置为root,并永久开启 SSH端口。同时,还会将您的设备从开发模式切换成常规模式。待设备重启完成后,你就可以使用该用户名密码连接设备的 SSH 了。

第七步 · 尝试SSH登录设备

img

用户名:root; 密码:admin

DDNS功能实现

编写一个脚本,我是放在了这个文件夹下

vi /etc/config/ddns_self/ddns.sh 
#!/bin/bash

# Cloudflare API 配置
ZONE_ID="4e5ea03bdce9e55f15d1d1d21549XXXX"
DNS_RECORD_ID="cafec28e34fb48ca44eb33f0f1fdXXXX"
API_KEY="tcB3cO-wpFemmeuPQagz83YxEZJATbIbfn6jXXXX"
DNS_NAME="XXXX"

TTL=60



# 获取 Cloudflare 上的 IP 地址
get_cloudflare_ip() {
  nslookup $DNS_NAME | grep 'Address 1' | awk '{print $3}'
}

# 获取本地网卡的 IP 地址
get_local_ip() {
  ifconfig pppoe-wan | grep 'inet addr' | awk '{print $2}' | cut -d: -f2
}

# 更新 Cloudflare DNS 记录
update_cloudflare() {
  local new_ip=$1
  curl --max-time 10 -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID" \
    -H "Authorization: Bearer $API_KEY" \
    -d '{"type":"A","name":"'"$DNS_NAME"'","content":"'"$new_ip"'","ttl":'"$TTL"',"proxied":false}'
}

# 主循环,每60秒执行一次
while true; do
  # 获取 Cloudflare 上的 IP 地址
  cloudflare_ip=$(get_cloudflare_ip)

  # 获取本地网卡的 IP 地址
  local_ip=$(get_local_ip)

  echo "Local IP: $local_ip Cloudflare IP: $cloudflare_ip $(date +%Y%m%d%H%M%S)"


  # 判断本地 IP 是否已存在于 Cloudflare 上
  if ! echo "$cloudflare_ip" | grep -q "$local_ip"; then
     echo "本地 IP 不在 Cloudflare 中,更新 Cloudflare DNS 记录"
    update_cloudflare "$local_ip"
  else
    echo "本地 IP 存在于 Cloudflare 中,无需更新"
  fi


  # 每60秒执行一次
  sleep 60
done
#  第二版
#!/bin/bash

# https://dash.cloudflare.com/api/v4/zones/{$ZONE_ID}/dns_records?per_page=50 直接在浏览器打开可以查看dns的记录和dns记录id


# Cloudflare API 配置
ZONE_ID="4e5ea03bdceXXXXXXXXXXXXXXXXX"
API_KEY="tcB3cO-wpFemmeuPQagz83YxEZJATbIbfn6j0v8-"
TTL=60

# 第一个域名配置
DNS_RECORD_ID_1="0bdfccXXXXXXXXXXdecaada68e81c5"
DNS_NAME_1="bb.www.top"

# 第二个域名配置
DNS_RECORD_ID_2="6ca4ed3XXXXXXXc853b238278e1"
DNS_NAME_2="aa.www.top"

# 获取 Cloudflare 上的 IP 地址
get_cloudflare_ip() {
  local dns_name=$1
  nslookup "$dns_name" | grep 'Address 1' | tail -n 1 | awk '{print $3}'
}

# 获取本地网卡的 IP 地址
get_local_ip() {
  ifconfig pppoe-wan | grep 'inet addr' | awk '{print $2}' | cut -d: -f2
}

# 更新 Cloudflare DNS 记录
update_cloudflare() {
  local dns_name=$1
  local dns_record_id=$2
  local new_ip=$3
  curl --max-time 10 -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$dns_record_id" \
    -H "Authorization: Bearer $API_KEY" \
    -d '{"type":"A","name":"'"$dns_name"'","content":"'"$new_ip"'","ttl":'"$TTL"',"proxied":false}'
}

# 更新指定域名的 IP 地址
update_domain_ip() {
  local dns_name=$1
  local dns_record_id=$2
  local local_ip=$3

  # 获取 Cloudflare 上的 IP 地址
  local cloudflare_ip
  cloudflare_ip=$(get_cloudflare_ip "$dns_name")

  echo "$dns_name 的IP解析需要修改为 $local_ip ,当前为 $cloudflare_ip"

  # 判断本地 IP 是否与 Cloudflare 上的 IP 不一致
  if ! echo "$cloudflare_ip" | grep -q "$local_ip"; then
    echo "本地 IP 不在 Cloudflare的 $dns_name 中,更新 Cloudflare DNS 记录"
    update_cloudflare "$dns_name" "$dns_record_id" "$local_ip"
  else
    echo "$dns_name 的本地 IP 存在于 Cloudflare 中,无需更新"
  fi
}

# 主循环,每60秒执行一次
while true; do
  # 获取本地网卡的 IP 地址
  local_ip=$(get_local_ip)

  echo "Local IP: $local_ip $(date +%Y%m%d%H%M%S)"

  # 更新第一个域名的 IP
  update_domain_ip "$DNS_NAME_1" "$DNS_RECORD_ID_1" "$local_ip"

  # 更新第二个域名的 IP
  update_domain_ip "$DNS_NAME_2" "$DNS_RECORD_ID_2" "$local_ip"

  # 每60秒执行一次
  sleep 60
done


设置开机后台自启动

参考链接:

https://www.right.com.cn/forum/thread-8265952-1-1.html

auto_ssh 法

在ax6000官方固件开启远程登录时引入的auto_ssh.sh脚本中,加入服务启动命令,编辑后的文件位置在:/data/auto_ssh/auto_ssh.sh
实际操作示例详见:https://www.right.com.cn/forum/thread-8264027-1-1.html

vi  /data/auto_ssh/auto_ssh.sh

在末尾添加

XXXX

XXXX

sh /etc/config/ddns_self/ddns.sh >> /etc/config/ddns_self/log 2>&1 &

注意这里是将日志输出到了/etc/config/ddns_self/log目录下

因此需要定期清理该文件即可

配置自动清理

crontab -e

添加最后一行表达式

*/5 * * * * command -v sp_check.sh >/dev/null && sp_check.sh
*/2 * * * * command -v logrotate >/dev/null && logrotate /etc/logrotate.conf
*/15 * * * * /usr/sbin/ntpsetclock 60 log >/dev/null 2>&1
* * * * * /usr/sbin/startscene_crontab.lua `/bin/date "+%u %H:%M"`
1 3,4,5 * * * /usr/sbin/otapredownload >/dev/null 2>&1
*/3 * * * * /usr/sbin/mobile_accel.sh check >/dev/null 2>&1



。。。。

0 */12 * * * echo -n > /etc/config/ddns_self/log

完成后重启reboot会发现域名的IP会随着更新

最后修改:2025 年 02 月 19 日
反正没人给,你也爱给不给吧。