PPTP

点对点隧道协议(PPTP)是一种实现虚拟专用网络的方法。 PPTP使用用于封装PPP数据包的TCP及GRE隧道控制通道。

Open×××

Open×××是一免费开源软件,以路由器或桥接配置和远程访问设备方式实现虚拟专用网络(×××)创建安全的点 对点或站对站连接的解决方案。它使用SSL / TLS安全加密,具有穿越网络地址转换(NATs)和防火墙的功能。

PPTP与Open×××之比较和选择 ?

在PPTP和Open×××二者之间做出选择的一个重要考虑因素,也是我们无法控制的因素,就是有时互联网服务供应商会阻止 PPTP连接。次情况下我们无计可施,只能选择使用Open×××。 PPTP具有一些独 特优势,但此刻用Open×××会是不错的选择。

PPTP可以应用到几乎所有的操作系统软件,无需安装任何软件。它也兼容许多移动设备,如 iphone,ipad和Windows移动,安装简易。相比之下,Open×××的安装比PPTP要复杂一点,但只 要按照正确的指示安装则无太大困难。请注意Open×××不兼容移动设备。

PPTP加密技术使用密码作为密钥,它的数据流载有可获 取的混编密码。如果中间有人拦截到了数据流并且破译了密码(尽 管可能但很难),那么他就可以破译你的信息。然而Open×××使用非 常强大的加密(Blowfish)技术。即使有人拦 截你的数据流,他们也无计可施。这使得Open×××比PPTP安全得多。

如何抉择

如果你希望得到高安全性以及更加关注数据安全传输问题,那么你应该使用Open×××。如果您为了简便或者想在移动设备上使用×××那么PPTP适合你。还有其他协议,例如L2P或IPSec,但他们在用户友好或成本上没有优势。




pptp的安装(附软件包)


1.yum -y install ppp  

安装pptpd服务器

2.rpm -ivh pptpd-1.3.4-2.el6.x86_64.rpm

检查是否支持

modprobe ppp-compress-18 && echo ok

(返回ok支持)

检查是否支持pptpd

cat /dev/net/tun

cat:/dev/net/tun:File descriptor in bad state(返回此值即可安装)

修改配置文件

3.vi /etc/ppp/options.pptpd

name pptpd

refuse-pap

refuse-chap

refuse-mschap

require-mschap-v2

require-mppe-128

ms-dns 114.114.114.114

proxyarp

lock

nobsdcomp

novj

novjccomp

nologfd

4.vi /etc/pptpd.conf

option /etc/ppp/options.pptpd

logwtmp

localip 172.18.0.107 #本地IP地址#

remoteip 192.168.12.2-50 #分配给客户端的IP或网段#

如果遇到客户端拨号报619错误尝试注释掉logwtmp


加密方式为chap ,修改 chap-secrets

5.vi /etc/ppp/chap-secrets

# Secrets for authentication using CHAP

# client server secret IP addresses

anzhi pptpd anzhi2013 *

开启转发功能

#echo 1 > /proc/sys/net/ipv4/ip_forward

6.vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

7.sysctl -p #转发生效

修改防火墙

8.vi /etc/sysconfig/iptables # 增加1723端口开放

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1723 -j ACCEPT

#-A INPUT -j REJECT --reject-with icmp-host-prohibited

#-A FORWARD -j REJECT --reject-with icmp-host-prohibited

9.service iptables restart # 重启防火墙

10.iptables -t nat -A POSTROUTING -s 192.168.12.0/24(remoteip处地址段) -o eth0 -j SNAT --to 172.18.0.107(外网IP地址也就是eth0的地址)

11.iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -o eth0 -j MASQUERADE(将eth0的ip赋值remoteip处地址段)

12.service iptables save(保持防火墙设置)

13.service iptables status 查看规则


启动服务

14.service pptpd start

重启服务

15.service pptpd restart-kill;service pptpd start




openvpn的安装(附软件包)


1.在安装之前请使用cat /dev/net/tun 进行检查是否开启tun/tap

cat /dev/net/tun

cat: /dev/net/tun: File descriptor in bad state

说明tun/tap已经开启,可以进行open×××的安装配置了



2.安装必要软件

yum -y install gcc* openssl*



3.安装lzo

tar -xvzf lzo-2.06.tar.gz

cd lzo-2.06

./configure -prefix=/usr/local/lzo

make

make install



4.安装openvpn

tar -xvzf openvpn-2.2.2.tar.gz

cd openvpn-2.2.2

./configure --prefix=/usr/local/openvpn --with-lzo-headers=/usr/local/lzo/include --with-lzo-lib=/usr/local/lzo/lib --with-ssl-headers=/usr/include/openssl --with-ssl-lib=/usr/lib64/openssl

make

make install



5.配置证书

mkdir /etc/openvpn

cp -R easy-rsa /etc/openvpn

cd /etc/openvpn/easy-rsa/2.0/

这下面的文件做简单介绍:

vars 脚本,是用来创建环境变量,设置所需要的变量的脚本

clean-all 脚本,是创建生成CA证书及密钥文件所需要的文件和目录

build-ca 脚本,生成CA证书(交互)

build-dh 脚本,生成Diffie-Hellman文件(交互)

build-key-server 脚本,生成服务器端密钥(交互)

build-key 脚本,生成客户端密钥(交互)

pkitool 脚本,直接使用vars的环境变量设置直接生成证书(非交互)


编辑vars文件

修改以下内容

export KEY_COUNTRY="CN"

export KEY_PROVINCE="JS"

export KEY_CITY="SUZHOU"

export KEY_ORG="canadiansolar.com"

export KEY_EMAIL="XXXX@XXXX.COM"

#export KEY_EMAIL=mail@host.domain

export KEY_CN=CSI

