专业的编程技术博客社区

网站首页 > 博客文章 正文

Centos6下搭建openvpn并使用密钥形式登录

baijin 2024-09-11 00:39:23 博客文章 6 ℃ 0 评论

OpenVPN是一个用于创建虚拟专用网络加密通道的免费开源软件。使用OpenVPN可以方便地在家庭、办公场所、住宿酒店等不同网络访问场所之间搭建类似于局域网的专用网络通道。

我这里搭建主要为了在家也能连到公司进行办公。

一、服务器端安装及配置

网关和VPN服务器不是同一个设备

服务器环境:干净的CentOS6.5 64位系统

内网IP:192.168.1.250

外网IP:111.111.111.111(公司的固定外网IP)

OpenVPN版本:OpenVPN 2.3.11-1.el6

1、安装前准备

# 关闭selinux

setenforce 0
sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config

# 安装openssl和lzo,lzo用于压缩通讯数据加快传输速度

yum -y install openssl openssl-devel
yum -y install lzo

# 安装epel源

rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

2、安装及配置OpenVPN和easy-rsa

# 安装openvpn和easy-rsa

yum -y install openvpn easy-rsa

# 修改vars文件

cd /usr/share/easy-rsa/2.0/
vim vars

# 修改注册信息,比如公司地址、公司名称、部门名称等。

export KEY_COUNTRY="CN"
export KEY_PROVINCE="GD"
export KEY_CITY="SZ"
export KEY_ORG="XLCWNET"
export KEY_EMAIL="chengzhi@xlcwnet.com"
export KEY_OU="guest"
export KEY_NAME="XLCWNET"

# 初始化环境变量

source vars

# 清除keys目录下所有与证书相关的文件

# 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/2.0/keys目录里 ##这个是在第一次执行,后面不需要再执行了

./clean-all

# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)

./build-ca

# 为服务端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)

./build-key-server server

# 每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份

# 为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)

./build-key client1
./build-key client2

# 创建密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)

./build-dh

# 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)

openvpn --genkey --secret keys/ta.key

文件生成后都在查看/usr/share/easy-rsa/2.0/keys目录下

3、创建服务器端配置文件

# 在openvpn的配置目录下新建一个keys目录

mkdir /etc/openvpn/keys

# 将需要用到的openvpn证书和密钥复制一份到刚创建好的keys目录中

cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/

# 复制一份服务器端配置文件模板server.conf到/etc/openvpn/

cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/server.conf /etc/openvpn/

# 编辑server.conf

vim /etc/openvpn/server.conf
port 1194
# 改成tcp,默认使用udp,如果使用HTTP Proxy,必须使用tcp协议
proto tcp
dev tun
# 路径前面加keys,全路径为/etc/openvpn/keys/ca.crt
ca keys/ca.crt
cert keys/server.crt
key keys/server.key # This file should be kept secret
dh keys/dh2048.pem
# 默认虚拟局域网网段,不要和实际的局域网冲突即可
server 172.16.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# 172.16.0.0/24是我这台VPN服务器所在的内网的网段,读者应该根据自身实际情况进行修改
push "redirect-gateway def1 bypass-dhcp"
# 设置客户端调用服务器端的路由(比较重要,因为我的VPN服务器不是网关,没有这句可能会出现连上VPN后无法访问内网的情况)
push "dhcp-option DNS 114.114.114.114"
# 设置客户端调用的DNS(比较重要,如果连上VPN的客户端需要连接外网的话,就需要这个域名解析)
push "route 192.168.0.0 255.255.0.0"
# 可以让客户端之间相互访问直接通过openvpn程序转发,根据需要设置
# 实践证明这个不需要也是可以的
#偶尔看到这句话,原来是提高效率的,暂时看出来效果
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
client-to-client
# 如果客户端都使用相同的证书和密钥连接VPN,一定要打开这个选项,否则每个证书只允许一个人连接VPN
duplicate-cn
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo
persist-key
persist-tun
# OpenVPN的状态日志,默认为/etc/openvpn/openvpn-status.log
status openvpn-status.log
# OpenVPN的运行日志,默认为/etc/openvpn/openvpn.log
log-append openvpn.log
# 改成verb 5可以多查看一些调试信息
verb 3

