|
|
本帖最后由 gknn 于 2026-6-25 16:24 编辑
HG5582A拨号作为主路由,但是默认ipv6防火墙是一刀切的入站拒绝,如果需要放行内网单个ipv6
我们可以让猫使用域名解析获得所需放行的ipv6地址
触发方式为每次猫开机后,登录telnet敲命令放行
效果比很多家用硬路由的防火墙效果还好
以下脚本需要在telnet后,su提权后linux内核模式运行
友情链接:
hg5582a开启telent方法:hg5582a/hg5382a固化telnet关闭插件等-光猫/adsl/cable无线一体机-恩山无线论坛 - Powered by Discuz!
- cat > /usr/local/ct/fw_watchdog.sh << 'EOF'
- #!/bin/sh
- DOMAIN="<font color="#ff0000">w12345.top</font>" <b><font color="#ff0000">
- CHECK_INTERVAL=30
- LOG_FILE="/tmp/fw_watchdog.log"
- echo "$(date): Watchdog started" >> $LOG_FILE
- while true; do
- CURRENT_IP=$(nslookup $DOMAIN | grep "Address:" | tail -1 | awk '{print $2}')
- if [ -n "$CURRENT_IP" ] && echo "$CURRENT_IP" | grep -q ":"; then
- OLD_IP_FILE="/tmp/domain_ip.txt"
- if [ -f "$OLD_IP_FILE" ]; then
- OLD_IP=$(cat "$OLD_IP_FILE")
- else
- OLD_IP=""
- fi
- # 检查规则是否存在
- RULE_EXISTS=$(ip6tables -L FORWARD -n | grep -c "ALLOW_<span style="color: rgb(255, 0, 0);">w12345</span>_top")<b><font color="#ff0000">
- if [ "$CURRENT_IP" != "$OLD_IP" ] || [ "$RULE_EXISTS" -eq 0 ]; then
- # === 删除所有旧规则(按行号从后往前删) ===
- # 获取所有带该注释的规则行号,按行号从大到小排序
- LINE_NUMBERS=$(ip6tables -L FORWARD -n --line-numbers | grep "ALLOW_whz888_top" | awk '{print $1}' | sort -rn)
- for LINE in $LINE_NUMBERS; do
- ip6tables -D FORWARD $LINE 2>/dev/null
- echo "$(date): Removed rule at line $LINE" >> $LOG_FILE
- done
- # 插入新规则
- ip6tables -I FORWARD 1 -d $CURRENT_IP -m comment --comment "ALLOW_<span style="color: rgb(255, 0, 0);">w12345</span>_top" -j ACCEPT<b><font color="#ff0000">
- echo "$CURRENT_IP" > "$OLD_IP_FILE"
- echo "$(date): Updated -> $CURRENT_IP" >> $LOG_FILE
- ip6tables-save > /usr/local/ct/ip6tables.rules
- fi
- fi
- sleep $CHECK_INTERVAL
- done
- <font size="2" style="">EOF</font>
复制代码 以下是脚本注释,跟上一段是一样的,只是下面这段带详细注释
- cat > /usr/local/ct/fw_watchdog.sh << 'EOF'
- #!/bin/sh
- # ============================================================
- # 动态 IPv6 防火墙规则更新脚本
- # 功能:定时解析域名,自动更新 ip6tables FORWARD 放行规则
- # 适用:光猫/路由器环境(/usr/local/ct 可写,/etc 只读)
- # ============================================================
- DOMAIN="your-domain.top" # 改成你的 DDNS 域名
- CHECK_INTERVAL=30 # 检查间隔(秒)
- LOG_FILE="/tmp/fw_watchdog.log" # 日志路径
- RULE_COMMENT="ALLOW_DYNAMIC_IPV6" # 规则注释(用于识别和清理)
- echo "$(date): Watchdog started for $DOMAIN" >> $LOG_FILE
- while true; do
- # 1. 解析域名获取当前 IPv6
- CURRENT_IP=$(nslookup $DOMAIN | grep "Address:" | tail -1 | awk '{print $2}')
- # 2. 校验是否为有效 IPv6
- if [ -n "$CURRENT_IP" ] && echo "$CURRENT_IP" | grep -q ":"; then
- # 3. 读取上次保存的 IP
- OLD_IP_FILE="/tmp/domain_ip.txt"
- if [ -f "$OLD_IP_FILE" ]; then
- OLD_IP=$(cat "$OLD_IP_FILE")
- else
- OLD_IP=""
- fi
- # 4. 检查防火墙规则是否存在
- RULE_EXISTS=$(ip6tables -L FORWARD -n | grep -c "$RULE_COMMENT")
- # 5. 如果 IP 变化 或 规则丢失,则更新
- if [ "$CURRENT_IP" != "$OLD_IP" ] || [ "$RULE_EXISTS" -eq 0 ]; then
- # 删除所有旧规则(按行号从后往前删,避免索引偏移)
- LINE_NUMBERS=$(ip6tables -L FORWARD -n --line-numbers | grep "$RULE_COMMENT" | awk '{print $1}' | sort -rn)
- for LINE in $LINE_NUMBERS; do
- ip6tables -D FORWARD $LINE 2>/dev/null
- echo "$(date): Removed old rule at line $LINE" >> $LOG_FILE
- done
- # 插入新规则(第 1 条,最高优先级)
- ip6tables -I FORWARD 1 -d $CURRENT_IP -m comment --comment "$RULE_COMMENT" -j ACCEPT
- # 保存新 IP 和规则
- echo "$CURRENT_IP" > "$OLD_IP_FILE"
- echo "$(date): Updated -> $CURRENT_IP" >> $LOG_FILE
- ip6tables-save > /usr/local/ct/ip6tables.rules
- fi
- fi
- sleep $CHECK_INTERVAL
- done
- EOF
复制代码
用法就是,第一段,直接粘贴到su后的命令窗口,改好自己内网设备域名后全选直接粘,如果粘错字段修改后再次粘就行了,自动覆盖
用法就是,第一段,直接粘贴到su后的命令窗口,改好自己内网设备域名后全选直接粘,如果粘错字段修改后再次粘就行了,自动覆盖
用法就是,第一段,直接粘贴到su后的命令窗口,改好自己内网设备域名后全选直接粘,如果粘错字段修改后再次粘就行了,自动覆盖
1,su后直接粘命令窗口进去,把域名改成内网自己的,脚本直接存到猫的可写分区了
2,首次创建脚本后需要提权- chmod +x /usr/local/ct/fw_watchdog.sh
复制代码
3,每次猫开机进su模式后手动敲这个,脚本就启动了,是的,手动挡,因为猫重启后必须保证不断连,所以手动启动脚本
- nohup /usr/local/ct/fw_watchdog.sh >> /tmp/fw_watchdog.log 2>&1 &
复制代码- ps | grep fw_watchdog | grep -v grep
复制代码
6,停止脚本命令
对了,在光猫里面看看域名与ip更新匹配了没有,使用nslookup
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|