显示标签为“vpn”的博文。显示所有博文
显示标签为“vpn”的博文。显示所有博文

2013年4月24日星期三

centos 6.2 vpn安装教程,centos6.2一键vpn安装包(灰常好,感谢原作者啊)



故事发生时间: 2012-10-03 / 故事分类: 网站相关 / 4个小故事 我也要讲故事
最近把以前使用的centos 5.6换成了6.2的版本,以前使用的vpn安装包安装几次都失败,可能是不兼容新版的系统了.于是在网上找到了这个适用于centos 6.2的一键vpn安装包.特此送上给有相同需求的朋友.
centos 6.2 vpn安装教程,centos6.2一键vpn安装包
(一直本教程仅仅适用于Xen或KVM VPS,不适用于Openvz VPS):
第一步: 下载vpn(CentOS6专用)一键安装包
#wget http://www.hi-vps.com/shell/vpn_centos6.sh
#chmod a+x vpn_centos6.sh
第二部: 运行一键安装包
#bash vpn_centos6.sh
会有三个选择:
1. 安装VPN服务
2. 修复VPN
3. 添加VPN用户
首先输入1,回车,VPS开始安装VPN服务(VPN服务安装完毕后会默认生成一个用户名为vpn,密码为随机数的用户来。)
此外需要添加新的VPN用户时,作如下操作,
#bash vpn_centos6.sh
然后选择3,然后输入用户名和密码,OK
4. 修复VPN服务
如果VPN拨号发生错误,可以试着修复VPN,然后重启VPS
#bash vpn_centos6.sh
选择2,然后reboot

2013年3月5日星期二

如何用 Debian / Ubuntu 服务器上架设 PPTP VPN服务器

如果你有一台linux主机,通过putty.exe 或苹果电脑的teminal用SSH登录到主机后要用文本编辑器,若是上传下载编辑好的配置文件就太麻烦了。 我先简单介绍一下VI编辑器的用法,学会VI了就不且上传下载编辑好的配置文件了:

vi /etc/ilovezola.conf 这是进入编辑ilovezola.conf的模式,然后hjkl四个键是方向键,分别是左下上右,按字母x可删除一个字符。按a进入插入模式,hjkl就不能当方向键用了。退出插入模式按ESC键,保存文件输入命令冒号加字母:w 退出输入命令:q 退出并保存就是 :wq
有了这些基础就可以安装PPTP VPN服务器了。下面绿色的字就可以复制到命令行里执行的,蓝色的字是需要你对比或复制到文件中的,懒人办事效率高,复制吧,不会错的。
先登录你的主机:
ssh root@fuckgfw.zuola.com
vi /etc/apt/sources.list
然后删除所有deb前面的#号 ,你按照这里操作就行,我直接引用,这不算抄袭:
接着用下面的命令更新你的软件包数据库
apt-get update
现在我们可以正式安装VPN server了。这里我们选择pptp(vpn 协议的一种),因为简单,一条命令搞定。剩下的无非是一些配置。
apt-get install pptpd
pptpd安装完成后,编辑这个文件,
vi /etc/pptpd.conf
去掉下面两行的注释或者直接添加这两行(在文件的最后).这一步是配置ip地址的范围。
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

然后在编辑这个文件,
vi /etc/ppp/chap-secrets
在这个文件中添加vpn用户,按照下面的格式,每个用户一行。
username pptpd password *
fuck * gfw *
zhoushuguang pptpd fuckgfw *

为了让你的用户连上VPN后能够正常地解析域名,我们需要手动设置DNS. vi /etc/ppp/options,找到ms-dns这一项,设置你的DNS.这里我推荐的是Google 最近发布的Public DNS,原因是因为好记。
ms-dns 8.8.8.8
ms-dns 8.8.4.4

