标签归档:openwrt

旁路由自定义防火墙规则

看到 flippy 有说 N1 做旁路由的话不要忘了加自定义防火墙规则:
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

先解释一下这个规则:iptables 修改 NAT 表,使经过 eth0 的网卡的流量的源 IP 伪装成 eth0 的 IP,而且是动态伪装(直接读取 eth0 的 IP 地址)

为什么要这么做:
一般小伙伴的 N1 只配置了一个 LAN 口,WAN 口是没有使用,或者直接把 WAN 口删了,这个时候 N1 作为辅助网关,LAN 口负责把数据转发给主路由网关,默认是不会修改你的源 IP 的。



转发过程讲解:
手机(192.168.0.4)向外发一个包,先发到辅助网关N1(192.168.0.2),辅助网关并没有修改这个包的源地址(192.168.0.4),这个包由N1转发给主路由(192.168.0.1)再到外网;回应的包回来的时候,到了主路由,主路由一查 NAT 表,发现是手机(192.168.0.4)的,就直接发给手机了,根本不经过N1。

这个时候是可以上网的(不能留学),但是这样会导致很多功能无法使用,比如说去广告,回来的包都不经过N1,怎么去广告呢?科学留学也成了问题了,回来的包不经过N1,谁去给你解密呢???所以需要加一句:iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE,把去程包的源IP改为N1的IP,这样回程包先发给N1,N1完成了一系列不可描述的功能后,N1再根据NAT表,发送给相应设备。

上面这句话是我之前的解释,经过我证明,说法错误。原因是去广告和科学留学会正向代理设备,本身就会进行SNAT(源地址转换),所以不存在发回来的包找不到源设备的问题,是可以正常去广告和科学留学的。貌似可不加了,是吗?请继续观帖。

N1作为旁路时,推荐加上iptables规则,原因如下:
1. 不加的话,主路由会错误显示N1的IP,N1替谁转发了流量,主路由就会显示为谁的IP,这不逼死强迫症吗?
2. flippy帖子里有说,N1作为旁路由时,Padavan固件路由作为主路由时,开启硬加速的情况下,可能会存在微信或者QQ图片打不开等问题,其中具体原因可能就在于N1没有做SNAT,导致去广告或者留学白名单(如微信、QQ)回城不经过N1。
3. 加上无害,反而可以解决一些奇奇怪怪的问题。


有没有可以不用加的方法?
方法是有的,添加一个WAN口,关闭LAN口桥接,WAN口和LAN口共用eth0,WAN口发出数据的时候,会自动做SNAT,回来的包会先回到N1,再返给设备。

总结:什么时候需要设置 iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE ?
需要设置情况:
1. 主路由开DHCP(未指向旁路由网关),旁路由关DHCP,旁路由只有LAN口工作,其他设备需设置静态网关为旁路由,需要设置。
2. 主路由开DHCP(未指向旁路由网关),旁路由开DHCP(强制模式开),旁路由只有LAN口工作,其他设备通过强制DHCP获取旁路由网关,需要设置。
3. 主路由开DHCP(指向旁路由网关),旁路由关DHCP,旁路由只有LAN口工作,需要设置。
4. 主路由关DHCP,旁路由开DHCP,旁路由只有LAN口工作,需要设置。
不需要设置的情况:
1. 旁路由WAN LAN共用eth0,不用设置。
2. 单臂路由情况,N1作为拨号路由(有拨号就有WAN口),不用设置。


终极记忆口诀:没wan就加!