飞牛NAS的IPv6防火墙放行持久化解决方案
引言
本文旨在分享一个通过飞牛OS(NAS)实现IPv6防火墙规则持久化的方法。由于光猫(路由器)通常不允许用户直接修改或保存防火墙规则,一旦重启或远程修改,之前的设置就会丢失。本文提出的方法利用飞牛OS的全天候服务器功能,通过定时任务模拟用户Telnet操作,从而实现IPv6防火墙规则的持久化。
解决方案步骤
步骤1:连接光猫Telnet并提升权限
- 获取光猫MAC地址:通常贴在光猫背面或通过电脑终端查询。
- 处理MAC地址:将MAC地址中的“-”去掉,全部转换为大写。
- 开启光猫Telnet服务:通过浏览器访问
http://192.168.1.1:8080/cgi-bin/telnetenable.cgi?telnetenable=1&key=处理后的MAC地址
,网页会显示“Telnet服务开启”字样。 - 连接光猫:使用命令行
telnet 192.168.1.1
并输入用户名和密码(默认为telnetadmin
,密码为FH-nE7jA%5m+处理后MAC后6位)。 - 提权:输入
su
并输入超级用户密码(默认为Fh@
+处理后MAC后6位)。
步骤2:定义IPv6防火墙放行规则
- 查看现有规则:使用命令
ip6tables -nvL --line-number
列出所有规则。 分析规则:根据需要添加放行规则。例如,放行飞牛桌面端口5666:
ip6tables -I FORWARD_FIREWALL 4 -p tcp --dport 5666 -j ACCEPT ip6tables -I FORWARD_FIREWALL 4 -d 240e:3a3:336f:aad1:130:b741:1282:9009 -p udp --dport 5666 -j ACCEPT
- 测试规则:通过手机流量测试能否连接到NAS,确保规则生效。
步骤3:保存现有规则和脚本
- 选择可写路径:例如
/usr/local/ct
。 - 保存规则:使用命令
ip6tables-save > /usr/local/ct/ip6tables/rules.v6
。 创建恢复脚本:创建文件
/usr/local/ct/ip6tables_restore.sh
并写入以下内容:#!/usr/bin/env bash sleep 20 ip6tables-restore < /usr/local/ct/ip6tables/rules.v6 echo "$(date): ip6tables_enable" >> /usr/local/ct/ip6tables_restore.log chmod +x /usr/local/ct/ip6tables_restore.sh
- 测试脚本:删除几个规则后运行脚本,检查规则是否恢复。
步骤4:创建模拟Telnet操作的脚本
- 安装Expect:如果未安装,先通过终端安装。
编写脚本:创建文件
telnet_restore.sh
并写入以下内容:#!/usr/bin/env bash # 开启光猫Telnet服务 curl_output=$(curl -s -w "%{http_code}" "http://192.168.1.1:8080/cgi-bin/telnetenable.cgi?telnetenable=1&key=7CC74A08E38C" -o /dev/null) # 使用Expect自动化Telnet会话 /usr/bin/expect <<EOF set timeout 30 log_user 1 # 显示完整交互过程 spawn telnet 192.168.1.1 expect { "Login:" { send_user " 连接成功,等待登录 " send "telnetadmin\r" } timeout { send_user " 连接超时,请检查网络 " exit 1 } eof { send_user " 连接被拒绝,Telnet可能未开启 " exit 1 } } # 登录流程 expect { "Password:" { send_user "用户名验证成功 " send "FH-nE7jA%5m08E38C\r" } timeout { send_user " 等待密码提示超时 " exit 1 } } # 简化流程:等待任意响应后直接提权 expect { timeout { send_user " 登录响应超时 " exit 1 } eof { send_user " 连接意外关闭 " exit 1 } "*" { # 匹配任何输出 send_user "检测到系统响应,开始提权 " } } # 直接尝试提权 send_user "步骤3: 尝试提权...\n" send "su\r" # 等待提权密码提示 expect { "Password:" { send_user "提权请求成功 " send "Fh@08E38C\r" } timeout { send_user " 等待提权密码提示超时 " exit 1 } } # 检查提权结果 expect { "#" { send_user "提权成功 " } "su: Authentication failure" { send_user " 提权失败,密码错误 " exit 1 } timeout { send_user " 提权超时 " exit 1 } } # 执行恢复脚本 send_user "步骤4: 尝试执行脚本...\n" send "/usr/local/ct/ip6tables_restore.sh\r" # 检查执行结果 expect { "#" { send_user "脚本执行完成 " } "not found" { send_user " 脚本不存在或路径错误 " exit 1 } "Permission denied" { send_user " 权限不足,无法执行脚本 " exit 1 } timeout { send_user " 脚本执行超时 " exit 1 } } # 退出 send_user "退出连接...\n" send "exit\r" expect eof EOF # 检查整体执行结果 exit_status=$? if [ $exit_status -eq 0 ]; then echo "所有操作成功完成 $(date)" else echo "执行过程中出错 (错误码: $exit_status) $(date)" fi
- 测试脚本:在电脑上编辑并保存脚本,然后在终端中测试。
步骤5:设置飞牛定时任务
- 使用1panel或其他工具设置定时任务:运行刚刚编写的脚本。
- 设置定时任务:在1panel中设置定时任务,运行脚本,确保脚本路径正确。
- 测试定时任务:点击测试,查看运行报告,确保任务成功执行。
总结
通过上述步骤,我们可以实现IPv6防火墙规则的持久化,而不受光猫重启或远程修改的影响。这种方法充分利用了飞牛OS的全天候服务器功能,通过模拟用户Telnet操作,确保了规则的持久性。此外,飞牛OS还提供了丰富的图形化管理方式,使得管理更加便捷。
评论已关闭