vi /etc/sysctl.conf文件,找到"net.ipv4.ip_forward=1"这一行,去掉前面的注释。
net.ipv4.ip_forward=1
运行下面的命令让配置生效。
sysctl -p
重启pptpd服务
/etc/init.d/pptpd restart
最后开启iptables转发
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
ok,安装完毕。
附:使用PPTP VPN的方法:
  1. 如何在 Windows XP 中配置虚拟专用网络 (VPN) 连接http://support.microsoft.com/kb/314076/zh-cn
  2. How to configure a connection to a virtual private network (VPN) in Windows XPhttp://support.microsoft.com/kb/314076/en
  3. iOS:设置 VPN http://support.apple.com/kb/HT1424?viewlocale=zh_CN
  4. iOS: Setting up VPN http://support.apple.com/kb/HT1424?viewlocale=en_US
  5. Mac OS X 10.6 Help 建立一个到虚拟专用网络的连接http://docs.info.apple.com/article.html?path=Mac/10.6/zh/9010.html
  6. 设定高级 VPN 选项 http://docs.info.apple.com/article.html?path=Mac/10.6/zh/11941.html
  7. Ubuntu下使用VPN http://wiki.ubuntu.org.cn/如何使用UbuntuVPN
  8. Installing personalVPN-PPTP on Android Mobile Phonehttp://wiki.witopia.net/wiki/Installing_personalVPN-PPTP_on_Android_Mobile_Phone

2013年2月24日星期日

在CentOS下安装PPTP的VPN

最近deepvps买了个基于xen的VPS玩玩,安装LNMP没啥意思。国内网络环境不好,干脆安装个VPN试试。 
VPN常用有两种,一种是openvpn,另一种PPTP。前者开源跨平台功能强大,后者简单方便Windows下无需安装客户端。而且从安装上看,PPTP比openvpn简单一点,所以决定安装这个试试看。 
这里罗嗦一下VPS吧,常见也两种,一种是基于openvz,另一种基于xen的。区别不多说了,自己问google吧。这里要说的是openvz的绝大多数不能安装PPTP,而xen的没有限制,两个都可以。 
以下所有命令我都加了下划线,即加下划线的一定是在类似-bash-3.2#的提示符下输入。 
SSH登陆VPS,我的系统是64的CentOS 5.4,绝大多数VPS都提供CentOS系统供选择。可以使用这个命令查询:cat /etc/issue 
检查内核是否包含mppe,基本上CentOS都有的,输入这个命令,如果是ok就可以:modprobe ppp-compress-18 && echo ok 
安装PPTP需要ppp和iptables这两个软件支持,这里用yum来安装,输入这个命令:yum install -y ppp iptables 
 
然后进入tmp目录,需要把pptp软件下载回来,用这个命令:cd /tmp 
去poptop官方网站,如果你和我系统一样,直接下载rpm包:wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm
 
×××如果上面命令无效,安装wget吧:yum install -y wget 
接下来安装刚刚下载回来的rpm包,输入命令:rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm 
 
×××如果上面命令无效,安装perl吧:yum install -y perl 
接下来我们开始配置PPTP了,需要用到linux下的vi命令,如果不熟悉建议先google一下。 
×××提示一下,编辑完成后按Esc键,然后输入:wq即可保存并退出。 
输入vi /etc/ppp/options.pptpd开始编辑,输入以下内容: 
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
ms-dns 208.67.222.222
ms-dns 208.67.220.220 
最后两行是dns服务器地址,这里用opendns,你也可以用主机商的dns。编辑完成后保存退出。 
输入vi /etc/pptpd.conf开始编辑,输入以下内容: 
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.8.1
remoteip 192.168.8.2-40 
最后两行是vpn的ip地址分配,如果你不熟悉就别改了。编辑完成后保存退出。 
输入vi /etc/ppp/chap-secrets开始编辑,输入以下内容: 
username1 pptpd password1 * 
username2 pptpd password2 * 
username3 pptpd password3 * 
这个文件用来配置vpn的登陆用户和密码,一行一个。编辑完成后保存退出。 
把username和password分别改成你需要的用户名密码即可,其他别改了。 
输入vi /etc/sysctl.conf开始编辑,这个文件和上面不同,里面已经有内容: 
找到 
net.ipv4.ip_forward = 0 
改成 
net.ipv4.ip_forward = 1 
保存并退出,然后执行sysctl -p这个命令。 
这时,PPTP基本上配置好了,输入service pptpd start启动。 
下面来配置iptables,首先输入service iptables start启动。 
然后分别输入下面四条命令,每天输完后要记得按回车: 
iptables -A INPUT -p tcp –dport 1723 -j ACCEPT 
iptables -A INPUT -p tcp –dport 47 -j ACCEPT 
iptables -A INPUT -p gre -j ACCEPT 
iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o eth0 -j MASQUERADE 
完成后输入/etc/init.d/iptables save保存,并且输入/etc/init.d/iptables restart重新启动。 
如果你需要服务器启动时候自动启动VPN服务,还需要输入chkconfig pptpd onchkconfig iptables on这两条命令。 
这个时候,PPTP的VPN就已经全部配置好了,由于内容太多,就不截图了,说明已经很详细。 
在Windows下新建一个VPN连接,输入服务器ip、用户名和密码,如无意外就能连上去了。

