Centos下openvpn搭建详解

更新时间:2024-04-03 16:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Centos下openvpn搭建详解

本章目录:

加密的数据传输: ssh翻墙/加密数据传输代理: openvpn: 1、openvpn的概述 2、vpn数据包的结构 3、openvpn服务端的部署 4、在linux客户端的部署 5、在windows客户端的部署

SSH翻墙代理:

ssh -p port -qCNgD 7070 username@ip -q 静默模式 -C 压缩 -g 转发代理 -D 本地动态的监听端口 -N 不转发从代理客户发过来的命令

客户端配置: firefox 更改代理服务器,使用socket代理 about:config network.proxy.socks_remote_dns;true

1、openvpn的概述 VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI。该软件最早由James Yonan编写。 OpenVPN允许参与建立VPN的单点使用预设的私钥,第三方证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库,以及SSLv3/TLSv1协议。

OpenVPN能在Linux、xBSD、Mac OS X与Windows 2000/XP上运行。官方网站:http://www.openvpn.net

2、vpn数据包的结构

QQ--> route table 源主机 -->vpn_client-->(sip)softwares(data)(dip)-->route

table-->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

# tar xf lzo-2.03.tar.gz # cd lzo-2.03

# ./configure && make && make install

2、安装openvpn

# tar xf openvpn-2.0.9.tar.gz # cd openvpn-2.0.9

# ./configure --prefix=/opt/vpn && make && make install

# cp /root/openvpn-2.0.9/sample-scripts/openvpn.init /etc/init.d/openvpn # vim /etc/init.d/openvpn

openvpn=\--指定openvpn的存储路径 work=/opt/vpn/etc

# chkconfig --add openvpn # chkconfig openvpn on

2)创建证书和密钥文件

# cd /root/openvpn-2.0.9/easy-rsa --定义变量 # vim vars

export D=`pwd`

export KEY_CONFIG=$D/openssl.cnf export KEY_DIR=$D/keys

echo NOTE: when you run ./clean-all, I will be doing a rm -rf on $KEY_DIR export KEY_SIZE=1024

export KEY_COUNTRY=CN export KEY_PROVINCE=GD export KEY_CITY=GZ

export KEY_ORG=\

export KEY_EMAIL=\

# source vars --执行vars 文件中的代码让变量生效 # ./clean-all --预先清除$KEY_DIR 目录

创建CA证书(颁发机构)

# cd /root/openvpn-2.0.9/easy-rsa --一直回车即可,此脚本会引用上一步生成的变量 # ./build-ca # ls keys/ca* --检查根证书是否生成成功 keys/ca.crt keys/ca.key

创建 dh(Diffie-Hellman)密钥算法文件 # ./build-dh

# ls keys/dh1024.pem --检查是否已生成 keys/dh1024.pem

为VPN服务器创建密钥 # ./build-key-server vpnserver

Common Name (eg, your name or your server's hostname) []:vpnserver.uplooking.com --填上服务器的主机名,后面会用到,其它回车即可 # ls keys/vpnserver.* --验证是否成功 keys/vpnserver.crt keys/vpnserver.csr keys/vpnserver.key

为VPN两个客户端创建密钥

# ./build-key client01.uplooking.com

Common Name (eg, your name or your server's hostname) []:client01.uplooking.com --填上客户端的主机名,后面会用到,其它回车即可

# ./build-key client02.uplooking.com

Common Name (eg, your name or your server's hostname) []:client02.uplooking.com --填上客户端的主机名,后面会用到,其它回车即可 注意:使用“./build-key”脚本创建密钥时,不同的客户端对应的“Common Name”不能相同。

生成 tls-auth 密钥

tls-auth 密钥可以为点对点的VPN 连接提供了进一步的安全验证,如果选择使用这一方式,服务器端和客户端都必须拥有该密钥文件。

# /opt/vpn/sbin/openvpn --genkey --secret keys/ta.key # mkdir /opt/vpn/etc

# cp -r keys/ /opt/vpn/etc/

建立连接的四个过程: 1.建立网络连接

2. 建立SSL对称加密通道 3. 交换公匙

4. 推送VPN策略

3)创建主服务器配置文件 # pwd

/opt/openvpn-2.0.9/sample-config-files # ls

client.conf loopback-server README tls-home.conf firewall.sh office.up server.conf tls-office.conf

home.up openvpn-shutdown.sh static-home.conf xinetd-client-config loopback-client openvpn-startup.sh static-office.conf xinetd-server-config

# vim /opt/vpn/etc/vpn.conf local 192.168.0.1 --指定监听服务的IP 地址 port 1194 --开启默认的1194监听端口 proto udp dev tun --使用SSL Tune 的VPN 隧道模式(虚拟网卡) ca keys/ca.crt --指定根证书 cert keys/vpnserver.crt --指定VPN服务端的证书 key keys/vpnserver.key --指定VPN服务端的私钥 dh keys/dh1024.pem --SSL的加密算法,与tls-auth联动使用 server 10.8.0.0 255.255.255.0 --使用服务器模式,并指定VPN 虚拟网络地址 ifconfig-pool-persist ipp.txt --DHCP地址池

push \ --为client添加到公网内部网段的路由 push \ --为客户端设置DNS 服务器地址 client-config-dir ccd --允许读取ccd/目录下的客户端配置文件 keepalive 10 120 --每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,连接丢失,需要重新连接 tls-auth keys/ta.key 0 --指定tls-auth 密钥 cipher BF-CBC --加密算法与客户端要保持一致 comp-lzo --支持数据压缩 max-clients 100 --允许的最大并发VPN 连接数 user nobody group nobody --使用什么用户和组来启动VPN persist-key --通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys persist-tun --通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的 status openvpn-status.log --定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作 log-append openvpn.log --记录日志,每次重新启动openvpn后删除原有的log信息 verb 3 --日志级别 mute 20 --如果在日志里边出现相同日志,每20条日志显示一次

4)为客户端创建扩展配置文件(可以理解为子配置文件) # cd /opt/vpn/etc # mkdir ccd

# vim ccd/client01.uplooking.com --这个文件名必须是在生成密钥的时候填写的名字 ifconfig-push 10.8.0.2 10.8.0.1 --指定client的本地地址(tun0)、对端地址(P-t-P)

5)启动openvpn服务,并验证: # /etc/init.d/openvpn start

