我已将 TP-Link 1043 路由器升级到 OpenWrt 14.07。一切都很完美,Wifi 和 LAN 已桥接,LAN 机器可以通过名称相互访问,我可以通过 SSH 进入路由器,路由器可以在界面上访问互联网pppoe-wan
。
不过,还有一个小问题。路由器不路由。无法从 LAN 访问互联网。但有一个有趣的例外:DNS 查找可以工作。
该/etc/config/firewall
文件包含以下部分:
config forwarding
option src 'lan'
option dest 'wan'
option mtu_fix '0'
但是当我列出 POSTROUTING 链时iptables
,什么也没有
# 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
瞧,互联网突然从 LAN 上工作了。但是为什么没有根据 UCI 配置添加 iptables 规则/et/config/firewall
?
更新2
我在 Web 界面上将修复后的 iptables 规则添加到自定义规则中。然后我检查了一下,它确实被插入到/etc/firewall.user
中包含的 中/etc/config/firewall
。但重启后,iptables 未列出该规则。而且 LAN 中没有互联网。似乎是 UCI 配置解析问题……
更新 3
事实证明我根本没有防火墙。我的防火墙/etc/config/firewall
完全被忽略了。只是缺乏过滤规则很难被注意到。
答案1
仅当为 OpenWrt 配置了输出时,它才会设置伪装zone
。
例如:
config zone
option name 'wan'
option masq '1'
#...everything else
或者在网页界面:
答案2
UCI 配置解析似乎有问题。通过在以下位置添加一行可暂时修复此问题/etc/rc.local
:
iptables -t nat -A POSTROUTING -o pppoe-wan -j MASQUERADE