2013年2月18日星期一

10 款免费的 PPTP VPN

作为一种常见的 VPN 协议,PPTP (Point-to-Point Tunneling Protocol,点对点隧道协议) 的搭建非常简单。
但是搭建该协议所需要的服务器,不管是虚拟专用服务器、独立服务器、还是云服务器,其价格却不便宜,所以,很少有人愿意提供免费的 VPN 服务, 不过庆幸的是,我们仍然有以下 10 款免费的 PPTP VPN 可以用:
1. SecurityKISS
SecurityKISS PPTP VPN
在 SecurityKISS 网站的任意一个下载页面,你只要输入邮箱地址就可以通过邮件获得 2 个 PPTP/L2TP VPN 帐号,其中一个是美国的,另外一个是英国的。
除此之外,你还可以通过邮件里面提到的用户 ID 和密码登录 SecurityKISS 网站,并获得更多的来自美国、英国、法国等地区的服务器 IP 地址。而除了 PPTP 和 L2TP 之外,SecurikyKISS 还提供适用于 Windows、Mac 和 Linux 系统的 OpenVPN 服务。
顺便一提,不管你使用哪种或者多少个 VPN 服务,每天的免费流量最多 300M。
2. Super Free VPN
SuperFreeVPN
打开 Super Free VPN 网站,你就可以看到它所提供的免费 PPTP VPN 的帐号,其中服务器和用户名是固定的,而密码则可长达 8 个小时才更新一次。
顺便一提,由于该网站已经被墙,你或许需要将它的服务器 "superfreevpn.com" 改为以下对应的 IP 地址:
69.60.121.29
3. JustFreeVPN
JustFreeVPN
一打开 JustFreeVPN 网站,你就可以看到 3 个免费的 PPTP VPN 帐号,其中一个是美国的、一个是英国的、还有一个是加拿大的。
不同的帐号,服务器不同,用户名都是 "justfreevpn",密码不同并且不定期更新。
4. UFreeVPN
UFreeVPN PPTP VPN
UFreeVPN 网站同样提供一个美国的、一个英国和一个加拿大的免费 PPTP VPN 帐号,其中每个帐号的服务器不同,用户名和密码相同并且都是固定不变的,所以不需要经常更换密码。
5. NewFreeVPN
NewFreeVPN
在 NewFreeVPN 网站三个不同的网页上,你可以发现三个不同的免费 PPTP VPN 帐号,其中一个是美国的、一个是英国的、还有一个是加拿大的,每个帐号的服务器不同,但是用户名都是 "free",而密码都是 "1234"。
6. Tsunagarumon
Tsunagarumon
Tsunagarumon 网站是日文的,并且需要注册,但是过程却很简单。你只需要在它的申请页面,输入邮件地址,选择同意服务条款,点击红色按钮,再次确认邮件地址,如果准确无误,点击下一个红色按钮。
完了之后,进入你的收件箱,打开来自 Tsunagarumon 的邮件,并点击里面的链接,然后你就可以收到免费的 PPTP VPN 帐号信息了。
7. FreeCanadaVPN
FreeCanadaVPN
FreeCanadaVPN 是一个免费的加拿大 VPN,服务器是 "freecanadavpn.com",用户名是 "free",密码则不定期更新于页面的右上角。
8. BestUKVPN
BestUKVPN
顾名思义,BestUKVPN 是一个英国的 VPN,其中服务器是 "bestukvpn.com",用户名是 "free",密码则不定期更新。
9. Zace Book
Zace Book Free VPN
Zace Book 是一款罗马尼亚的免费 VPN,其服务器是 "vpn.zacebook.com",用户名是 "VPN",密码一两天更新一次。
10. VPN Book
VPN Book
VPN Book 同样是罗马尼亚的,其服务器是 "pptp.vpnbook.com",用户名是 "pptp",密码一两天更新一次。
除了 PPTP,VPN Book 还提供免费的 OpenVPN 服务。
以上 10 款免费的 PPTP VPN 服务里面,SecurityKISS 是最好的,可惜有流量限制,所以,还是那句话,多一个 VPN,翻墙就多一份保障。
额外收获:
如同文章里面提到的 "Super Free VPN" 那样,如果其他某个 PPTP VPN 的服务器域名被墙,你可以将它们改为对应的 IP 地址。

