运维攻城师程序员

四、Openvpn在Centos的部署和Windows的使用

2017-08-16  本文已影响88人  armo要多读书

1、简介

VPN虚拟专用网络,可以让研发在家在任何地方登陆VPN之后都能愉快的连接公司内网的各个服务器。公司研发GG都需要这个,万一哪天出什么问题了在啥都不会就不好了,要未雨绸缪啊。
此处只介绍openvpn的部署,关于虚拟子网路由和NAT规则有网络基础很容易想明白。(无非就是将虚拟子网的网段nat成openvpn服务器的一个屋里接口或者是虚拟接口而已)

2、需要的组件

openvpn
easy-rsa
Linux转发功能

3、部署详细

#打开Linux数据包转发功能
[root@node1 ~]# more /etc/sysctl.conf 
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
[root@node1 ~]# sysctl -p
#安装openvpn和easy-rsa.其中openvpn提供vpn服务,easy-rsa为vpn服务提供CA
yum -y install openvpn easy-rsa
#制作CA,服务端证书和客户端证书
[root@node1 ~]# cd /usr/share/easy-rsa/2.0/
#修改默认参数值,CA和证书都可使用该默认参数进行制作
[root@node1 2.0]# vi vars 
export KEY_COUNTRY="CN"
export KEY_PROVINCE="BJ"
export KEY_CITY="BJ"
export KEY_ORG="so"
export KEY_EMAIL="armo@so.com"
export KEY_OU="armo"
[root@node1 2.0]# source vars   #参数生效
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/easy-rsa/2.0/keys
[root@node1 2.0]# ./clean-all   #清楚之前所有记录
[root@node1 2.0]# 
[root@node1 2.0]# ls keys/
index.txt  serial
#制作CA
[root@node1 2.0]# ./build-ca    #一路回车使用默认值创建即可
[root@node1 2.0]# ls keys/
ca.crt  ca.key  index.txt  serial
#使用CA颁发server端证书
[root@node1 2.0]# ./build-key-server armo_server     #回车到下面两项选择Y,继续。
Certificate is to be certified until Aug 14 08:15:42 2027 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@node1 2.0]# 
[root@node1 2.0]# ls keys/
01.pem  ca.crt  ca.key  index.txt  index.txt.attr  index.txt.old  serial  serial.old  armo_server.crt  armo_server.csr  armo_server.key
#使用CA颁发客户端证书
[root@node1 2.0]# ./build-key armo_client           #回车到下面两项选择Y,继续。
Certificate is to be certified until Aug 14 08:29:40 2027 GMT (3650 days)
Sign the certificate? [y/n]:y的


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@node1 2.0]# 
[root@node1 2.0]# ls keys/
01.pem  02.pem  ca.crt  ca.key  armo_client.crt  armo_client.csr  armo_client.key  index.txt  index.txt.attr  index.txt.attr.old  index.txt.old  serial  serial.old  armo_server.crt  armo_server.csr  armo_server.key
#创建dh,生成2048pm
[root@node1 2.0]# ./build-dh 
[root@node1 2.0]# ll keys/dh2048.pem 
-rw-r--r-- 1 root root 424 Aug 16 16:49 keys/dh2048.pem
#将所有证书移动到openvpn配置目录下
[root@node1 2.0]# cp -a keys/ /etc/openvpn/
#修改openvpn服务端配置文件
[root@node1 2.0]# rpm -ql openvpn           #查询openvpn安装所有生成的文件
/usr/share/doc/openvpn-2.4.3/sample/sample-config-files/server.conf
[root@node1 2.0]# cp /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/server.conf /etc/openvpn/
[root@node1 2.0]# cp /etc/openvpn/server.conf /etc/openvpn/server.conf.bak
[root@node1 ~]# vi /etc/openvpn/server.conf
local 192.168.52.129
port 1194
proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt         #根CA
cert /etc/openvpn/keys/server.crt   #服务器证书
key /etc/openvpn/keys/server.key    #服务器证书key
dh /etc/openvpn/keys/dh2048.pem     #pem
server 1.1.1.0 255.255.255.0        #客户端地址池,所有登录VPN的客户端,都会获得该范围中的一个IP地址
ifconfig-pool-persist ipp.txt       #防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
push "route 1.1.1.0 255.255.255.0"  #需要下发给客户端的路由信息,根据内网服务器网段而定
push "dhcp-option DNS 8.8.8.8"      #需要下发给客户端的DNS信息
client-to-client                    #允许client之间通信
keepalive 10 120                    #10s一次keepalive,120s内无信息断开
comp-lzo                            #开启连接压缩,客户端和服务端必须同时开始或者同时关闭
user nobody
group nobody
username-as-common-name             #多用户同时登陆时可用同一账户
status openvpn-status.log           #以登录的客户端信息
log         openvpn.log
log-append  openvpn.log
verb 5                              #日志等级
#客户端下载地址:https://openvpn.net/index.php/open-source/downloads.html
#配置windows客户端配置文件,将一下内容保存为armo.ovpn,后缀格式固定不可变
client
dev tun
proto tcp
remote  192.168.52.129 1194
resolv-retry infinite               #断线自动重连
nobind                              #不绑定本地端口
persist-key                         
persist-tun
ca ca.crt                           #指定CA文件路径
cert armo_clent.crt                 #指定客户端证书路径
key armo_client.key                 #指定客户端证书key路径
ns-cert-type server                 #使用服务器校验方式
verb 3                              #日志级别
#从服务器中下载ca.crt、armo_clent.crt、armo_client.key   以及armo.ovpn保存至客户端的config文件夹中
#此时可采用客户端证书进行登录VPN,一个用户需要制作一个证书十分的不方便,Openvpn在提供了openvpn-auth-pam.so模块可以协助认证,默认可使用非root的系统账号,客户端将账号密码打包传递给openvpn-auth-pam.so,由该模块验证提供的账号密码是否是正确的系统账号,完成登录过程。
#配置项:
#server端配置项,新增两行
[root@node1]# vi /etc/openvpn/server.conf
client-cert-not-required
plugin /etc/openvpn/openvpn-auth-pam.so login
#client端配置项,删除cert和key的配置,仅保留ca即可,然后新增以下参数
auth-user-pass
#重启服务后,此时打开客户端登录VPN时则需要输入服务器系统的账号密码进行登录
#关于路由和NAT问题根据各个环境不同需要单独进行配置,需要注意的是NAT转换后的IP,以及openvpn服务端口的放通,有需要的话也可以将内网服务器的网关全部指向openvpn服务器

最偷懒的登录方式,将客户端的账号密码保存到文件,让程序自动读取后登录

修改客户端配置文件
auth-user-pass pass.txt
在conf目录下创建pass.txt文件,将用户名写到第一行,密码写在第二行,就可以实现自动登录了,再也不用每次都输入账号密码,达到记住用户名密码的效果啦

上一篇 下一篇

猜你喜欢

热点阅读