终于知道VPN经常连不上的原因了_KylinHuang_新浪博客

搭建的PPTP的VPN在公司连经常报619错误,花费了我很多时间去解决。

但是经常是一会好一会不好,看log之看到是超时。今天才知道原来是网关iptables的问题。

PPTP方式的VPN使用了GRE协议,这个协议跟TCP/UDP是同一级的协议。因为GRE协议没有端口的概念,LINUX不能像TCP/UDP那样IP伪装。所以,LINUX网关后面的pptp

vpn客户机连接vpn时总会遇见这种那种的问题。

所以,当只有单个客户机通过linux网关连接VPN的时候,最简单的办法是用iptables把所有GRE协议的包转发给客户机。比如客户机的ip是192.168.0.2,iptables命令是

iptables -t nat -I PREROUTING -p gre -j DNAT –to-destination

192.168.0.2

上面的命令感觉很奇怪,当这个规则输入了,即使立刻删除,也依旧生效,一直过了好久才断掉。

当然,如果客户机连接的vpn ip地址互不相同,还可以根据源ip地址DNAT。但是,当多台机器要连接相同的pptp

vpn服务器时,问题就出现了,简单的DNAT规则并不能生效,因为他们都是GRE协议。唯一能分辨的就只有GRE包里面的Class

ID。这个ID在默认的linux防火墙上并没有得到支持。

为了方便,打算用L2TP的或者SSTP的VPN试试吧。。

来源URL:http://blog.sina.com.cn/s/blog_6dc6b05d0100r3i5.html