2013年2月2日星期六

(总结)CentOS 5.x/6.x下安装配置PPTP VPN服务器及常见问题


PS:昨天因同事需求,搭建个PPTP VPN服务器做测试,以前搭建过OpenVPN,现在发现其实PPTP VPN搭建更简单,总结一下:
VPN的英文全称是“Virtual Private Network”,中文翻译是“虚拟专用网络”。虚拟专用网络我们可以把它理解成是虚拟出来的企业内部专线。它可以通过特殊的加密的通讯协议在连接在Internet上的位于不同地方的两个或多个企业内部网之间建立一条专有的通讯线路,就好比是架设了一条专线一样,但是它并不需要真正的去铺设光缆之类的物理线路。这就好比去电信局申请专线,但是不用给铺设线路的费用,也不用购买路由器等硬件设备。VPN技术原是路由器具有的重要技术之一,目前在交换机,防火墙设备或Windows等软件里也都支持VPN功能,一句话,VPN的核心就是在利用公共网络建立虚拟私有网。
虚拟专用网(VPN)被定义为通过一个公用网络(通常是因特网)建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定的隧道。虚拟专用网是对企业内部网的扩展。虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,并保证数据的安全传输。虚拟专用网可用于不断增长的移动用户的全球因特网接入,以实现安全连接;可用于实现企业网站之间安全通信的虚拟专用线路,用于经济有效地连接到商业伙伴和用户的安全外联网虚拟专用网。
PPTP全称为Point to Point Tunneling Protocol — 点到点隧道协议,是VPN协议中的一种。
一、CentOS 5.x/6.x下PPTP VPN服务器安装

1、安装相关软件包
32位版:
# yum install -y ppp libpcap iptables
# wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm
# rpm -ivh pptpd-1.3.4-2.rhel5.i386.rpm

64位版:
# yum install -y ppp libpcap iptables
# wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.x86_64.rpm
# rpm -ivh pptpd-1.3.4-2.rhel5.x86_64.rpm
2、配置文件编写
①、配置文件/etc/ppp/options.pptpd
# mv /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
# vim /etc/ppp/options.pptpd

输入以下内容:

name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
idle 2592000
ms-dns 8.8.8.8
ms-dns 8.8.4.4

#这里的DNS可以查看服务器本机使用的DNS地址。
②、配置文件# /etc/ppp/chap-secrets
# mv /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak
# vim /etc/ppp/chap-secrets

输入以下内容

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
myusername pptpd mypassword *

注:这里的myusername和mypassword即为PPTP VPN的登录用户名和密码, 改成你自己的。
③、配置文件/etc/pptpd.conf
# mv /etc/pptpd.conf /etc/pptpd.conf.bak
# vim /etc/pptpd.conf

输入以下内容:

option /etc/ppp/options.pptpd
logwtmp
localip 192.168.80.1
remoteip 192.168.80.11-30

注:为拨入VPN的用户动态分配192.168.80.11~192.168.80.30之间的IP
④、配置文件/etc/sysctl.conf
# vim /etc/sysctl.conf
修改以下内容:
net.ipv4.ip_forward = 1
保存、退出后执行:
sysctl -p
3、启动PPTP VPN 服务器端:
# /etc/init.d/pptpd start
4、设置iptables规则并重启:
# vim /etc/sysconfig/iptables
加入下列规则:

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT
-A POSTROUTING -s 192.168.80.0/255.255.255.0 -o eth0 -j MASQUERADE

