标题: CentOS 5.3 下快速安装配置 PPTP VPN 服务器 出处:沧海一粟 时间:Sat, 24 Mar 2012 15:28:26 +0000 作者:jed 地址:http://www.dzhope.com/post/907/ 内容: CentOS下PPTP一键安装脚本 点击这里下载文件   VPN的英文全称是“Virtual Private Network”,翻译过来就是“虚拟专用网络”。顾名思义,虚拟专用网络我们可以把它理解成是虚拟出来的企业内部专线。它可以通过特殊的加密的通讯协议在连接在Internet上的位于不同地方的两个或多个企业内部网之间建立一条专有的通讯线路,就好比是架设了一条专线一样,但是它并不需要真正的去铺设光缆之类的物理线路。这就好比去电信局申请专线,但是不用给铺设线路的费用,也不用购买路由器等硬件设备。VPN技术原是路由器具有的重要技术之一,目前在交换机,防火墙设备或Windows等软件里也都支持VPN功能,一句话,VPN的核心就是在利用公共网络建立虚拟私有网。   虚拟专用网(VPN)被定义为通过一个公用网络(通常是因特网)建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定的隧道。虚拟专用网是对企业内部网的扩展。虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,并保证数据的安全传输。虚拟专用网可用于不断增长的移动用户的全球因特网接入,以实现安全连接;可用于实现企业网站之间安全通信的虚拟专用线路,用于经济有效地连接到商业伙伴和用户的安全外联网虚拟专用网。   PPTP 全称为 Point to Point Tunneling Protocol -- 点到点隧道协议,是VPN协议中的一种。 关于Poptop介绍信息: Poptop是一个 PPTP 服务器的开源实现,采用 C 预言开发,可运行在 x86 或者是摩托罗拉嵌入式ColdFire体系。可与微软的 PPTP VPN 客户端进行完全互操作。 点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术。通过该协议,远程用户能够通过 Microsoft Windows NT 工作站、Windows 95 和 Windows 98 操作系统以及其它装有点对点协议的系统安全访问公司网络,并能拨号连入本地 ISP,通过 Internet 安全链接到公司网络。 PPTP 可以用于在 IP 网络上建立 PPP 会话隧道。在这种配置下,PPTP 隧道和 PPP 会话运行在两个相同的机器上,呼叫方充当 PNS。PPTP 使用客户机-服务器结构来分离当前网络访问服务器具备的一些功能并支持虚拟专用网络。PPTP 作为一个呼叫控制和管理协议,它允许服务器控制来自 PSTN 或 ISDN 的拨入电路交换呼叫访问并初始化外部电路交换连接。 PPTP 只能通过 PAC 和 PNS 来实施,其它系统没有必要知道 PPTP。拨号网络可与 PAC 相连接而无需知道 PPTP。标准的 PPP 客户机软件可继续在隧道 PPP 链接上操作。 PPTP 使用 GRE 的扩展版本来传输用户 PPP 包。这些增强允许为在 PAC 和 PNS 之间传输用户数据的隧道提供低层拥塞控制和流控制。这种机制允许高效使用隧道可用带宽并且避免了不必要的重发和缓冲区溢出。PPTP 没有规定特定的算法用于低层控制,但它确实定义了一些通信参数来支持这样的算法工作。 配置概览 PPTP的配置主要有下面五个步骤: 验证内核是否加载了MPPE模块 安装所需的软件包 配置PPP和PPTP的配置文件 打开内核的IP转发功能 启动pptpd守护进程 配置iptables防火墙放行和转发规则 详细步骤 1、验证内核是否加载了MPPE模块: 内核的MPPE模块用于支持Microsoft Point-to-Point Encryption。Windows自带的VPN客户端就是使用这种加密方式,主流的Linux Desktop也都有MPPE支持。其实到了我们这个内核版本,默认就已经加载了MPPE,只需要使用下面命令验证一下,显示MPPE ok即可: modprobe ppp-compress-18 && echo MPPE is ok 也可如下验证: [root@viong ~]# strings '/usr/sbin/pppd'|grep -i mppe|wc -l 42 检查PPP是否支持MPPE,若结果显示“0”则表示不支持,而“30”或更大的数字就表示支持。 [root@viong ~]# modprobe ppp-compress-18 && echo ‘ok! MPPE was found !’ ok! MPPE was found ! 检查内核MPPE补丁是否安装成功:若结果显示“ok! MPPE was found !”则表示成功。 2、安装所需的软件包: –ppp– PPTP使用PPP协议对用户数据进行封装,然后将PPP数据帧封装在IP数据报里,经由IP网络传播。因此首先需要支持PPP协议,我们使用的完 整版CentOS已经自带了ppp这个软件包,如果你安装的是Minial CentOS之类的精简系统,则可能需要下面命令安装ppp: yum install ppp 作为一个懒人,如果没有特殊的自定义要求,我一般尽量用yum安装软件。只要软件源里有,yum比较方便一些,还能自动解决依赖关系。 –pptpd- 有了PPP协议支持,接下来安装pptpd。首先到这里找到最新版适合你的平台的pptpd。CentOS与RHEL通用,Fedora系统则可以使用后缀含fc字样的包,然后还需要根据内核选择32位或者64位的包。找到正确的软件包以后,复制其URL,然后用wget下载到root的家目录(或者用rpm -ivh URL直接安装也行)。譬如我的32位内核CentOS 5,使用下面命令下载: 1、安装相关软件   32位版: 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位版: 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 –iptables– 同样,如果不是Minial的系统,应该不会没有安装iptables。这是Linux下最流行的防火墙,默认应该就能找到,如果没有,则: yum install iptables 然后像是iptables这样的软件,对服务器非常重要。虽然还没有配置防火墙的规则,装完就打开吧(只要默认放行ssh的22端口就没问题),打开以后还需要设置一下,在主要的运行级别自动启动: /etc/init.d/iptables start chkconfig --level 35 iptables on 3、配置PPP和PPTP的配置文件: mv /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak 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 idle 2592000 ms-dns 8.8.8.8 ms-dns 8.8.4.4 注:/etc/ppp/options.pptpd常用配置 name pptpd pptpd server 的名称。 refuse-pap 拒绝 pap 身份验证模式。 refuse-chap 拒绝 chap 身份验证模式。 refuse-mschap 拒绝 mschap 身份验证模式。 require-mschap-v2 在端点进行连接握手时需要使用微软的 mschap-v2 进行自身验证。 require-mppe-128 MPPE 模块使用 128 位加密。 ms-dns 61.139.2.69 ms-dns 202.98.96.68 ppp 为 Windows 客户端提供 DNS 服务器 IP 地址,第一个 ms-dns 为 DNS Master,第二个为 DNS Slave。 proxyarp 建立 ARP 代理键值。 debug 开启调试模式,相关信息同样记录在 /var/logs/message 中。 lock 锁定客户端 PTY 设备文件。 nobsdcomp 禁用 BSD 压缩模式。 novj novjccomp 禁用 Van Jacobson 压缩模式。 nologfd 禁止将错误信息记录到标准错误输出设备(stderr)  ②、配置文件/etc/ppp/chap-secrets mv /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak vi /etc/ppp/chap-secrets   输入以下内容 # Secrets for authentication using CHAP # client server secret IP addresses myusername pptpd mypassword *   注:这里的myusername和mypassword即为PPTP VPN的登录用户名和密码 这个文件非常简单,其中用明文存储VPN客户的用户名、服务名称、密码和IP地址范围,每行一个账户: username1 pptpd passwd1 * username2 pptpd passwd2 * 其中第一第三列分别是用户名和密码;第二列应该和上面的文件/etc/ppp/options.pptpd中name后指定的服务名称一致;最后一列限制客户端IP地址,星号表示没有限制。 也可以使用vpnuser命令来进行配置: # vpnuser add viong 123 添加一个viong用户 ③、配置文件/etc/pptpd.conf mv /etc/pptpd.conf /etc/pptpd.conf.bak vi /etc/pptpd.conf   输入以下内容: option /etc/ppp/options.pptpd logwtmp localip 192.168.9.1 remoteip 192.168.9.11-30   注:localip #服务器端IP,remoteip为拨入VPN的用户动态分配192.168.9.11~192.168.9.30之间的IP 4、打开内核的IP转发功能: 要使VPN服务器可以作为网络请求的中转代理,能够使客户端通过VPN访问Internet,还需要开启内核的IP转发功能。可以编辑配置文件: vi /etc/sysctl.conf 找到其中的行: net.ipv4.ip_forward = 0 修改为: net.ipv4.ip_forward = 1 然后执行下面命令使上述修改生效: sysctl -p 5、启动pptpd守护进程: 上面配置完成后,就可以启动pptpd进程并设置自动启动了,和上面iptables的例子类似: /etc/init.d/pptpd start chkconfig --level 35 pptpd on 6、配置iptables防火墙放行和转发规则: 最后,还需要配置防火墙。这里配置防火墙有三个目的:一是设置默认丢弃规则,保护服务器的安全;二是放行我们允许的数据包,提供服务;三是通过配置 nat表的POSTROUTING链,增加NAT使得VPN客户端可以通过服务器访问互联网。总之我们的原则就是,只放行我们需要的服务,其他统统拒绝。 首先介绍跟PPTP VPN相关的几项: 允许GRE(Generic Route Encapsulation)协议,PPTP使用GRE协议封装PPP数据包,然后封装成IP报文 放行1723端口的PPTP服务 放行状态为RELATED,ESTABLISHED的入站数据包(正常提供服务的机器上防火墙应该都已经配置了这一项) 放行VPN虚拟网络设备所在的192.168.0.0/24网段与服务器网卡eth0之间的数据包转发 为从VPN网段192.168.0.0/24转往网卡eth0的出站数据包做NAT 将Linux服务器的1723端口和47端口打开,并打开GRE协议。 /sbin/iptables -A INPUT -p tcp --dport 1723 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 47 -j ACCEPT /sbin/iptables -A INPUT -p gre -j ACCEPT 用Iptables做NAT服务 在VPN客户端成功拨号以后,本地网络的默认网关会变为VPN服务器的VPN内网地址,这样会导致客户端只能够连接VPN服务器及其所在的内网,而不能访问互联网; iptables -t nat -A POSTROUTING -s 192.168.9.11/30 -j SNAT --to 255.255.255.255 /sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.9.0/24 -j MASQUERADE /etc/rc.d/init.d/iptables save /etc/rc.d/init.d/iptables restart Generated by Bo-blog 2.1.1 Release