我已经将我的TP-Link 1043路由器升级到了OpenWrt 14.07。 一切都很完美,Wifi和LAN是桥接的,局域网里的机器可以通过名字互相访问,我可以通过SSH连接到路由器,路由器可以通过pppoe-wan接口访问互联网。
这是一个小问题,但。 路由器不路由。 互联网不能从局域网访问。 有一个有趣的例外:DNS查找工作。
/etc/config/firewall文件包含以下部分:
config forwarding option src 'lan' option dest 'wan' option mtu_fix '0'
但是当我列出iptables的POSTROUTING链时,什么也没有
# iptables -L POSTROUTING iptables: No chain/target/match by that name. # iptables -t nat -L POSTROUTING Chain POSTROUTING (policy ACCEPT) target prot opt source destination
所以我尝试手动添加伪装,这似乎工作:
# iptables -t nat -A POSTROUTING -o pppoe-wan -j MASQUERADE # iptables -t nat -L POSTROUTING Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- anywhere anywhere
瞧,互联网突然从局域网工作。 但为什么iptables规则不是基于/et/config/firewall的UCIconfiguration添加的?
我在Web界面的自定义规则中添加了修复iptables规则。 然后我检查了一下,它确实插入到/etc/config/firewall /etc/firewall.user中。 但重启之后,这个规则并没有被iptables列出。 而在局域网中没有互联网。 看起来像一个UCIconfigurationparsing问题…
事实certificate,我根本没有防火墙。 我的/etc/config/firewall被完全忽略。 只是缺乏过滤规则很难注意到。
如果输出zone被configuration,伪装只能由OpenWrt设置。
例如:
config zone option name 'wan' option masq '1' #...everything else
或者在networking界面中:

UCIconfigurationparsing似乎被打破。 通过向/etc/rc.local添加一行来临时修复问题:
iptables -t nat -A POSTROUTING -o pppoe-wan -j MASQUERADE