重启防火墙:
# /etc/init.d/iptables start
二、Win7下PPTP VPN客户端设置
步骤不详说了,直接看图:
PPTP VPN服务器接入常见问题总结:
1、VPN客户端拨入时出现721错误:
这种情况大数多原因为客户系统,如果为WINXP并且安装了SP2,则可能会出现这种情况,解决方法为:修改注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass{4D36E972-E325-11CE-BFC1-08002bE10318},其中其中 是 WAN 微型端口 (PPTP) 驱动程序的网络适配器,在此项中新建一个DWORD 值ValidateAddress,然后设置为0即可。
服务器端PPP协议配置不正确也会导致此类错误。
2、VPN客户端拨入时出现800错误:
这种情况大数多原因为客户系统连接服务器时使用域名,因临时DNS无法解析而出现这种错误,可更换DNS试一下,如果还是出错此类错误,则可能是无法连接到VPN服务器,可能是VPN服务器关闭或出现故障,也可能是客户电脑上的防火墙阻止了VPN连接请求,可关闭防火墙试一下。
有些使用中转服务器连接到VPN服务器的客户端,也可能出现此类错误,原因为中转服务器中转功能出现故障。
3、VPN客户端拨入时出现619错误:
这种情况大数多原因为客户机连接Internet的网关(如家庭宽带路由或公司上网网关路由或防火墙)NAT-T功能关闭或对VPN支持性不好,主要是对GRE及PPTP协议的NAT-T不支持。可打开网关路由的NAT-T功能,如果还是出现错误,则需要更换网关设备,现在市面上大多数设备已经支持。
4、VPN客户端拨入时出现691错误:
这种情况大数多原因为客户机连接VPN服务器异常中断,因多数服务器限制一个帐户同时只有一个人使用,所以一旦异常断开,则需等待3分钟左右。有些VPN服务器没有设置异常断线检查功能也可能导致用户一旦异常断开后很长时间不能连接。所以解决办法为在服务器上设置异常断线检查程序或功能。
5、VPN客户端拨入时出现733错误:
这种情况大数多原因为客户机拨入VPN服务器后无法获取IP地址,可修复DHCP服务器或设置静态IP地址或地址池。
6、VPN客户端拨入时出现734 ppp链接控制协议终止:
这种情况多数为VPN服务器配置有问题,如果是PPP配置有问题,不支持MPPE加密或支持度不好。请重新编译PPP及MPPE相关程序。对于用于游戏代理的用户,可不使用加密(需在服务器端不要求加密)。
7、VPN客户端拨入时出现718错误:
拨入时用户名和密码出错误,有时也因为服务器端认证服务出现故障。

Linode Vps 上,在CentOS操作系统中安装 PPTP VPN 服务器

现在大多数VPS服务器都位于国外,因此PPTP服务器可以用来搭建一个比较实用的代理服务器。PPTP服务需要用到特定的Linux内核技术,因此绝大多数OpenVZ架构的VPS都不能配置PPTP(可以用OPENVPN代替),但几乎所有的XEN或KVM架构的VPS都能正常安装。本文将以XEN架构的CentOS系统下安装PPTP服务为例进行讲解。

1、准备环境

PPTPD要求Linux内核支持mppe,一般来说CentOS安装时已经包含了;下面安装ppp与iptables:
1yum install perl ppp iptables

2、安装PPTPD

对于32位CentOS,执行
1wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm
2rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm
对于64位CentOS,执行
1wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.x86_64.rpm
2rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm

3、修改配置

