Centos 搭建 OpenVPN

中级 wangleiadmin 2070℃ 0评论


1. yum安装openvpn (亲测环境Centos 6.8)

  • 配置yum源
1.卸载之前安装的epel
rpm -e epel-release
2.下载阿里提供的epel
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo
yum clean all
yum makecache
3.更改阿里云源
rm -rf /etc/yum.repos.d/*
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum repolist

已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com

yum install -y epel-release 

2.时间同步

yum -y install ntpdate
ntpdate time.windows.com

3.安装openvpn

 yum install -y openvpn easy-rsa
 初始化服务端
cp /usr/share/doc/openvpn-2.3.11/sample/sample-config-files/server.conf /etc/openvpn/

cp -r /usr/share/easy-rsa/2.0/* /etc/openvpn/

注:(openvpn-2.3.11这个目录是以当前openvpn版本命名的)
配置PKI
cd /etc/openvpn/
vim vars
找到”export KEY_SIZE=”这行,根据情况把1024改成2048或者4096
再定位到最后面,会看到类似下面这样的

export KEY_COUNTRY=”US”
export KEY_PROVINCE=”CA”
export KEY_CITY=”SanFrancisco”
export KEY_ORG=”Fort-Funston”
export KEY_EMAIL=”me@myhost.mydomain“
更改为:
xport KEY_COUNTRY=”CN”
export KEY_PROVINCE=”SH”
export KEY_CITY=”Shanghai”
export KEY_ORG=”xxx”
export KEY_EMAIL=”xxx@xxx.cn“
注:在后面生成服务端ca证书时,这里的配置会作为缺省配置
做SSL配置文件软链:
ln -s openssl-1.0.0.cnf openssl.cnf
修改vars文件可执行并调用
chmod +x vars

产生证书

source ./vars
  • NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys
    注:也就是如果执行./clean-all,就会清空/etc/openvpn/keys下所有文件

配置证书

1.清空原有证书
./clean-all
注:下面这个命令在第一次安装时可以运行,以后在添加完客户端后慎用,因为这个命令会清除所有已经生成的证书密钥,和上面的提示对应
2.生成服务器端ca证书
./build-ca (一路回车即可)

产生服务器证书

./build-key-server openvpn
生成服务器端密钥证书, 后面这个openvpn就是服务器名,也可以自定义,可以随便起,但要记住,后面要用到

生成DH验证文件

 ./build-dh
生成diffie hellman参数,用于增强openvpn安全性

生成客户端证书

./build-key wanglei

生成ta.key文件

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

编辑服务配置文件

vim /etc/openvpn/server.conf
注:可按照默认模板配置,本例为自定义配置文件:

# 设置监听IP,默认是监听所有IP
;local a.b.c.d

# 设置监听端口,必须要对应的在防火墙里面打开
port 1194

# 设置用TCP还是UDP协议?
;proto tcp
proto tcp

# 设置创建tun的路由IP通道,还是创建tap的以太网通道,由于路由IP容易控制,所以推荐使用tunnel;
# 但如果如IPX等必须使用第二层才能通过的通讯,则可以用tap方式,tap也就是以太网桥接
;dev tap
dev tun

# 这里是重点,必须指定SSL/TLS root certificate (ca),
# certificate(cert), and private key (key)
# ca文件是服务端和客户端都必须使用的,但不需要ca.key
# 服务端和客户端指定各自的.crt和.key
# 请注意路径,可以使用以配置文件开始为根的相对路径,
# 也可以使用绝对路径
# 请小心存放.key密钥文件
ca keys/ca.crt
cert keys/openvpn.example.com.crt
key keys/openvpn.example.com.key # This file should be kept secret

# 指定Diffie hellman parameters.

(默认是2048,如果生成ca的时候修改过dh参数“export KEY_SIZE”则改为对应的数字)

dh keys/dh2048.pem

# 配置VPN使用的网段,OpenVPN会自动提供基于该网段的DHCP服务,但不能和任何一方的局域网段重复,保证唯一
server 10.20.0.0 255.255.255.0

# 维持一个客户端和virtual IP的对应表,以方便客户端重新连接可以获得同样的IP
ifconfig-pool-persist ipp.txt

# 为客户端创建对应的路由,以另其通达公司网内部服务器
# 但记住,公司网内部服务器也需要有可用路由返回到客户端
;push "route 192.168.20.0 255.255.255.0"
push "route 10.X.0.0 255.255.0.0"  (X按照机房网段修改)

# 若客户端希望所有的流量都通过VPN传输,则可以使用该语句
# 其会自动改变客户端的网关为VPN服务器,推荐关闭
# 一旦设置,请小心服务端的DHCP设置问题
;push "redirect-gateway def1 bypass-dhcp"

# 用OpenVPN的DHCP功能为客户端提供指定的DNS、WINS等
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

# 默认客户端之间是不能直接通讯的,除非把下面的语句注释掉
client-to-client

# 下面是一些对安全性增强的措施
# For extra security beyond that provided by SSL/TLS, create an "HMAC firewall"
# to help block DoS attacks and UDP port flooding.
#
# Generate with:
# openvpn --genkey --secret ta.key
#
# The server and each client must have a copy of this key.
# The second parameter should be 0 on the server and 1 on the clients.
; tls-auth ta.key 0 # This file is secret
(这句要注释掉)

# 使用lzo压缩的通讯,服务端和客户端都必须配置
comp-lzo

# 输出短日志,每分钟刷新一次,以显示当前的客户端
status /var/log/openvpn/openvpn-status.log

# 缺省日志会记录在系统日志中,但也可以导向到其他地方
# 建议调试的使用先不要设置,调试完成后再定义
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log

# 设置日志的级别
#
# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose
verb 3

启动服务

service openvpn start
chkconfig openvpn on(开机启动)

开启路由转发功能

找到net.ipv4.ip_forward = 0 (改为1)
 sysctl -p


设置路由转发

iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth0 -j MASQUERADE

客户端配置

  • 将服务器端生成的key(ca.crt,client.crt,client.key,ta.key)下载到本地。
  • 进入客户端OpenVPN目录,将sample-config下的client.ovpn文件复制到config目录
client端做相应的修改:
client
dev tun
proto udp
remote xxx.xxx.xxx.xxx 1194
ca ca.crt
cert xxx.crt
key xxx.key
; tls-auth ta.key 0 (这句要注释掉)
comp-lzo
persist-key
persist-tun  

将key和新建的client.ovpn放到C:/Program Files/OpenVPN/config目录下,到桌面双击openvpn图标即可。

openvpn 设置用户名密码登录

  • 修改主配置文件
vim  /etc/openvpn/server.conf
添加:
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
client-cert-not-required
username-as-common-name

checkpsw.sh脚本编写


#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman 
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.

PASSFILE="/etc/openvpn/psw-file"
LOG_FILE="/var/log/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`

###########################################################

if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
  exit 1
fi

CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`

if [ "${CORRECT_PASSWORD}" = "" ]; then
  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
  exit 1
fi

if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
  exit 0
fi

echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1

添加权限

chmod +x checkpsw.sh

注:需根据openvpn路径来设置脚本中 PASSFILE ,LOG_FILE是指定OPENVPN密码文件日志
准备用户名密码认证文件

vim /etc/openvpn/psw-file
wanglei 123456
chmod 400 psw-file
chown nobody:nobody psw-file

在客户端注释掉 crt key 两个证书密钥,并且加上

auth-user-pass

转载请注明:暖风 » Centos 搭建 OpenVPN

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址