openWRT网关解决pptp vpn穿透NAT的方法

使用openwrt做网关路由器,会存在内网windows客户端 PPTP拨号无法连接外网pptp服务器的问题!错误号:619!
PPTP方式的VPN使用了GRE协议,这个协议跟TCP/UDP是同一级的协议。因为GRE协议没有端口的概念,LINUX不能像TCP/UDP那样IP伪装。所以,LINUX网关后面的pptp vpn客户机连接vpn时总会遇见这种那种的问题。
也就是所谓
pptp pass through
PPTP VPN协议 NAT穿透性问题

方法:
1、确保安装以下几个ipk包: kmod-gre kmod-ipt-conntrack-extra kmod-ipt-nat-extra iptables-mod-conntrack-extra

2、防火墙添加以下规则(防火墙默认开放所有端口):
vi /etc/firewall.user:
iptables -t nat -I PREROUTING -p gre -j DNAT

意思是将所有的GRE包转发到pptp client IP 。注意:这个规则在重启防火墙后要过一段时间(2-3分钟)才起作用!

按照openwrt wiki上说的,安装kmod-ipt-nat-extra,可以解决内网多pptp客户端连接问题