编辑PPTP配置文件 /etc/ppp/options.pptpd 如内容下:
01name pptpd
02refuse-pap
03refuse-chap
04refuse-mschap
05require-mschap-v2
06require-mppe-128
07proxyarp
08lock
09nobsdcomp
10novj
11novjccomp
12nologfd
13idle 2592000
14ms-dns 8.8.8.8
15ms-dns 8.8.4.4
编辑配置文件 /etc/pptpd.conf ,内容如下:
1option /etc/ppp/options.pptpd
2logwtmp
3localip 192.168.254.1
4remoteip 192.168.254.100-254
* 其中localip与remoteip定义了客户端连接VPN服务器后被分配到的内网IP地址,可根据需要自己修改。
现在对用户认证文件 /etc/ppp/chap-secrets 进行配置,内容如下:
1testuser pptpd testpwd *
* testuser、testpwd对应修改为自己希望的VPN登录用户名和密码
将 /etc/sysctl.conf 文件中net.ipv4.ip_forward设置为 1 (如果没有,则按照格式新建一行):
1net.ipv4.ip_forward = 1
保存退出。执行
1/sbin/sysctl -p
使之生效。

4、设置iptables转发

1/etc/init.d/iptables start
2/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.254.0/24 -j MASQUERADE
3/etc/init.d/iptables save
4/etc/init.d/iptables restart
* 注意,上面的192.168.254.0应该与之前设置的网段对应。



可能会出现以下的错误提示
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: security raw nat mangle fi[FAILED]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[FAILED]
#这两个问题主要是iptables版本和内核对不上导致的,据我所知,linode使用的是自己修改过的内核.
#第一个问题的修复需打开文件/etc/init.d/iptables,删除所有内容,并替换为以下内容。





#!/bin/sh
#
# iptables        Start iptables firewall
#
# chkconfig: 2345 08 92
# description:        Starts, stops and saves iptables firewall
#
# config: /etc/sysconfig/iptables
# config: /etc/sysconfig/iptables-config

# Source function library.
. /etc/init.d/functions

IPTABLES=iptables
IPTABLES_DATA=/etc/sysconfig/$IPTABLES
IPTABLES_CONFIG=/etc/sysconfig/${IPTABLES}-config
IPV=${IPTABLES%tables} # ip for ipv4 | ip6 for ipv6
PROC_IPTABLES_NAMES=/proc/net/${IPV}_tables_names
VAR_SUBSYS_IPTABLES=/var/lock/subsys/$IPTABLES

if [ ! -x /sbin/$IPTABLES ]; then
    echo -n $"/sbin/$IPTABLES does not exist."; warning; echo
    exit 0
fi

if lsmod 2>/dev/null | grep -q ipchains ; then
    echo -n $"ipchains and $IPTABLES can not be used together."; warning; echo
    exit 1
fi

# Old or new modutils
/sbin/modprobe --version 2>&1 | grep -q module-init-tools \
    && NEW_MODUTILS=1 \
    || NEW_MODUTILS=0

# Default firewall configuration:
IPTABLES_MODULES=""
IPTABLES_MODULES_UNLOAD="yes"
IPTABLES_SAVE_ON_STOP="no"
IPTABLES_SAVE_ON_RESTART="no"
IPTABLES_SAVE_COUNTER="no"
IPTABLES_STATUS_NUMERIC="yes"

# Load firewall configuration.
[ -f "$IPTABLES_CONFIG" ] && . "$IPTABLES_CONFIG"

rmmod_r() {
    # Unload module with all referring modules.
    # At first all referring modules will be unloaded, then the module itself.
    local mod=$1
    local ret=0
    local ref=

    # Get referring modules.
    # New modutils have another output format.
    [ $NEW_MODUTILS = 1 ] \
        && ref=`lsmod | awk "/^${mod}/ { print \\\$4; }" | tr ',' ' '` \
        || ref=`lsmod | grep ^${mod} | cut -d "[" -s -f 2 | cut -d "]" -s -f 1`

    # recursive call for all referring modules
    for i in $ref; do
        rmmod_r $i
        let ret+=$?;
    done

    # Unload module.
    # The extra test is for 2.6: The module might have autocleaned,
    # after all referring modules are unloaded.
    if grep -q "^${mod}" /proc/modules ; then
        modprobe -r $mod > /dev/null 2>&1
        let ret+=$?;
    fi

    return $ret
}

