Centos下openvpn搭建详解.docx
《Centos下openvpn搭建详解.docx》由会员分享,可在线阅读,更多相关《Centos下openvpn搭建详解.docx(14页珍藏版)》请在冰豆网上搜索。

Centos下openvpn搭建详解
Centos下openvpn搭建详解
本章目录:
加密的数据传输:
ssh翻墙/加密数据传输代理:
openvpn:
1、openvpn的概述
2、vpn数据包的结构
3、openvpn服务端的部署
4、在linux客户端的部署
5、在windows客户端的部署
SSH翻墙代理:
ssh-pport-qCNgD7070username@ip
-q静默模式
-C压缩
-g转发代理
-D本地动态的监听端口
-N不转发从代理客户发过来的命令
客户端配置:
firefox
更改代理服务器,使用socket代理
about:
config
network.proxy.socks_remote_dns;true
1、openvpn的概述
VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI。
该软件最早由JamesYonan编写。
OpenVPN允许参与建立VPN的单点使用预设的私钥,第三方证书,或者用户名/密码来进行身份验证。
它大量使用了OpenSSL加密库,以及SSLv3/TLSv1协议。
OpenVPN能在Linux、xBSD、MacOSX与Windows2000/XP上运行。
官方网站:
2、vpn数据包的结构
QQ-->
routetable
源主机-->vpn_client-->(sip)softwares(data)(dip)-->routetable-->vpn_software-->encrypt-->(new_sip)encrypt_data(new_dip)-->router-->next_router
目标主机:
-->vpnserver-->d_encrypt-->根据内层IP包头再次做数据转发
3、openvpn服务端的部署
1)在VPN(192.168.0.1)上安装openvpn软件
软件包组成:
openvpn--实现VPN的服务
lzo--实现数据压缩
1、安装lzo
#cd/root
#tarxflzo-2.03.tar.gz
#cdlzo-2.03
#./configure&&make&&makeinstall
2、安装openvpn
#tarxfopenvpn-2.0.9.tar.gz
#cdopenvpn-2.0.9
#./configure--prefix=/opt/vpn&&make&&makeinstall
#cp/root/openvpn-2.0.9/sample-scripts/openvpn.init/etc/init.d/openvpn
#vim/etc/init.d/openvpn
openvpn="/opt/vpn/sbin/openvpn"--指定openvpn的存储路径
work=/opt/vpn/etc
#chkconfig--addopenvpn
#chkconfigopenvpnon
2)创建证书和密钥文件
#cd/root/openvpn-2.0.9/easy-rsa--定义变量
#vimvars
exportD=`pwd`
exportKEY_CONFIG=$D/f
exportKEY_DIR=$D/keys
echoNOTE:
whenyourun./clean-all,Iwillbedoingarm-rfon$KEY_DIR
exportKEY_SIZE=1024
exportKEY_COUNTRY=CN
exportKEY_PROVINCE=GD
exportKEY_CITY=GZ
exportKEY_ORG="UPLOOK.Inc"
exportKEY_EMAIL="*******************"
#sourcevars--执行vars文件中的代码让变量生效
#./clean-all--预先清除$KEY_DIR目录
创建CA证书(颁发机构)
#cd/root/openvpn-2.0.9/easy-rsa--一直回车即可,此脚本会引用上一步生成的变量
#./build-ca
#lskeys/ca*--检查根证书是否生成成功
keys/ca.crtkeys/ca.key
创建dh(Diffie-Hellman)密钥算法文件
#./build-dh
#lskeys/dh1024.pem--检查是否已生成
keys/dh1024.pem
为VPN服务器创建密钥
#./build-key-servervpnserver
CommonName(eg,yournameoryourserver'shostname)[]:
--填上服务器的主机名,后面会用到,其它回车即可
#lskeys/vpnserver.*--验证是否成功
keys/vpnserver.crtkeys/vpnserver.csrkeys/vpnserver.key
为VPN两个客户端创建密钥
#./build-key
CommonName(eg,yournameoryourserver'shostname)[]:
--填上客户端的主机名,后面会用到,其它回车即可
#./build-key
CommonName(eg,yournameoryourserver'shostname)[]:
--填上客户端的主机名,后面会用到,其它回车即可
注意:
使用“./build-key”脚本创建密钥时,不同的客户端对应的“CommonName”不能相同。
生成tls-auth密钥
tls-auth密钥可以为点对点的VPN连接提供了进一步的安全验证,如果选择使用这一方式,服务器端和客户端都必须拥有该密钥文件。
#/opt/vpn/sbin/openvpn--genkey--secretkeys/ta.key
#mkdir/opt/vpn/etc
#cp-rkeys//opt/vpn/etc/
建立连接的四个过程:
1.建立网络连接
2.建立SSL对称加密通道
3.交换公匙
4.推送VPN策略
3)创建主服务器配置文件
#pwd
/opt/openvpn-2.0.9/sample-config-files
#ls
client.confloopback-serverREADMEtls-home.conf
firewall.shoffice.upserver.conftls-office.conf
home.upopenvpn-shutdown.shstatic-home.confxinetd-client-config
loopback-clientopenvpn-startup.shstatic-office.confxinetd-server-config
#vim/opt/vpn/etc/vpn.conf
local192.168.0.1--指定监听服务的IP地址
port1194--开启默认的1194监听端口
protoudp
devtun--使用SSLTune的VPN隧道模式(虚拟网卡)
cakeys/ca.crt--指定根证书
certkeys/vpnserver.crt--指定VPN服务端的证书
keykeys/vpnserver.key--指定VPN服务端的私钥
dhkeys/dh1024.pem--SSL的加密算法,与tls-auth联动使用
server10.8.0.0255.255.255.0--使用服务器模式,并指定VPN虚拟网络地址
ifconfig-pool-persistipp.txt--DHCP地址池
push"route192.168.1.0255.255.255.0"--为client添加到公网内部网段的路由
push"dhcp-optionsDNS8.8.8.8"--为客户端设置DNS服务器地址
client-config-dirccd--允许读取ccd/目录下的客户端配置文件
keepalive10120--每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,连接丢失,需要重新连接
tls-authkeys/ta.key0--指定tls-auth密钥
cipherBF-CBC--加密算法与客户端要保持一致
comp-lzo--支持数据压缩
max-clients100--允许的最大并发VPN连接数
usernobody
groupnobody--使用什么用户和组来启动VPN
persist-key--通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun--通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的
statusopenvpn-status.log--定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
log-appendopenvpn.log--记录日志,每次重新启动openvpn后删除原有的log信息
verb3--日志级别
mute20--如果在日志里边出现相同日志,每20条日志显示一次
4)为客户端创建扩展配置文件(可以理解为子配置文件)
#cd/opt/vpn/etc
#mkdirccd
#vimccd/--这个文件名必须是在生成密钥的时候填写的名字
ifconfig-push10.8.0.210.8.0.1--指定client的本地地址(tun0)、对端地址(P-t-P)
5)启动openvpn服务,并验证:
#/etc/init.d/openvpnstart
Startingopenvpn:
[OK]
#netstat-unlp|grep1194
udp00192.168.0.1:
11940.0.0.0:
*11821/openvpn
4、在linux客户端的部署
在已经配好的机器上:
#rsync-avzR/opt/vpn//etc/rc.d/init.d/openvpn/opt/lzo-2.03192.168.0.179:
/
注意的是:
在vpnclient上,不可以有vpnserver上的vpn.server
tun0要注意了啊。
还有就是,时间的同步问题也要关注。
1)安装lzo
#cd/root
#tarxflzo-2.03.tar.gz
#cdlzo-2.03
#./configure&&make&&makeinstall
2)安装openvpn
#tarxfopenvpn-2.0.9.tar.gz
#cdopenvpn-2.0.9
#./configure--prefix=/opt/vpn&&make&&makeinstall
#cp/root/openvpn-2.0.9/sample-scripts/openvpn.init/etc/init.d/openvpn
#vim/etc/init.d/openvpn
openvpn="/opt/vpn/sbin/openvpn"--指定openvpn的存储路径
work=/opt/vpn/etc
#chkconfig--addopenvpn
#mkdir/opt/vpn/etc/keys-p
3)从服务器下载密钥(192.168.0.1-->192.168.0.3),以下命令是在vpn服务器上操作
#cd/opt/vpn/etc/keys
#scp.*ta.keyca.crt192.168.0.3:
/opt/vpn/etc/keys/
4)建立客户端的配置文件
#vim/opt/vpn/etc/client.conf
client--使用客户端模式
devtun
protoudp
remote192.168.0.11194--点对点主服务器的地址、端口
resolv-retryinfinite
nobind
usernobody
groupnobody
persist-key
persist-tun
cakeys/ca.crt
certkeys/.crt
keykeys/.key
ns-cert-typeserver
tls-authkeys/ta.key1
cipherBF-CBC--需和GW1服务器端保持一致
comp-lzo
verb3
mute20
5)启动vpn服务
#serviceopenvpnstart
#chkconfigopenvpnon
6)在VPN服务器上启用路由和SNAT
#vim/etc/sysctl.conf
net.ipv4.ip_forward=1
#sysctl-p
#iptables-tnat-APOSTROUTING-s10.8.0.0/24-jSNAT--to192.168.1.1
#iptables-tnat-L-n
7)测试公网的是否能访问IDC内网的主机
#ping192.168.1.2
#ssh192.168.1.2--能ping通和远程登录表示实验成功
ping/ssh/mysql-->data-->(10.8.0.x)data(192.168.1.2)-->routetable-->tun0-->openvpn-->encrypt((10.8.0.x)data(192.168.1.2))-->encrypt_data-->(192.168.0.3)encrypt_data(192.168.0.1:
1194)-->switch/router-->vpnserver(192.168.0.1:
1194)-->dencrypt-->(10.8.0.x)data(192.168.1.2)-->route-->SNAT-->(192.168.1.1)data(192.168.1.2)-->192.168.1.2
mysql(192.168.0.3)<-(192.168.0.1)vpn(192.168.1.1)->mysqld(192.168.1.2)
tun0:
10.8.0.5tun0:
10.8.0.1
1、由mysql客户产生数据包请求,源地址192.168.0.3,目标地址是192.168.1.2
2、数据到达网络层,先查本机路由表,进行匹配,应该从第三条路由出去
#route-n
KernelIProutingtable
DestinationGatewayGenmaskFlagsMetricRefUseIface
10.8.0.50.0.0.0255.255.255.255UH000tun0
10.8.0.110.8.0.5255.255.255.255UGH000tun0
192.168.1.010.8.0.5255.255.255.0UG000tun0
192.168.0.00.0.0.0255.255.255.0U000eth0
3、因为tun0是openvpn产生虚拟网卡,所以数据理所当然到达openvpn上,vpn客户端接收到数据后>,先使用lzo压缩数据,然后再调本机自己私钥来进行数据加密。
4、封装上新IP包头,然后再路由至服务端
5、服务器解密、解压缩,然后再根据目标来转发(路由/SNAT),数据包最终到达目的地。
5、在windows客户端的部署
1)安装软件
2)下载密钥
3)修改配置文件
client
devtun
protoudp
remote192.168.0.11194
resolv-retryinfinite
nobind
usernobody
groupnobody
persist-key
persist-tun
caca.crt
cert.crt
key.key
ns-cert-typeserver
tls-authta.key1
cipherBF-CBC
comp-lzo
verb3
mute20
4)测试