openvpn搭建


服务器环境: Centos7.8 内网IP 172.21.7.211

#openvpn需要开启ip转发:

echo “net.ipv4.ip_forward = 1” >> /etc/sysctl.conf

sysctl -p

[root@mytestcs ~]# yum -y install easy-rsa

[root@mytestcs ~]# mkdir /data/openvpn/easy-rsa && cd /data/openvpn/easy-rsa

[root@mytestcs easy-rsa]# rpm -ql easy-rsa #查看已安装的RPM包中名为 easy-rsa 的文件列表

[root@mytestcs easy-rsa]# cp -a /usr/share/easy-rsa/3.0.8/* .

[root@mytestcs easy-rsa]# cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example ./vars

[root@mytestcs easy-rsa]# cat vars

if [ -z "$EASYRSA_CALLER" ]; then

   echo "You appear to be sourcing an Easy-RSA 

'vars' file." >&2

   echo "This is no longer necessary and is 

disallowed. See the section called" >&2

   echo "'How to use this file' near the top 

comments for more details." >&2

   return 1

fi

set_var EASYRSA_DN "cn_only"

set_var EASYRSA_REQ_COUNTRY "CN"

set_var EASYRSA_REQ_PROVINCE "Beijing"

set_var EASYRSA_REQ_CITY "Shanghai"

set_var EASYRSA_REQ_ORG "koten"

set_var EASYRSA_REQ_EMAIL "nonoma@qq.comm"

set_var EASYRSA_NS_SUPPORT "yes"

 

创建证书:

[root@Web01 easy-rsa]# ./easyrsa init-pki #1、初始化,在当前目录创建PKI目录,用于存储整数

[root@Web01 easy-rsa]# ./easyrsa build-ca #2、创建根证书,会提示设置密码,用于ca对之后生成的server和client证书签名时使用,其他提示内容直接回车即可

Enter New CA Key Passphrase: #注意密码不能太短,自定义

Re-Enter New CA Key Passphrase:

[root@Web01 easy-rsa]# ./easyrsa gen-req server nopass #3、创建server端证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可

[root@Web01 easy-rsa]# ./easyrsa sign server server #4、给server端证书签名,提示内容需要输入yes和创建ca根证书时候的密码

[root@Web01 easy-rsa]# ./easyrsa gen-dh #5、创建Diffie-Hellman文件,密钥交换时的Diffie-Hellman算法

[root@Web01 easy-rsa]# ./easyrsa gen-req client nopass #6、创建client端的证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可

[root@Web01 easy-rsa]# ./easyrsa sign client client #7、给client端证书前面,提示内容输入yes和创建ca根证书时候的密码

[root@Web01 easy-rsa]# tree #检查是否有ca根证书、客户端服务端证书、客户端服务端私钥

.

├── easyrsa #管理命令

├── openssl-easyrsa.cnf

├── pki

│ ├── ca.crt #ca根证书,服务端与客户端都需要用

│ ├── certs_by_serial

│ │ ├── 633C217979C7B5F1D0A9ECA971006F96.pem

│ │ └── 857F9B2E3F6C3D35934672212343B42D.pem

│ ├── dh.pem #认证算法 服务端

│ ├── index.txt

│ ├── index.txt.attr

│ ├── index.txt.attr.old

│ ├── index.txt.old

│ ├── issued

│ │ ├── client.crt #客户端证书

│ │ └── server.crt #服务端证书

│ ├── openssl-easyrsa.cnf

│ ├── private

│ │ ├── ca.key

│ │ ├── client.key #客户端私钥

│ │ └── server.key #服务端私钥

……

安装openvpn配置服务器端文件:

yum -y install openvpn

cat /etc/openvpn/server.conf

port 1194                   #端口

proto udp                   #协议

dev tun                    #采用路由隧道模式

ca /data/openvpn/easy-rsa/pki/ca.crt          #ca证书的位置

cert /data/openvpn/easy-rsa/pki/issued/server.crt   #服务端公钥的位置

key /data/openvpn/easy-rsa/pki/private/server.key   #服务端私钥的位置

dh /data/openvpn/easy-rsa/pki/dh.pem          #证书校验算法  

server 10.8.0.0 255.255.255.0         #给客户端分配的地址池

\#push "route 172.16.1.0 255.255.255.0"     #允许客户端访问的内网网段

push "route 172.21.7.0 255.255.255.0"     #允许客户端访问的内网网段

ifconfig-pool-persist ipp.txt         #地址池记录文件位置,未来让openvpn客户端固定ip地址使用的

