脚本如何修改网关DNS

wen 实用脚本 22

本文目录导读:

脚本如何修改网关DNS

  1. 方式一:通过图形界面脚本(模拟手动点击,适合普通家用路由器)
  2. 方式二:通过SSH命令行(适合OpenWrt/Linux网关)
  3. 方式三:通过路由器API(华硕/Merlin/OpenWrt)
  4. 方式四:静态修改(自定义脚本)
  5. 常见成功经验
  6. 注意事项

要修改网关的DNS,通常有两种主要方式:通过路由器的Web管理界面通过SSH命令行(如果网关是Linux/OpenWrt系统)。

以下是具体步骤:

通过图形界面脚本(模拟手动点击,适合普通家用路由器)

大多数家用路由器没有直接的API,但可以使用 Playwright/Selenium(自动化浏览器)写脚本来模拟操作:

步骤:

  1. 登录路由器后台(如 168.1.1)。
  2. 找到“网络设置” -> “DHCP服务器”或“WAN口设置”。
  3. 修改DNS字段。
  4. 保存/应用。

示例(Python + Selenium):

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 启动浏览器
driver = webdriver.Chrome()
# 登录路由器
driver.get("http://192.168.1.1")
driver.find_element(By.ID, "username").send_keys("admin")
driver.find_element(By.ID, "password").send_keys("password")
driver.find_element(By.ID, "login").click()
time.sleep(2)
# 导航到DHCP设置(路径取决于品牌,可能需要手动检查元素ID)
driver.get("http://192.168.1.1/network/dhcp")
# 修改DNS
dns_input = driver.find_element(By.ID, "dns1")
dns_input.clear()
dns_input.send_keys("114.114.114.114")
# 保存
driver.find_element(By.ID, "save").click()
driver.quit()

缺点: 不同品牌路由器页面元素ID不同,脚本需针对特定固件修改。


通过SSH命令行(适合OpenWrt/Linux网关)

如果你的网关跑的是Linux发行版(如OpenWrt、Debian、Ubuntu),可以直接通过SSH执行命令。

一次性临时修改(重启后失效)

# 修改 /etc/resolv.conf
sudo sed -i 's/nameserver .*/nameserver 114.114.114.114/' /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf

永久修改DNS(使用resolvectlnetplan

使用 resolvectl(systemd-resolved):

# 设置全局DNS
sudo resolvectl dns eth0 114.114.114.114 8.8.8.8
# 如果使用resolvconf(Debian/Ubuntu传统方式)
sudo sed -i 's/dns-nameservers.*/dns-nameservers 114.114.114.114/' /etc/network/interfaces

使用 uci(OpenWrt专用):

# SSH到OpenWrt网关
ssh root@192.168.1.1
# 修改DHCP分配的DNS
uci set dhcp.@dnsmasq[0].server='114.114.114.114'
uci commit dhcp
# 如果是WAN口DNS
uci set network.wan.dns='114.114.114.114 8.8.8.8'
uci commit network
# 重启网络服务
/etc/init.d/network reload

编写自动化脚本(SSH远程执行)

#!/bin/bash
# 远程修改OpenWrt网关DNS
ssh root@192.168.1.1 "uci set network.wan.dns='114.114.114.114'; uci commit network; /etc/init.d/network reload"

通过路由器API(华硕/Merlin/OpenWrt)

部分路由器支持HTTP API或REST API。

华硕路由器(Merlin固件):

# 使用curl通过web接口
curl -k -H "Authorization: Basic $(echo -n admin:password | base64)" \
     "http://192.168.1.1/apply.cgi?action_mode=apply&dns1_x=114.114.114.114&dns2_x=8.8.8.8"

MikroTik RouterOS(API):

# 通过SSH修改
/system dns set servers=114.114.114.114,8.8.8.8

静态修改(自定义脚本)

如果你能直接物理访问网关或拥有root权限:

创建 /usr/local/bin/set_dns.sh

#!/bin/bash
# 修改主DNS
echo "nameserver 1.1.1.1" > /etc/resolv.conf
echo "nameserver 9.9.9.9" >> /etc/resolv.conf
chattr +i /etc/resolv.conf  # 防止被覆盖(谨慎使用)

通过cron定时恢复DNS:

# 每5分钟检查并恢复DNS
*/5 * * * * sudo /usr/local/bin/set_dns.sh

常见成功经验

场景 推荐方法 示例工具
家用TP-Link/小米 浏览器自动化 Playwright/Puppeteer
公司网关OpenWrt SSH + UCI命令 ssh + uci set
树莓派作为网关 SSH + resolvectl systemd-resolved
华硕路由Asuswrt-Merlin Web API curl
MikroTik SSH + CLI ssh + /system dns

注意事项

  1. DNS回环风险:不要把网关指向自己(如 0.0.1),除非你运行了本地DNS服务。
  2. 持久化/etc/resolv.conf 经常被网络管理器覆盖,推荐用 resolvectlnetplan
  3. 备份:修改前先 cp /etc/config/dhcp /etc/config/dhcp.bak
  4. 重启服务:修改后需要重启 dnsmasqnetwork

如果方便,可以告诉我你的网关是什么系统(小米路由器”、“Ubuntu Server服务器”),我可以提供更精确的脚本。

抱歉,评论功能暂时关闭!