|
注意:V.P.N中请去掉中间的点点。系统原因,自动屏蔽V.P.N三个字母
1.1.v.p.n分类
1.远程访问v.p.n服务
个人电脑,维护人员,出差用户拨号到企业办公网络
2.企业内部网络之间v.p.n服务
总公司与分公司之间的,比如大超市,连锁店
3.互联网公司IDC机房之间v.p.n服务
不同机房之间业务管理和业务访问
4.企业外部v.p.n服务
在供应商,合作伙伴和本公司的LAN之间建立v.p.n
访问国外的网站v.p.n
常见隧道协议
·PPTP
由微软和3COM等公司组成开发的 ,基于拨号,使用PAP CHAP算法,使用microsoft点对点算法MPPE
PPTP属于点对点方式应用,比较适合远程企业用户拨号到企业内部办公
优点:使用PPTP,无需在windows客户端安装v.p.n软件,默认支持pptp v.p.n拨号连接,PPTP属于点对点方式应用,比较适合企业用户拨号到企业进行办公等的应用
缺点:很多小区及网络设备不支持PPTP导致无法访问 不适合企业对企业
·L2TP
Layer 2 Tunneling Protocol
IETF基于L2F cisco开发,是工业标准隧道协议 PPTP和L2TP都使用PP协议对数据进行封装然后添加附加包头用于数据在互联网上的传输。
PPTP只能在两端点间建立单一隧道,L2TP支持在两端点间使用多隧道 用户可以针对不同的服务质量创建不同的隧道,L2TP可以提供隧道验证,而PPTP则不支持隧道验证,但是当L2TP或PPTP与IPSEC共同使用时,可以由IPSEC提供隧道验证,不需要在第2层协议上验证隧道使用L2TP,
缺点:本身不提供加密,依赖于加密协议一般常和IPSEC一起使用
·IPSec
IPSec隧道模式隧道是封装的,路由与解封装的整个过程,隧道将原始数据包隐藏在新的数据包内部,该新的数据包可能会有新的寻址与路由信息,从而使其能够通过网络传输,隧道与数据保密性结合使用时,在网络上窃听通讯的人将无法获取原始数据包数据(以及原始的源和目录),封装的数据包到达目的地后,会删除封装,原始数据包头用于将数据包路由到最终目的地
当以隧道模式使有IPSec时,其只为IP通讯提供封装,使用IPSec隧道模式主要是为了其它不支持IPSec上的L2TP或PPTP v.p.n隧道技术的路由器,网关或终端系统之前的相互操作
优点:用于异地两公司或多个之间不间断连接,长时间连接,部署简单
ipsec v.p.n的开源产品openwan
·SSL v.p.n
SSL提供了数据私密性,端点验证,信息完整等特性
SSL本身就被几乎所有的web浏览器支持,这意味着客户端不需要为了支持SSL连接安装额外的软件,
典型的SSL v.p.n应用于open v.p.n,是一个比较好的开源软件,open v.p.n允许参与建立v.p.n的单点使用预设的私钥,第三方证书,或者用户名和密码进行身份验证,它大量使用openssl加密库,SSLV3 TLSV1
缺点:不与其它v.p.n软件兼容,属于C/S架构,单独安装open v.p.n客户端,
场景: 主要为出差和家庭用户,open不但可以使用PPTP应用场景,还适合对企业异地两总司之间不间断 v.p.n连接,例如ERP OA
1.2.企业选择推荐:
1. 如果领导愿意花钱,可能选择相关硬件产品,深信服之类的
2. 如果公司省钱,又想体现运维价值,可以建议使用开源产品,做高可用
3. 对于开源产品,以下建议:
A: 个人拨号选择open v.p.n,功能大,稳定
B: 如果不希望单独安装客户端拨号 则可以使用PPTP 但尽量不要使用PPTP,很多设备不支持 数据传输,
C: 多个企业之间或者多个IDC机房,首选IPSEC v.p.n 再OPEN v.p.n
OPEN v.p.n是ssl v.p.n的开源实现 点到企业,企业到企业
OPENWAN是IPSec的开源实现 企业到企业
open v.p.n所有通信都基于单一IP端口(默认1194) UDP协议 同时也被TCP支持 支持NAT环境服务端可以提供路由设置 IP地址,
1.3.v.p.n安装和验证部署
http://swupdate.openv.p.n.org/community/releasesopen全系列版本
1.3.1.open v.p.n生产环境及需求
笔记本或PC 192.168.1.0/24 办公室DHCP
openv.p.n server (双网卡 eth0:10.0.0.28 外网公网IP eth1:172.16.1.28 (内网IP 不配网关)
APP clinetserver eth0:172.16.1.17 内网网关:路由器存储
DIC机房内部局域网服务器 172.16.1.0/24
实现需求:
在远端可以通过v.p.n客户端笔记本拨号到v.p.n server 过行管理IDC机房server
1.3.2.open server时间同步
ntpdate pool.ntp.org 时间同步
echo "*/5 * * * * /usr/sbin/ntpdate pool.ntp.org>/dev/null 2>&1 >> /var/spool/cront/root"
1.4.open软件安装
·所需要的安装包:
lzo-2.02.tar
openv.p.n-2.09.tar
·安装lzo模块:
wgethttp://www.oberhumer.com/opensource/lzo/download/lzo-2.02.tar.gz
tar zxf lzo-2.02.tar.gz;cdlzo-2.02;./configure;make;make install
·安装open v.p.n
安装依赖:yum install openssl* -y
https://openv.p.n.net/index.php/download/community-downloads.html
wget -chttps://swupdate.openv.p.n.org/community/releases/openv.p.n-2.4.0.tar.gz
wgethttps://swupdate.openv.p.n.org/community/releases/openv.p.n-2.3.14.tar.gz
tar zxf openv.p.n-2.3.14;cd openv.p.n-2.3.14;
./configure --with-lzo-headers=/usr/local/include--with-lzo-lib=/usr/local/lib;make;maek install
注:此条编译参数只适合2.09版本
报错1:configure: error: libpam required but missing
yum install pam-devel-y
报错2:configure: WARNING: unrecognized options: --with-lzo-headers,--with-lzo-lib
如果是2.09以上版本,需要手动安装easy-rsa证书生成工具
·安装easy-rsa CA证书软件
2.09版本的rsa软件在软件解压包下 openv.p.n-2.0.9/easy-rsa/2.0
#yum installeasy-rsa //或者用上面下载的easy-rsa-2.2.0_master.tar.gz
如果是CentOS6系统,自带的yum源可能没有easy-rsa,可以添加以下源
# vim/etc/yum.repos.d/ali.repo
[centos6]
name=centeros6base
baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/
gpgcheck=0
[epel]
name=epel base
baseurl=http://mirrors.aliyun.com/epel/6/x86_64
gpgcheck=0
yum installeasy-rsa -y
1.5.配置easy-rsa
先将easy-rsa工具文件夹拷贝到/usr/local/openv.p.n下
cp -ra/usr/share/easy-rsa /etcl/openv.p.n/ #2.09以上版本
cp -ra /usr/src/openv.p.n-2.0.9/easy-rsa/etc/openv.p.n
cp varsvars.bak;vi vars
##############################################
exportKEY_COUNTRY="CN"
#国家
exportKEY_PROVINCE="BJ"
#省
export KEY_CITY="Beijing"
#城市
exportKEY_ORG="oldboy"
#组织
exportKEY_EMAIL="49000448@qq.com"
#邮箱
exportKEY_OU=oldboy
export KEY_CN=CN
exportKEY_NAME=oldboy
exportPKCS11_MODULE_PATH=changeme
exportPKCS11_PIN=1234
#################################################
执行: source vars # 生效配置文件
执行: ./clean-all # 清除历史证书
1.6.建立CA证书
./build-ca # 建立证书
Country Name (2letter code) [CN]:
State orProvince Name (full name) [BJ]:
Locality Name(eg, city) [Beijing]:
OrganizationName (eg, company) [oldboy]:
OrganizationalUnit Name (eg, section) []:oldboy
Common Name (eg,your name or your server's hostname) []:oldboy
Email Address[49000448@qq.com]:
证书目录
[root@localhost2.0]# ll keys/
总用量 12
-rw-r--r--. 1root root 1663 3月 15 16:45 ca.crt
-rw-------. 1root root 1704 3月 15 16:45 ca.key
-rw-r--r--. 1root root 0 3月 15 16:43 index.txt
-rw-r--r--. 1root root 3 3月 15 16:43 serial
[root@localhost2.0]#
1.7.生成服务端证书和密钥KEY
[root@localhost2.0]# ./build-key-server server # server是自定义的
Country Name (2letter code) [CN]:
State orProvince Name (full name) [BJ]:
Locality Name(eg, city) [Beijing]:
OrganizationName (eg, company) [oldboy]:
OrganizationalUnit Name (eg, section) [oldboy]:
Common Name (eg,your name or your server's hostname) [server]:
Name[EasyRSA]:oldboy
Email Address[49000448@qq.com]:
Please enter thefollowing 'extra' attributes
to be sent withyour certificate request
A challengepassword []:123456
An optionalcompany name []:oldboy
Usingconfiguration from /usr/local/openv.p.n/2.0/openssl-1.0.0.cnf
Check that therequest matches the signature
Signature ok
The Subject'sDistinguished Name is as follows
countryName :PRINTABLE:'CN'
stateOrProvinceName :PRINTABLE:'BJ'
localityName :PRINTABLE:'Beijing'
organizationName :PRINTABLE:'oldboy'
organizationalUnitName:PRINTABLE:'oldboy'
commonName :PRINTABLE:'server'
name :PRINTABLE:'oldboy'
emailAddress :IA5STRING:'49000448@qq.com'
Certificate isto be certified until Mar 13 08:51:31 2027 GMT (3650 days)
Sign thecertificate? [y/n]:y
1 out of 1certificate requests certified, commit? [y/n]y
Write outdatabase with 1 new entries
Data BaseUpdated
证书目录
[root@localhost2.0]# ll keys/
总用量 40
-rw-r--r--. 1root root 3886 3月 8 00:11 01.pem
-rw-r--r--. 1root root 1237 3月 8 00:08 ca.crt
-rw-------. 1root root 916 3月 8 00:08 ca.key
-rw-r--r--. 1root root 108 3月 8 00:11 index.txt
-rw-r--r--. 1root root 21 3月 8 00:11 index.txt.attr
-rw-r--r--. 1root root 0 3月 8 00:06 index.txt.old
-rw-r--r--. 1root root 3 3月 8 00:11 serial
-rw-r--r--. 1root root 3 3月 8 00:06 serial.old
-rw-r--r--. 1root root 3886 3月 8 00:11 server.crt
-rw-r--r--. 1root root 745 3月 8 00:11 server.csr
-rw-------. 1root root 916 3月 8 00:11 server.key
1.8.生成客户端证书和key密钥
生成不拨号用户
[root@localhost2.0]# ./build-key test # test自定义 key名 可以对应一个用户名
Country Name (2letter code) [CN]:
State orProvince Name (full name) [BJ]:
Locality Name(eg, city) [Beijing]:
OrganizationName (eg, company) [oldboy]:
OrganizationalUnit Name (eg, section) [oldboy]:
Common Name (eg,your name or your server's hostname) [testcat]:test
Name[EasyRSA]:oldboy
Email Address[49000448@qq.com]:
Please enter thefollowing 'extra' attributes
to be sent withyour certificate request
A challengepassword []:123456
An optionalcompany name []:oldboy
Usingconfiguration from /usr/local/openv.p.n/2.0/openssl-1.0.0.cnf
Check that therequest matches the signature
Signature ok
The Subject'sDistinguished Name is as follows
countryName :PRINTABLE:'CN'
stateOrProvinceName :PRINTABLE:'BJ'
localityName :PRINTABLE:'Beijing'
organizationName :PRINTABLE:'oldboy'
organizationalUnitName:PRINTABLE:'oldboy'
commonName :PRINTABLE:'test'
name :PRINTABLE:'oldboy'
emailAddress :IA5STRING:'49000448@qq.com'
Certificate isto be certified until Mar 13 08:57:20 2027 GMT (3650 days)
Sign thecertificate? [y/n]:y
1 out of 1certificate requests certified, commit? [y/n]y
Write outdatabase with 1 new entries
Data BaseUpdated
[root@localhost2.0]# ll ./keys/
-rw-r--r--. 1root root 0 3月 15 16:59 test.crt
-rw-r--r--. 1root root 1119 3月 15 16:59 test.csr
-rw-r--r--. 1root root 1704 3月 15 16:59 test.key
1.9.生成拨号密码用户
[root@localhost2.0]# ./build-key-pass ett # 生成拨号密码用户
与上相同,输入用户密码
-rw-r--r--. 1root root 3761 3月 8 00:14 ett.crt
-rw-r--r--. 1root root 753 3月 8 00:13 ett.csr
-rw-------. 1root root 1041 3月 8 00:13 ett.key
1.10.生成generate diffie hellman parameters 协议文件
生成传输过行密钥交换时用到的交换密钥协议文件
[root@localhost2.0]# ./build-dh
[root@localhost2.0]# ll ./keys/
总用量 100
-rw-r--r--. 1root root 5379 3月 15 16:52 01.pem
-rw-r--r--. 1root root 5256 3月 15 16:57 02.pem
-rw-r--r--. 1root root 5255 3月 15 17:03 03.pem
-rw-r--r--. 1root root 424 3月 15 17:12 dh2048.pem
1.11.目录证书讲解
[root@localhost2.0]# ll ./keys/
总用量 100
-rw-r--r--. 1root root 5379 3月 15 16:52 01.pem
-rw-r--r--. 1root root 5256 3月 15 16:57 02.pem
-rw-r--r--. 1root root 5255 3月 15 17:03 03.pem
-rw-r--r--. 1root root 1663 3月 15 16:45 ca.crt
-rw-------. 1root root 1704 3月 15 16:45 ca.key
-rw-r--r--. 1root root 424 3月 15 17:12 dh2048.pem
-rw-r--r--. 1root root 5255 3月 15 17:03 ett.crt
-rw-r--r--. 1root root 1119 3月 15 17:03 ett.csr
-rw-------. 1root root 1834 3月 15 17:03 ett.key
-rw-r--r--. 1root root 355 3月 15 17:03 index.txt
-rw-r--r--. 1root root 21 3月 15 17:03 index.txt.attr
-rw-r--r--. 1root root 21 3月 15 16:57 index.txt.attr.old
-rw-r--r--. 1root root 238 3月 15 16:57 index.txt.old
-rw-r--r--. 1root root 3 3月 15 17:03 serial
-rw-r--r--. 1root root 3 3月 15 16:57 serial.old
-rw-r--r--. 1root root 5379 3月 15 16:52 server.crt
-rw-r--r--. 1root root 1123 3月 15 16:51 server.csr
-rw-------. 1root root 1704 3月 15 16:51 server.key
-rw-r--r--. 1root root 0 3月 15 16:59 test.crt
-rw-r--r--. 1root root 1119 3月 15 16:59 test.csr
-rw-r--r--. 1root root 1704 3月 15 16:59 test.key
[root@localhost2.0]#
[root@localhost2.0]# openv.p.n --genkey --secret keys/ta.key
[root@localhost2.0]# ls -l keys/ta.key
-rw-------. 1root root 636 3月 15 17:25 keys/ta.key
[root@localhost2.0]#
生成证书吊销链文件,防止日后有人丢失证书,被非法用户接入v.p.n
大部分服务端的工作已完成,接下来的操作就是把证书拷贝到指定地点了
·证书生成命令:
Vars 脚本用来创建环境变量,设置所需要的变量脚本
clean-all 脚本是创建生成ca证书及密钥文件所需要的文件及目录
build-ca 脚本生成ca证书
build-dh 脚本生成Diffie-Hellman文件
build-key-server 脚本生成服务器端密钥
build-key 脚本生成客户端密钥
build-key-passs 脚本生成客户端带密码的密钥
pkitool 脚本直接使用vars的环境变量设置直接生成证书
1.12.服务器端v.p.n server.conf参数配置
1.拷贝keys及配置
把所有的keys和配置拷贝到/etc/openv.p.n目录下
Cp -ar keys/etc/openv.p.n
cd/usr/src/openv.p.n-2.3.14/sample/sample-config-files
cp server.confclient.conf /etc/openv.p.n/
备份配置文件
cp/etc/openv.p.n/server.conf /etc/openv.p.n/server.conf.bak
cp/etc/openv.p.n/client.conf /etc/openv.p.n/client.conf.bak
grep -Ev"#|;|^ $" /etc/openv.p.n/server.conf.bak | sed "/^\s*$/d">/etc/openv.p.n/server.conf
# 去除多余行
·配置文件详解:
1 port1194
2 protoudp
3 devtun #v.p.n server 的模式采用路由模式,可选tap或tun
4 caca.crt # ca证书,注意此文件和server.conf在一个目录下,否则要用绝对路径调用
5 certserver.crt
6 dhdh2048.pem
7 server192.168.1.0 255.255.255.0 这是v.p.n server动态分配给v.p.n client的地址池
8 ifconfig-pool-persistipp.txt
9 keepalive10 120 # 每10秒ping 一次,若120秒未收到包,即认定客户端断线
10 cipherAES-256-CBC
11 persist-key # 当vnp超时后,重新启动v.p.n后,保挂上一次使用的私钥,而不重新读私钥
12 persist-tun # 通过keeplive检测v.p.n超时后,当重新启动v.p.n后,保持tun或者tap设备自动连接状态
13 statusopenv.p.n-status.log # 日志
14 verb3 # 日志文件冗余
15 explicit-exit-notify1
16 local 10.0.0.28 # 监听接口
17 push "route 10.0.0.0 255.255.255.0" # 这是v.p.n server所在的网段路由,确保能够和v.p.nserver 所 在的内网网段通信,如果有多个可以写多个 push,
例如: 10.0.0.0 255.255.255.0 10.8.0.9 10.8.0.10 1
18 client-to-client # 允许拨号的多个v.p.nclinet互相通信
19 duplicate-cn # 允许多个客户端使用同一个账号连接
提示:首先执行export 然后编译server.conf,清空所有内容,把上面配置cp进去,执行dos2unix server.conf文档,
20 comp-lzo # 开启压缩功能
21 push"dhcp-option 8.8.8.8 "
---------------Vim/etc/openv.p.n/server.conf----------------------------------------------------------
在原文件加入以下配置
local 10.204.3.202
proto tcp
port 52115
server 10.204.3.0 255.255.255.0
client-to-client
duplicate-cn
log /var/log/openv.p.n.log
ca /etc/openv.p.n/keys/ca.crt
cert /etc/openv.p.n/keys/server.crt
key /etc/openv.p.n/keys/server.key
dh /etc/openv.p.n/keys/dh1024.pem
dev tun
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openv.p.n-status.log
verb 3
1.13.开启防火墙
-A INPUT -p tcp--dport 52115 -j ACCEPT
iptable -t nat-A POSTROUTING -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 10.204.3.202
# 回程防火墙 做IP伪装
iptable -t nat-A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
#
# 限制源地址来自某个网段的转发 限内网的IP地址转发
iptables -AINPUT -i tun+ -j ACCEPT
iptables -AFORWARD -i tun+ -j ACCEPT
iptables -AINPUT -i tap+ -j ACCEPT
iptables -AFORWARD -i tap+ -j ACCEPT
1.14.配置路由的方式:
在openv.p.n server上添加一条路由
Route add -net10.204.0.0/24 dev eth0
如上图: 笔记本用户拨号到openv.p.n server,获取到ov.p.n IP:192.168.100.6
此时有两种现象:
1. 笔记本用户可以ping通open server的192.168.100.1 和 10.204.3.202
2. 笔记本用户却ping不通内网的nginx server和mysql server
故障分析:
1. 通过tcpdump在nginx上抓包能看到笔忘本的ping请求
2. 在open server上抓包却只有来包,没有回包
故障处理:
1. 如果所有内网的server都是通过路由器上网的,设置的网关为路由器的IP,那么要在所有的内网服务器上添加去往192.168.100.0的路由,命令如下:
Route add -net192.168.100.0/24 gw 10.204.3.202
# 把去往192.168.100.0的指向给openv.p.n server转发
2. 如果所有内网的server都没有上外网,可以将网关指向openv.p.n server 直接数据就都给openv.p.n server转发,(反正内网不需要上外网)
Route add default gw 10.204.3.202
·让路由添加后永久生效的方法“
方法1:推荐
vi /etc/sysconfig/network-scripts/route-eth0
加入以下内容
192.168.1.0/24 via 192.168.1.1
重启网络服务或系统
方法2:
vi /etc/sysconfig/static-routes
加入以下内容
any net 192.168.1.0/24 gw 192.168.1.1
重启网络服务或系统
方法3:
vi /etc/rc.local
加入以下内容
route add -net 192.168.1.0/24 gw 192.168.1.1
将v.p.n获取的地址做伪装:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT--to-source 172.16.1.28
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE IP伪装
1.15.开启转发
·开启路由转发
vi/etc/sysctl.conf
net.ipv4.ip_forward= 1
sysctl -p # 修改完后,使用命令生效
1.16.启动v.p.n server
/usr/local/sbin/openv.p.n--config /etc/openv.p.n/server.conf &
设置开机自启
echo"#startup openv.p.n service by oldboy" >> /etc/rc.local
echo"/usr/local/sbin/openv.p.n --config /etc/openv.p.n/server.conf &">> /etc/rc.local
v.p.n启动脚本中的启动方法:
/usr/local/sbin/openv.p.n --daemon --writepid/var/run/openv.p.n/server.pid --config server.confi --cd /etc/openv.p.n
openv.p.n生成的虚拟网卡
tun0 Link encap:UNSPEC HWaddr00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:202.202.202.1 P-t-P:202.202.202.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARPMULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0overruns:0 frame:0
TX packets:0 errors:0 dropped:0overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
生成启动程序
cp/usr/src/openv.p.n-2.0.9/sample-scripts/openv.p.n.init /etc/init.d/openv.p.n
[root@localhost~]# chmod 700 /etc/init.d/openv.p.n
[root@localhost~]# chkconfig --add openv.p.n
[root@localhost~]# chkconfig --list openv.p.n
[root@localhost~]# chkconfig --level 345 openv.p.n on
1.17.windows下安装openv.p.n客户端
http://swupdate.openv.p.n.org/community/release/
xp:openv.p.n-2.2.2-gui-1.0.3-install.exe
win7:openv.p.n-2.2.2-install.exe
下载服务器上的证书:
ca.crt
test.crt
test.key
client.conf
放置在客户端安装目录下的config文件夹中,
修改客户端配置文件
--------------viclient.conf----------------------------
client
dev tun
proto tcp
remote 10.0.0.2852115
resolv-retryinfinite
nobind
persist-key
persist-tun
ca ca.crt
certtest.crt
# 用户证书
key test.key
# 用户密钥
comp-lzo
verb 3
将配置文件改名为test.ov.p.n
____________________________________________________
|
|
|