flush_n_delete() {
    # Flush firewall rules and delete chains.
    [ -e "$PROC_IPTABLES_NAMES" ] || return 1

    # Check if firewall is configured (has tables)
    tables=`cat $PROC_IPTABLES_NAMES 2>/dev/null`
    [ -z "$tables" ] && return 1

    echo -n $"Flushing firewall rules: "
    ret=0
    # For all tables
    for i in $tables; do
        # Flush firewall rules.
        $IPTABLES -t $i -F;
        let ret+=$?;

        # Delete firewall chains.
        $IPTABLES -t $i -X;
        let ret+=$?;

        # Set counter to zero.
        $IPTABLES -t $i -Z;
        let ret+=$?;
    done

    [ $ret -eq 0 ] && success || failure
    echo
    return $ret
}

set_policy() {
    # Set policy for configured tables.
    policy=$1

    # Check if iptable module is loaded
    [ ! -e "$PROC_IPTABLES_NAMES" ] && return 1

    # Check if firewall is configured (has tables)
    tables=`cat $PROC_IPTABLES_NAMES 2>/dev/null`
    [ -z "$tables" ] && return 1

    echo -n $"Setting chains to policy $policy: "
    ret=0
    for i in $tables; do
        echo -n "$i "
        case "$i" in
           security)
                    $IPTABLES -t security -P INPUT $policy \
                    && $IPTABLES -t security -P OUTPUT $policy \
                    && $IPTABLES -t security -P FORWARD $policy \
                   || let ret+=1
                ;;
            raw)
                $IPTABLES -t raw -P PREROUTING $policy \
                    && $IPTABLES -t raw -P OUTPUT $policy \
                    || let ret+=1
                ;;
            filter)
                $IPTABLES -t filter -P INPUT $policy \
                    && $IPTABLES -t filter -P OUTPUT $policy \
                    && $IPTABLES -t filter -P FORWARD $policy \
                    || let ret+=1
                ;;
            nat)
                $IPTABLES -t nat -P PREROUTING $policy \
                    && $IPTABLES -t nat -P POSTROUTING $policy \
                    && $IPTABLES -t nat -P OUTPUT $policy \
                    || let ret+=1
                ;;
            mangle)
                $IPTABLES -t mangle -P PREROUTING $policy \
                    && $IPTABLES -t mangle -P POSTROUTING $policy \
                    && $IPTABLES -t mangle -P INPUT $policy \
                    && $IPTABLES -t mangle -P OUTPUT $policy \
                    && $IPTABLES -t mangle -P FORWARD $policy \
                    || let ret+=1
                ;;
            *)
                let ret+=1
                ;;
        esac
    done

    [ $ret -eq 0 ] && success || failure
    echo
    return $ret
}

start() {
    # Do not start if there is no config file.
    [ -f "$IPTABLES_DATA" ] || return 1

    echo -n $"Applying $IPTABLES firewall rules: "

    OPT=
    [ "x$IPTABLES_SAVE_COUNTER" = "xyes" ] && OPT="-c"

    $IPTABLES-restore $OPT $IPTABLES_DATA
    if [ $? -eq 0 ]; then
        success; echo
    else
        failure; echo; return 1
    fi
   
    # Load additional modules (helpers)
    if [ -n "$IPTABLES_MODULES" ]; then
        echo -n $"Loading additional $IPTABLES modules: "
        ret=0
        for mod in $IPTABLES_MODULES; do
            echo -n "$mod "
            modprobe $mod > /dev/null 2>&1
            let ret+=$?;
        done
        [ $ret -eq 0 ] && success || failure
        echo
    fi
   
    touch $VAR_SUBSYS_IPTABLES
    return $ret
}

stop() {
    # Do not stop if iptables module is not loaded.
    [ -e "$PROC_IPTABLES_NAMES" ] || return 1

    flush_n_delete
    set_policy ACCEPT
   
    if [ "x$IPTABLES_MODULES_UNLOAD" = "xyes" ]; then
        echo -n $"Unloading $IPTABLES modules: "
        ret=0
        rmmod_r ${IPV}_tables
        let ret+=$?;
        rmmod_r ${IPV}_conntrack
        let ret+=$?;
        [ $ret -eq 0 ] && success || failure
        echo
    fi
   
    rm -f $VAR_SUBSYS_IPTABLES
    return $ret
}

