一次作死折腾路由器的经历

差点就成砖了..

Posted by kevin on December 26, 2019

preface

今天晚上,设置了一下路由器的防火墙,本来想添加一些规则让实验室的网络变得更加有趣,最后炸了,差点路由器都登不进去。。

我来简单重现一下事情的经过,在网上看到一个路由器修改 iptables 的教程,觉得很有意思,便想着用自己的路由器也来搞一个,添加点自定义规则来玩玩

有关 iptables 的具体原理我还没有去看,但这是 Linux 下常用的防火墙设置,在以后应该会补充相关的底层原理,总之,我的第一个想法是给局域网中的某些主机屏蔽一些域名不让其访问,比如很多人蹭我的网,所以为了保证网络质量我就想屏蔽他们使用 YouTube 等视频网站,这个在网上找到了现成的规则,直接就拿来用了(好像也也没什么卵用,只对百度试过,国外网站好像过滤不了)

iptables -I FORWARD  -s 192.168.1.144 -d www.baidu.com -j DROP

这一行规则就让我的 iPad(局域网 ip 地址为 192.168.1.144)不能访问百度,因为收到对百度的访问请求就会直接把请求给 DROP 掉,可以用这行规则进行域名屏蔽

甚至还可以直接让某个 ip 直接断网,也就是将他发出的所有请求都给丢弃

iptables -I INPUT -s 192.168.1.144  -j DROP

然后我又想玩得更有趣一点,就是不管局域网主机输入了什么网址,都会将请求转发到我们想要的一个网页上,这个同样也在网上找到了现成的规则,但不知道为什么脑子抽了,然后我就拿我的路由器后台登录地址来做实验,这条规则的意思就是只要局域网有主机登陆了 192.168.1.1 这个网址就会跳转到 www.google.com ,将这条规则添加进去,然后重启防火墙,准备试验一下

iptables -t nat -A PREROUTING -d 192.168.1.1 -j DNAT --to-destination www.google.com
iptables -t nat -A POSTROUTING -d www.google.com -j SNAT --to-source 192.168.1.1

然后我就凉了,应该是这条规则出了问题,最后的结果就是我再也登不上路由器的管理面板了,然后我就想赶紧把这条规则给删除了,好在我的终端是通过 ssh 连接着路由器的,然后就上网找到了自定义的防火墙的配置文件的保存位置,叫做 /etc/firewall.user ,编辑器打开,赶紧把刚刚新加的防火墙规则给去除了

[email protected]:~# vim /etc/firewall.user                                                   # This file is interpreted as shell script.                                               # Put your custom iptables rules here, they will                                         # be executed with each firewall (re-)start.                                             # iptables -I INPUT -s 192.168.1.175  -j DROP #ok                                         
# 省略十几条。。。

然后再更新一下防火墙

[email protected]:~# /etc/init.d/firewall restart

哦豁,还是没卵用,登不上,这下该怎么办啊,那这样的话我就再也管理不了路由器了,还有最后一招,我想着修改路由器的 ip 地址,这样应该就能绕过新设定的规则了。网上也搜索到了相关的代码,如下

[email protected]:~# uci set network.lan.ipaddr=192.168.2.2
[email protected]penWrt:~# uci commit network
[email protected]:~# ifup lan

输入完上面的几行代码之后,终端仿佛已经卡死了,动也不动,然后网络也断了,这时我就重启了路由器,过了大概有四五分钟吧,显示有网络了,然后我就用新的 ip 地址 192.168.2.2 登陆 web 端的管理面板,终于看到了熟悉的画面,赶紧把之前的防火墙规则给删了然后再将 ip 修改为之前的 ip ,这一步就可以直接在 web 面板进行了,因为之前是 web 登不了所以我们才去终端修改的

其实这一天我还不止折腾了防火墙,还折腾了里面的 dnsmasq ,但都没怎么成功,因为对他们的原理并不是很熟,所以感觉理论真的很重要,工具千千万,懂得背后的原理才是王道,以后想折腾还是得先把理论给学好

reference

https://www.jianshu.com/p/7f91b05fa8c6

https://yejian.co/change-openwrt-default-ip-address/