4、配置内核和防火墙,启动服务

# 开启路由转发功能

sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sysctl -p

# 配置防火墙,别忘记保存

iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -d 192.168.0.0/16 -o eth1 -j SNAT --to-source 192.168.1.250

##设置172.17.0.0/24网段访问192.168.0.0/16网段走eth1的192.168.1.250

iptables -t nat -A POSTROUTING -s 172.16.0.0/24 ! -d 192.168.0.0/16 -o eth0 -j SNAT --to-source 111.111.111.111

##设置172.17.0.0/24网段访问除了192.168.0.0/16网段以外网段走eth0的111.111.111.111

iptables -A FORWARD -d 172.16.0.0/24 -j ACCEPT
iptables -A FORWARD -s 172.16.0.0/24 -j ACCEPT

##(一定需要,如果想客户端访问公司内网其他机器的话)

service iptables save

# 启动openvpn并设置为开机启动

service openvpn start
chkconfig openvpn on

5、创建客户端配置文件

# 复制一份client.conf模板命名为client.ovpn

cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/client.conf client.ovpn

# 编辑client.ovpn

vim client.ovpn
client
dev tun
# 改为tcp
proto tcp
# OpenVPN服务器的外网IP和端口
remote 111.111.111.111 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
# client1的证书
cert client1.crt
# client1的密钥
key client1.key
remote-cert-tls server
###ns-cert-type server (看到网上很多这个选项,不知道干嘛的,默认没有,尝试没有加发现也没问题)
# 去掉前面的注释
tls-auth ta.key 1
comp-lzo
verb 3

二、Windows客户端安装及配置

客户端系统:Windows7 64位

内网IP:172.16.4.4

OpenVPN版本:OpenVPN 2.3.3 Windows 64位

1、下载安装OpenVPN

OpenVPN 2.3.3 Windows 32位 安装文件:

http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.11-I001-i686.exe

OpenVPN 2.3.3 Windows 64位 安装文件:

http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.11-I001-x86_64.exe

2、配置client

将OpenVPN服务器上的client.ovpn、ca.crt、client1.crt、client1.key、ta.key上传到Windows客户端安装目录下的config文件夹(C:\Program Files\OpenVPN\config)

3、启动OpenVPN GUI

在电脑右下角的openvpn图标上右击,选择“Connect”。正常情况下应该能够连接成功,分配正常的IP。

这个图是别人的,所以IP段是10.8.0.0/16 按照我发的实际IP段是172.16.0.0/16网段,按照上面的操作没有问题,我已经操作过,并不是百度别人复制过来的,只是为了写这个文章临时找的图片。

4、测试

ping通服务器的内网IP,说明已经接入到服务器的内部网络。

到OpenVPN服务器上查看客户端的连接情况,查看状态文件/etc/openvpn/openvpn-status.log:

后续

因同事离职,所以需注销其vpn证书。即要注销两张证书

执行命令进入openvpn的安装目录cd /usr/share/easy-rsa/2.0/

在easy-rsa目录下。使用revoke-full命令来注销其证书。先把一位同事证书文件放到easy-rsa/keys下,然后执行

# 初始化环境变量

source vars
./revoke-full client1

client1为证书名称,这条命令执行完成之后, 会在 keys 目录下面, 生成一个 crl.pem 文件,这个文件中包含了吊销证书的名单。接着再次执行

./revoke-full client2

这条命令执行完成之后, 会在 keys 目录下面, 生成一个新的crl.pem 文件覆盖旧的。

把此crl.pem文件放到相应的配置目录config下,然后在配置文件加入如下参数,重新启动openvpn服务器即可。

cp keys/crl.pem /etc/openvpn/keys/
vim /etc/openvpn/server.conf
crl-verify keys/crl.pem

注:如以后需要再注销其他证书,可继续执行revoke-full client3,生成新的crl.pem文件替换配置目录下的文件,重新启动openvpn服务即可。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表