keepalive 10 120               #存活时间,10秒ping一次,120秒如果未收到响应则视为短线

max-clients 100                #最多允许100个客户端连接

status openvpn-status.log           #日志位置,记录openvpn状态

log /data/openvpn/openvpn.log           #openvpn日志记录位置

verb 3                    #openvpn版本

client-to-client               #允许客户端与客户端之间通信

persist-key                  #通过keepalive检测超时后,重新启动VPN,不重新读取

persist-tun                  #检测超时后,重新启动VPN,一直保持tun是linkup的,否则网络会先linkdown然后再linkup

duplicate-cn                 #客户端密钥(证书和私钥)是否可以重复

comp-lzo                   #启动lzo数据压缩格式

script-security 3                  #允许使用自定义脚本

auth-user-pass-verify /etc/openvpn/check.sh via-env #指定认证脚本

username-as-common-name               #用户密码登陆方式验证

push "redirect-gateway def1"

push "dhcp-option DNS 10.8.0.1"

push "dhcp-option WINS 10.8.0.1"

启动并检查

#systemctl start openvpn@server

#ip a s tun0 #查看网段

#ss -lntup|grep 1194 #检查端口

ps -ef |grep openvpn

root 4641 1 0 11:21 ? 00:00:00 /usr/sbin/openvpn –cd /etc/openvpn/ –config server.conf

root 4705 32479 0 11:22 pts/0 00:00:00 grep –color=auto openvpn

Openvpn客户端配置:

Linux环境:

yum -y install openvpn


cat /etc/openvpn/client.conf

cat client.conf 

client

dev tun

proto udp

remote 10.0.0.2 1194

resolv-retry infinite

nobind

ca ca.crt

cert client.crt

key client.key

verb 3

persist-key

comp-lzo

auth-user-pass 

上传服务器端的private/client.key,issued/client.crt,pki/ca.crt 三个文件到/etc/openvpn,

systemctl start openvpn@client

测试连接:

ip a

tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100

link/none

inet 10.8.0.10 peer 10.8.0.9/32 scope global tun0

ping 172.21.7.211

PING 172.21.7.211 (172.21.7.211) 56(84) bytes of data.

64 bytes from 172.21.7.211: icmp_seq=1 ttl=64 time=7.21 ms

64 bytes from 172.21.7.211: icmp_seq=2 ttl=64 time=5.94 ms

Windows环境

,32位的不兼容64位系统,安装完毕以后找到openvpn/config将private/client.key,issued/client.crt,pki/ca.crt放入 config目录,

编辑client.ovpn:

client

dev tun

proto udp

remote 10.0.0.2 1194     #注意此处更改为openvpn服务端代码

resolv-retry infinite

nobind

ca ca.crt

cert client.crt

key client.key

verb 3

persist-key

comp-lz

开启Openvpn GUI点击connect 如果没问题应该验证过可以上vpn。

密码认证

  1. 修改服务端配置文件为支持密码认证

cat /etc/openvpn/server.conf #添加配置文件

……

script-security 3 #允许使用自定义脚本

auth-user-pass-verify /etc/openvpn/check.sh via-env #指定认证脚本

username-as-common-name #用户密码登陆方式验证

cat /etc/openvpn/check.sh #

\#!/bin/bash

PASSFILE="/etc/openvpn/openvpnfile"  #密码文件 用户名 密码明文

LOG_FILE="/data/openvpn/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

cat /etc/openvpn/openvpnfile

mytest mytest123

重启服务器端:systemctl restart openvpn@server

客户端同样需要配置auth-user-pass

最底行添加auth-user-pass,注意该配置文件不要有多余空格,否则可能会报错。

ca ca.crt

cert client.crt

comp-lzo

auth-user-pass

ping 172.21.7.211

正在 Ping 172.21.7.211 具有 32 字节的数据:

来自 172.21.7.211 的回复: 字节=32 时间=7ms TTL=64

来自 172.21.7.211 的回复: 字节=32 时间=6ms TTL=64

ping 10.8.0.1

正在 Ping 10.8.0.1 具有 32 字节的数据:

来自 10.8.0.1 的回复: 字节=32 时间=8ms TTL=64

来自 10.8.0.1 的回复: 字节=32 时间=7ms TTL=64

Curl cip.cc

查看IP已经是服务器IP,至此openvpn搭建调试完毕。

参考:https://cloud.tencent.com/developer/article/2315269


文章作者: 云上的小雨滴
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 云上的小雨滴 !
评论
  目录