FreshTomato 路由器固件常见配置以及踩坑记录

本文首发于只抄博客,欢迎点击原文链接了解更多内容。

前言

在上一篇文章《网件 R6400 梅林固件恢复官方固件后刷入 FreshTomato》中,我将网件 R6400 刷入了 FreshTomato 固件,目前已经使用了大半个月了,稳定性比起 380.70_0-X7.9.1 版本的梅林固件要好很多,没有再出现过掉线断网了,基础功能上也比官方固件要丰富。

不过关于 FreshTomato 固件的配置,还是有一些坑的,在配置完成之后,功能上可以比肩梅林,稳定性上比肩官方固件。下面先来复习一下上一次已经提过的访问光猫和跑不满带宽的问题。

访问光猫

PPPoE 拨号勾选 Use DHCP,同时不要关闭光猫的 DHCP,这样可以直接访问光猫的后台,需要配置光猫的时候比较方便。

硬件加速

由于 FreshTomato 有 QoS 和限速功能并且默认开启,而这两个功能和硬件加速会冲突,导致千兆路由器只能跑 300M 出头,如果你是 500M 及以上的宽带,建议将 QoS 和 限速功能关闭,这样才能跑满带宽。

IPv6

FreshTomato 关于 IPv6 的设置比较分散,首先要在 Basic -> IPv6 中选择对应的 IPv6 Service Type,一般路由器拨号的选择 DHCPv6 with Prefix Delegation

然后点击页面下方的 Notes 中的 DHCP/DNS 超链接跳转到 Advanced -> DHCP/DNS/TFTP,由于安卓不支持有状态 IPv6,个人习惯是只勾选 SLAAC,同时勾选 Fast RA mode,当 IPv6 前缀变动时,可以及时的获取到新的公网 IPv6 地址

但是关于 IPv6 前缀变动,FreshTomato 貌似有个小 bug ?

正常情况下在首页通过 Disconnect 和 Connect 重新拨号,造成 IPv6 前缀变动后,会自动清理旧的前缀,局域网设备能够正确获取到新的公网 IPv6,并且旧的 IPv6 地址也被设置成 0s 了,到此为止一切正常。

如果直接在 Basic -> Network 中修改配置并保存等意外情况下导致 IPv6 前缀变动后,FreshTomato 并不会清理旧的前缀,局域网的设备会同时拥有旧的 IPv6 地址和新的 IPv6 地址,而此时旧地址已经无法使用会造成 IPv6 断网。

通过 SSH 连接到路由器,查看 /etc/dnsmasq.conf 文件可以看到默认租期是 172800s,也就是说只有当 2 天后旧的 IPv6 地址过期,才能够正常使用 IPv6 上网。

conf 复制代码
ra-param=br*, mtu:1492, 15, 600
dhcp-range=::, constructor:br*, ra-names, ra-stateless, 64, 172800s

局域网内的 Linux 设备可以通过以下命令强制清除所有 IPv6 地址并重新获取新的地址来恢复 IPv6

sh 复制代码
ip -6 addr flush dev eth0 && systemctl restart NetworkManager

有没有什么更好的解决方法呢?在刚才的设置页面继续往下翻,可以看到 Custom configuration ,我们可以通过这里的设置覆盖掉 FreshTomato 默认的设置。租期最低可以填 120s,我这里参考原来梅林的习惯填写的 600s。这样即便发生意外导致旧地址没被清理,最长 10 分钟就可以恢复。不知道有没有更完美的解决方案,欢迎评论区分享一下。

直接修改 /etc/dnsmasq.conf 文件是不生效的

sh 复制代码
ra-param=br*, mtu:1492, 15, 600
dhcp-range=::, constructor:br*, ra-names, ra-stateless, 64, 600s

IPv6 防火墙

IPv6 防火墙的设置和梅林的写法类似,可以直接参考《梅林、Padavan 和 OpenWrt 设置 IPv6 防火墙并开放指定端口》中梅林的写法,在 Port Forwarding -> Basic IPv6 中放行需要的目标地址及端口

LED 灯

用过梅林的应该都知道,网件 R 系列几款路由器刷完梅林后长按 WPS 键,可以把所有的 LED 指示灯关闭,而 FreshTomato 默认是没有这功能的,并且在后台界面中也不能设置关闭所有 LED 指示灯。

但在设置界面的 Notes 中得知,LED 灯可以直接通过命令进行控制,而 FreshTomato 又提供了长按 WPS 键执行自定义脚本的功能,我们可以通过自定义脚本的形式来控制 LED 灯的开关。

Other hints - LED function and blink support is router dependent. Check command led [LED_NAME/help] [on/off] for advanced LED control, see Web Shell.

首先在 Administration -> Scripts 的 Init 中填写以下命令,通过 ledstatus.txt 文件来记录下当前 LED 灯状态

sh 复制代码
touch /tmp/ledstatus.txt
echo "on" > /tmp/ledstatus.txt

然后来到 Administration -> Buttons/LED 中,将下面的命令填写到 Custom Script 中,并且在上面选择 Run Custom Script

sh 复制代码
read -r LEDS <  /tmp/ledstatus.txt
if [ "$LEDS" = "off" ]
then
  # 开灯:
  led wlan on
  led 5g on
  # led aoss on
  led bridge on
  echo "on" > /tmp/ledstatus.txt

else
  # 关灯:
  # 无线
  led wlan off
  led 5g off
  led aoss off
  # 电源
  led diag off
  # WPS
  led dmz off
  # 网络
  led bridge off
  echo "off" > /tmp/ledstatus.txt
fi

这样设置之后,默认开机 LED 灯会正常亮起,长按 WPS 键后会关闭 LED 灯,再次长按则又亮起,具体需要开关哪些灯可以根据注释修改。如果你需要定时开关 LED 灯,也可以将上面的命令修改之后,填到 Scheduler 中定时执行。

相关推荐
Double Point22 分钟前
(三十三)Dart 中使用 Pub 包管理系统与 HTTP 请求教程
网络·网络协议·http
大丈夫立于天地间1 天前
ISIS协议中的数据库同步
运维·网络·信息与通信
Dream Algorithm1 天前
路由器的 WAN(广域网)口 和 LAN(局域网)口
网络·智能路由器
IT猿手1 天前
基于CNN-LSTM的深度Q网络(Deep Q-Network,DQN)求解移动机器人路径规划,MATLAB代码
网络·cnn·lstm
吴盐煮_1 天前
使用UDP建立连接,会存在什么问题?
网络·网络协议·udp
hyshhhh1 天前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
Hellc0071 天前
轮询、WebSocket 和 SSE:实时通信技术全面指南(含C#实现)
网络
xujiangyan_1 天前
nginx的反向代理和负载均衡
服务器·网络·nginx
GalaxyPokemon1 天前
Muduo网络库实现 [十] - EventLoopThreadPool模块
linux·服务器·网络·c++