OpenVPN的点对点简单实现

准备条件

server端为本地的一台虚拟机搭建的centos系统;

client端为本地Windows系统

服务端部署

1.准备源下载软件包

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
yum clean all
yum makecache

# 安装依赖软件包
yum install -y lzo lzo-devel openssl openssl-devel pam pam-devel
yum install -y pkcs11-helper pkcs11-helper-devel rpm-build

# 安装OpenVPN
yum install openvpn -y

2.下载并配置EasyRSA

#下载EasyRSA 3.0.7
cd /opt/
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.7/EasyRSA-3.0.7.tgz
tar xf EasyRSA-3.0.7.tgz
mv EasyRSA-3.0.7 easyRSA-3.0.7
cp -r easyRSA-3.0.7/ /etc/openvpn/easy-rsa3
cp /etc/openvpn/easy-rsa3/vars.example /etc/openvpn/easy-rsa3/vars

3.创建相关证书和密钥

cd /etc/openvpn/easy-rsa3/
#初始化目录
./easyrsa init-pki

#创建根证书
#nopass 参数表示不加密;也可以不加此参数,那就需要输入密码短语
./easyrsa build-ca nopass

#创建服务端秘钥
./easyrsa gen-req server nopass

#给服务端证书签名,这里要输入yes才能完成
./easyrsa sign-req server server

##创建客户端秘钥
./easyrsa gen-req client nopass

#给客户端证书签名,这里要输入yes才能完成
./easyrsa sign-req client client

#创建Diffie-Hellman
./easyrsa gen-dh

#创建TLS认证密钥
openvpn --genkey --secret /etc/openvpn/ta.key

4.拷贝证书到目录

#目录自定义,配置文件中要用到
cd /etc/openvpn/easy-rsa3/pki/
cp ca.crt dh.pem /etc/openvpn/
cp private/server.key issued/server.crt /etc/openvpn/server/
cp private/client.key issued/client.crt /etc/openvpn/client/

5.编辑配置文件

cd /etc/openvpn/
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf ./
vim server.conf
#监听本机ip地址 (这里填本机地址)(可选)
local 192.168.233.140

#监控本机端口号
port 1194

#指定采用的传输协议,可以选择tcp或udp
proto tcp

#指定创建的通信隧道类型,可选tun或tap
dev tun

#指定CA证书的文件路径
ca /etc/openvpn/ca.crt

#指定服务器端的证书文件路径
cert /etc/openvpn/server/server.crt

#指定服务器端的私钥文件路径
key /etc/openvpn/server/server.key

#指定dh参数的文件路径
dh /etc/openvpn/dh.pem

#指定虚拟局域网占用的IP地址段和子网掩码,此处配置的服务器自身占用.1的ip地址
server 10.8.0.0 255.255.255.0

#服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。
ifconfig-pool-persist ipp.txt

#自动推送客户端上的网关及DHCP
push "redirect-gateway def1 bypass-dhcp"

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

#允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接
client-to-client

#每10秒ping一次,连接超时时间设为120秒
keepalive 10 120

#开启TLS-auth,使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1。
tls-auth /etc/openvpn/ta.key 0

#加密认证算法
cipher AES-256-CBC

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

#最大连接用户
max-clients 100 

#定义运行的用户和组
user openvpn
group openvpn

#重启时仍保留一些状态
persist-key
persist-tun

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

#日志保存路径
log         /var/log/openvpn.log
log-append  /var/log/openvpn.log

#指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
verb 4

#相同信息的数量,如果连续出现 20 条相同的信息,将不记录到日志中
mute 20

#此选项开启只能使用udp协议,否则后续会报错
;explicit-exit-notify 1

6.修改系统转发和开放端口

#修改文件目录权限
chown root.openvpn /etc/openvpn/* -R

#/etc/sysctl.conf 配置文件中添加
net.ipv4.ip_forward=1

#生效
sysctl -p 

#iptables
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens33 -j MASQUERADE
iptables -I INPUT -p tcp --dport 1194 -j ACCEPT

#保存规则并重启
service iptables save
systemctl restart iptables

7.启动OpenVPN服务

#启动 OpenVPN 服务
systemctl start openvpn@server

#确认服务进程是否存在
netstat -lntp|grep openvpn
ps -aux|grep openvpn


 


 

客户端连接

官网下载安装OpenVPN客户端

把服务端的ca.crt、client.crt、client.key、ta.key四个文件拷贝到客户端的统一目录下(默认安装目录为C:\Program Files\OpenVPN\config\),并在该目录下新建client.ovpn配置文件,配置内容为

#客户端配置文件
client
dev tun
proto tcp
remote 你的服务器ip/域名 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
tls-auth ta.key 1
cipher AES-256-CBC
auth-nocache
verb 4
comp-lzo adaptive


 

用户名密码登录形式

上面是证书登录形式,若用账号密码登录形式需要进行小改动

改动一:修改服务端server.conf配置文件

#配置账号密码的认证方式

#用户和密码验证脚本
auth-user-pass-verify /etc/openvpn/server/user/checkpsw.sh via-env

#脚本安全级别
script-security 3

verify-client-cert none

#使用用户名密码登录认证
username-as-common-name

client-to-client

duplicate-cn

改动二:创建用户密码文件

mkdir /etc/openvpn/server/user

# admin为账户名,xxxxxx为密码
echo 'admin xxxxxx' >> /etc/openvpn/server/user/psw-file

chmod 600 /etc/openvpn/server/user/psw-file
chown openvpn:openvpn /etc/openvpn/server/user/psw-file

改动三:创建密码检查脚本,目录在/etc/openvpn/server/user/checkpsw.sh

#!/bin/sh

PASSFILE="/etc/openvpn/server/user/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 700 /etc/openvpn/server/user/checkpsw.sh
chown openvpn:openvpn /etc/openvpn/server/user/checkpsw.sh

改动四:客户端删掉client.crt和client.key两个证书文件,并对配置文件进行修改

#注释掉
;cert client.crt
;key client.key

#添加
auth-user-pass

重启服务,输入账号和密码登录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值