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