export KEY_NAME=IT

export KEY_OU=ENG

export PKCS11_MODULE_PATH=ENG

export PKCS11_PIN=123456


设置环境变量

source ./vars

如果有以下提示

**************************************************************

No /etc/openvpn/easy-rsa/2.0/openssl.cnf file could be found

Further invocations will fail

创建个链接ln -s openssl-1.0.0.cnf openssl.cnf


初始化证书

./clean-all


建立根证书

./build-ca #一路按回车即可

ls keys #可以看到下面有ca.crt ca.key文件


生成Diffie-Hellman文件

./build-dh #[注:Generating DH parameters, 1024 bit long safe prime]

keys下面生成dh1024.pem 文件


生成openvpn服务器证书

./build-key-server CSICN01PROX51 #其中CSICN01PROX51是CA证书的服务器名字

一路回车

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y


然后把刚生成的CA证书和密钥copy到/etc/openvpn/下

# cd keys

# cp ca.crt ca.key CSICN01PROX51.crt CSICN01PROX51.key dh1024.pem /etc/openvpn/


生成客户端CA证书及密钥

./build-key fei.lu

一路回车

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

在keys目录下生成了fei.lu.crt fei.lu.csr fei.lu.key三个客户端证书



6.修改openvpn服务器端配置文件

cp /root/openvpn-2.2.2/sample-config-files/server.conf /etc/openvpn/openvpn.conf

cd /etc/openvpn

修改openvpn.conf


local 192.168.20.252 #openvpn服务器ip地址

port 1194

proto udp

dev tun

ca /etc/openvpn/ca.crt

cert /etc/openvpn/CSICN01PROX51.crt

key /etc/openvpn/CSICN01PROX51.key # This file should be kept secret

;crl-verify /etc/openvpn/crl.pem #如果有吊销证书用户,可以做这样的设置

dh /etc/openvpn/dh1024.pem

server 10.8.0.0 255.255.255.0 #vpn网段

ifconfig-pool-persist ipp.txt

push "route 192.168.20.0 255.255.255.0 net_gateway" #push客户端静态路由,让客户端的内网用原来的路由,不走vpn路由

push "route 10.253.0.0 255.255.0.0 net_gateway" #push客户端静态路由,让客户端的内网用原来的路由,不走vpn路由

push "dhcp-option DNS 10.8.0.1" #设置×××网络dns

push "dhcp-option DNS 192.168.20.50" #设置×××网络dns

push "dhcp-option DNS 192.168.20.52" #设置×××网络dns

client-to-client

duplicate-cn

keepalive 10 120

comp-lzo

user nobody

group nobody

persist-key

persist-tun

status openvpn-status.log

log /var/log/openvpn.log

log-append /var/log/openvpn.log

verb 3



7.启动openvpn

修改完毕后,即可以启动vpn,--daemon为后台守护进程模型启动

/usr/local/openvpn/sbin/openvpn --daemon --config /etc/openvpn/openvpn.conf

[root@CSICN01PROX51 openvpn]# netstat -an |grep 1194

udp 0 0 192.168.20.252:1194 0.0.0.0:*

[root@CSICN01PROX51 openvpn]# ps aux |grep openvpn

nobody 31200 0.0 0.0 65940 2916 ? Ss 14:32 0:00 /usr/local/openvpn/sbin/openvpn --daemon --config /etc/openvpn/openvpn.conf

root 31381 0.0 0.0 103300 848 pts/0 S+ 15:39 0:00 grep openvpn



8.windows客户端安装及配置

从http://www.openvpn.se/下载openvpn的windows客户端文件

默认安装openvpn客户端到C:\Program Files\Open×××

拷贝C:\Program Files\Open×××\sample-config\client.ovpn到C:\Program Files\Open×××\config

从openvpn服务器/etc/openvpn/easy-rsa/2.0/keys/拷贝之前生成的根证书及客户端证书文件 ca.crt ca.key fei.lu.crt fei.lu.csr fei.lu.key到C:\Program Files\Open×××\config

编辑client.ovpn

client

dev tun

proto udp

remote 192.168.20.252 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert fei.lu.crt

key fei.lu.key

ns-cert-type server

comp-lzo

verb 3

redirect-gateway def1

route-method exe

route-delay 2



9.启动openvpn client

点击开始菜单,选择Open××× GUI

在右下角找到Open××× GUI电脑小图标,右键点击connect。成功连接后小图标会变成绿色。



10. Open××× 访问外网的设置

打开路由×××连接成功后, 还需要设置路由, 才能透过×××访问Internet. 在 linux host 上添加路由: 代码:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.20.252

因为之前没有设置过iptables,如果打开iptables,许多端口将会被阻挡,所以先清除iptables设定。

iptables –F

service iptables save

service iptables restart

[root@CSICN01PROX51 keys]# service iptables status

Table: nat

Chain PREROUTING (policy ACCEPT)

numtargetprot opt sourcedestination

Chain POSTROUTING (policy ACCEPT)

numtargetprot opt sourcedestination

1SNATall--10.8.0.0/240.0.0.0/0to:192.168.20.252

Chain OUTPUT (policy ACCEPT)

numtargetprot opt sourcedestination

Table: filter

Chain INPUT (policy ACCEPT)

numtargetprot opt sourcedestination

Chain FORWARD (policy ACCEPT)

numtargetprot opt sourcedestination

Chain OUTPUT (policy ACCEPT)

numtargetprot opt sourcedestination

同时, 需要将 ip forward 打开. 不要用 echo 1 > /proc/sys/net/ipv4/ip_forward 的方式, 这种方式重启后无效. 先查看一下:

vi /etc/sysctl.conf

如果net.ipv4.ip_forward不是1,你要把他改成1

net.ipv4.ip_forward = 1