如果说路由规则还能讲讲,iptables防火墙规则就彻底没法讲。简直是千变万化无所不能。下面就简单说一下,对于新增的tun0设备如何设定防火墙规则。

----------config/network----------
config 'interface' 'tun'
option 'ifname' 'tun+'
option 'proto' 'none'
**

----------config/firewall----------
config 'zone'
option 'name' 'tun'
option 'input' 'ACCEPT'
option 'output' 'ACCEPT'
option 'forward' 'REJECT'
config 'forwarding'
option 'src' 'lan'
option 'dest' 'tun'
option 'mtu\_fix' '0'
config 'forwarding'
option 'src' 'tun'
option 'dest' 'lan'
option 'mtu\_fix' '0'

好了,新增了一个网口,叫做tun,处理所有tun+(就是任何tun设备)的吞吐。默认规则是可以收发,拒绝转发。转发规则是可以和lan互相转发。

/etc/init.d/network restart
/etc/init.d/firewall restart

然后你看看你的配置是否正确。

iptables -L -v

另外,这个配置方法有个bug。由于你的网口是tun+,所以在启动时,无法自动启用这个接口。在路由器重启后必须/etc/init.d/network restart才能工作。对我来说,每次路由器重启后都是手工开启openvpn的,问题不大。但是对于某些人就比较麻烦。对此推荐这些人直接修改/etc/firewall.user,直接加入以下指令。

iptables -I INPUT -i tun+ -j ACCEPT iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I FORWARD -i tun+ -j ACCEPT iptables -I FORWARD -o tun+ -j ACCEPT

使用interface配置的最终效果也差不多,不过比较简单整齐好理解。