Starting openvpn: [ OK ]

# netstat -unlp |grep 1194

udp 0 0 192.168.0.1:1194 0.0.0.0:* 11821/openvpn

4、在linux客户端的部署

在已经配好的机器上:

# rsync -avzR /opt/vpn/ /etc/rc.d/init.d/openvpn /opt/lzo-2.03 192.168.0.179:/ 注意的是:

在vpnclient上,不可以有vpnserver上的vpn.server tun0 要注意了啊。

还有就是,时间的同步问题也要关注。

1)安装lzo # cd /root

# tar xf lzo-2.03.tar.gz # cd lzo-2.03

# ./configure && make && make install

2)安装openvpn

# tar xf openvpn-2.0.9.tar.gz # cd openvpn-2.0.9

# ./configure --prefix=/opt/vpn && make && make install

# cp /root/openvpn-2.0.9/sample-scripts/openvpn.init /etc/init.d/openvpn # vim /etc/init.d/openvpn

openvpn=\--指定openvpn的存储路径 work=/opt/vpn/etc

# chkconfig --add openvpn # mkdir /opt/vpn/etc/keys -p

3)从服务器下载密钥(192.168.0.1-->192.168.0.3),以下命令是在vpn服务器上操作 # cd /opt/vpn/etc/keys

# scp client01.uplooking.com.* ta.key ca.crt 192.168.0.3:/opt/vpn/etc/keys/

4)建立客户端的配置文件

# vim /opt/vpn/etc/client.conf client --使用客户端模式 dev tun proto udp

remote 192.168.0.1 1194 --点对点主服务器的地址、端口 resolv-retry infinite nobind

user nobody group nobody persist-key persist-tun ca keys/ca.crt

cert keys/client.uplooking.com.crt key keys/client.uplooking.com.key ns-cert-type server tls-auth keys/ta.key 1 cipher BF-CBC --需和GW1 服务器端保持一致 comp-lzo verb 3 mute 20

5)启动vpn服务 # service openvpn start # chkconfig openvpn on

6)在VPN服务器上启用路由和SNAT # vim /etc/sysctl.conf net.ipv4.ip_forward = 1 # sysctl -p

# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to 192.168.1.1 # iptables -t nat -L -n

7)测试公网的client01.uplooking.com是否能访问IDC内网的主机 # ping 192.168.1.2 # ssh 192.168.1.2 --能ping通和远程登录表示实验成功

ping/ssh/mysql-->data-->(10.8.0.x)data(192.168.1.2)-->route

table-->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.5 tun0:10.8.0.1

1、由mysql客户产生数据包请求,源地址192.168.0.3,目标地址是192.168.1.2 2、数据到达网络层,先查本机路由表,进行匹配,应该从第三条路由出去 # route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface 10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0 192.168.1.0 10.8.0.5 255.255.255.0 UG 0 0 0 tun0 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

3、因为tun0是openvpn产生虚拟网卡,所以数据理所当然到达openvpn上,vpn客户端接收到数据后>,先使用lzo压缩数据,然后再调本机自己私钥来进行数据加密。

4、封装上新IP包头,然后再路由至服务端

5、服务器解密、解压缩,然后再根据目标来转发(路由/SNAT),数据包最终到达目的地。

5、在windows客户端的部署

1)安装软件

2)下载密钥

3)修改配置文件 client dev tun proto udp

remote 192.168.0.1 1194 resolv-retry infinite nobind

user nobody group nobody persist-key persist-tun ca ca.crt

cert client02.uplooking.com.crt key client02.uplooking.com.key ns-cert-type server tls-auth ta.key 1 cipher BF-CBC comp-lzo verb 3 mute 20 4)测试

user nobody group nobody persist-key persist-tun ca ca.crt

cert client02.uplooking.com.crt key client02.uplooking.com.key ns-cert-type server tls-auth ta.key 1 cipher BF-CBC comp-lzo verb 3 mute 20 4)测试

本文来源:https://www.bwwdw.com/article/fh2r.html

Top