save() {
    # Check if iptable module is loaded
    [ ! -e "$PROC_IPTABLES_NAMES" ] && return 1

    # Check if firewall is configured (has tables)
    tables=`cat $PROC_IPTABLES_NAMES 2>/dev/null`
    [ -z "$tables" ] && return 1

    echo -n $"Saving firewall rules to $IPTABLES_DATA: "

    OPT=
    [ "x$IPTABLES_SAVE_COUNTER" = "xyes" ] && OPT="-c"

    ret=0
    TMP_FILE=`/bin/mktemp -q /tmp/$IPTABLES.XXXXXX` \
        && chmod 600 "$TMP_FILE" \
        && $IPTABLES-save $OPT > $TMP_FILE 2>/dev/null \
        && size=`stat -c '%s' $TMP_FILE` && [ $size -gt 0 ] \
        || ret=1
    if [ $ret -eq 0 ]; then
        if [ -e $IPTABLES_DATA ]; then
            cp -f $IPTABLES_DATA $IPTABLES_DATA.save \
                && chmod 600 $IPTABLES_DATA.save \
                || ret=1
        fi
        if [ $ret -eq 0 ]; then
            cp -f $TMP_FILE $IPTABLES_DATA \
                && chmod 600 $IPTABLES_DATA \
                || ret=1
        fi
    fi
    [ $ret -eq 0 ] && success || failure
    echo
    rm -f $TMP_FILE
    return $ret
}

status() {
    tables=`cat $PROC_IPTABLES_NAMES 2>/dev/null`

    # Do not print status if lockfile is missing and iptables modules are not
    # loaded.
    # Check if iptable module is loaded
    if [ ! -f "$VAR_SUBSYS_IPTABLES" -a -z "$tables" ]; then
        echo $"Firewall is stopped."
        return 1
    fi

    # Check if firewall is configured (has tables)
    if [ ! -e "$PROC_IPTABLES_NAMES" ]; then
        echo $"Firewall is not configured. "
        return 1
    fi
    if [ -z "$tables" ]; then
        echo $"Firewall is not configured. "
        return 1
    fi

    NUM=
    [ "x$IPTABLES_STATUS_NUMERIC" = "xyes" ] && NUM="-n"
    VERBOSE=
    [ "x$IPTABLES_STATUS_VERBOSE" = "xyes" ] && VERBOSE="--verbose"
    COUNT=
    [ "x$IPTABLES_STATUS_LINENUMBERS" = "xyes" ] && COUNT="--line-numbers"

    for table in $tables; do
        echo $"Table: $table"
        $IPTABLES -t $table --list $NUM $VERBOSE $COUNT && echo
    done

    return 0
}

restart() {
    [ "x$IPTABLES_SAVE_ON_RESTART" = "xyes" ] && save
    stop
    start
}

case "$1" in
    start)
        stop
        start
        RETVAL=$?
        ;;
    stop)
        [ "x$IPTABLES_SAVE_ON_STOP" = "xyes" ] && save
        stop
        RETVAL=$?
        ;;
    restart)
        restart
        RETVAL=$?
        ;;
    condrestart)
        [ -e "$VAR_SUBSYS_IPTABLES" ] && restart
        ;;
    status)
        status
        RETVAL=$?
        ;;
    panic)
        flush_n_delete
        set_policy DROP
        RETVAL=$?
        ;;
    save)
        save
        RETVAL=$?
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|condrestart|status|panic|save}"
        exit 1
        ;;
esac





#第二个问题的修复需要修改/etc/sysconfig/iptables-config配置,关闭ip_conntrack_netbios_ns模块,如下
IPTABLES_MODULES=""
IPTABLES_MODULES_UNLOAD="no"

5、设置开机启动

1chkconfig pptpd on
2chkconfig iptables on
重启计算机即可进行连接,并且能够正常上网。
如果重启服务器后,无法连接VPN,首先检查服务器的PPTP服务1723端口是否已打开(注意设置防火墙允许此端口);如果可以连接VPN,但是无法正常上网,则检查iptables是否正常转发。