当前位置:   article > 正文

完整的openvpn 服务端搭建,小白也能搭建!!网上最全的openvpn 服务端搭建文档之一,附带客户端创建管理的脚本_openvpen百度盘

openvpen百度盘

openvpn 服务端部署

背景: 因为最近想尝试通过openvpn连接连接家里的nas和手机进行照片传输分享。加上之前从网上找教程,搞了很久才搞出服务端,但是但是当时不太了解,导致部署的openvpn server可以使用,但是感觉摇摇欲坠,像是一堆bug的软件,自己都不知道为啥可以用了。这次趁着有时间,也有需求就重新搭建了。由于网上各种教程参差不齐,所以自己写一个完成过程的笔记。以方便自己日后使用,也方便其他人参考。

ps:不知道为啥群晖上导入客户端证书会提示无效证书,已经找群晖技术支持,目前还没反馈。有大佬知道要怎么搞可以说一下吗。刚开始还会提示错误的秘钥,我把客户端秘钥转换成rsa格式之后就没了这个报错。目前证书问题依旧未解决–2023年11月19日晚

ssh-keygen -p -f [证书名] -P [证书密码] 通过这个命令转换的
先把firewalld和selinux关闭
这个很简单,小白可以百度看下怎么关闭,当然也可以针对端口进行开放。因为我的设备是在阿里云,所我直接卸载了firewalld
其他各种工具,不如lrzsz,zip,net-tools,vim等工具自己按习惯进行安装
可以使用yum安装。比如:yum -y install lrzsz

一、安装软件
yum install easy-rsa
yum list installed easy-rsa
yum install openvpn
yum list installed openvpn
  • 1
  • 2
  • 3
  • 4
二、配置EASY-RSA 3.0
mkdir /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
cp -r /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa/vars
  • 1
  • 2
  • 3

cp -r /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa/vars可能会执行不成功,有些版本的easy-rsa不是easy-rsa这个文件夹,需要改成对应的名字

三、创建OpenVPN相关的密钥
cd /etc/openvpn/easy-rsa/   #切换目录
./easyrsa init-pki     #初始化PKI目录
  • 1
  • 2

生成ca证书前可以改一下配置,也可以使用默认

[root@aliyun-relay easy-rsa]# vim vars 
export KEY_COUNTRY="CN"
export KEY_PROVINCE="ShangHai"
export KEY_CITY="shenzhen"
export KEY_ORG="home-nas"
export KEY_EMAIL="example@domain.com"
set_var EASYRSA_CA_EXPIRE       3650
set_var EASYRSA_CERT_EXPIRE     3650
set_var EASYRSA_CRL_DAYS        3650
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

**注:**设置的时间最好是按照默认,3650天,即10年。时间太短到时候过期要重新签发才能使用。

生成证书密码:123456

写好文件开始生成CA证书,默认是有密码,也可以选择nopass参书,不要密码加密

./easyrsa build-ca   #创建ca证书。默认是要密码。不要密码可以自己在后面加上 nopass,如需要密码请记住密码。注意看生成后会有证书文件路径,可以整理一下,记录好。到时候要收集这些文件的。这里就不放出来了
  • 1

创建生成一个包含证书请求的文件,用于生成服务端证书

./easyrsa gen-req server1 nopass  
  • 1

创建服务端证书,好像ca证书有密码这里也会需要输入ca证书的密码

./easyrsa sign-req server server1
  • 1

创建生成一个包含证书请求的文件,用于生成客端证书

./easyrsa gen-req client1 nopass
  • 1

创建客户端证书

./easyrsa sign-req client client1
  • 1

根据之前创建的vars配置文件生成2048位的密钥

./easyrsa gen-dh
  • 1

创建TLS认证密钥

openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key
  • 1

CRL(证书撤销列表)密钥用于撤销客户端密钥。如果服务器上有多个客户端证书,希望删除某个密钥,那么只需使用./easyrsa revoke NAME这个命令撤销即可。
生成CRL密钥(这个有没有都是可以使用的,详细要自己看官方文档)

./easyrsa gen-crl
  • 1

收集整理文件。当前执行命令的位置是/etc/openvpn/easy-rsa/,可以自己改命令。客户端和服务端的证书和密钥分开放,方便以后管理

cp -p pki/ca.crt /etc/openvpn/server
cp -p pki/issued/server1.crt /etc/openvpn/server
cp -p pki/private/server1.key /etc/openvpn/server
cp -p ta.key /etc/openvpn/server
cp -p pki/ca.crt /etc/openvpn/client/
cp -p pki/issued/client1.crt /etc/openvpn/client/
cp -p pki/private/client1.key /etc/openvpn/client/
cp -p ta.key /etc/openvpn/client/
cp pki/dh.pem /etc/openvpn/server
cp pki/crl.pem /etc/openvpn/server
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
四、编辑配置文件

去到openvpn的目录,编辑server.conf文件

cd /etc/openvpn
vim sever.conf
  • 1
  • 2

这是我的配置

port 1194
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server1.crt
key /etc/openvpn/server/server1.key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem
tls-auth /etc/openvpn/server/ta.key 0
server 192.168.254.0 255.255.255.0
push "172.23.201.0 255.255.255.0"
ifconfig-pool-persist /etc/openvpn/server/ipp.txt
#auth-user-pass /etc/openvpn/server/auth.txt
keepalive 10 120
cipher AES-256-CBC
client-to-client
max-clients 1000
persist-key
persist-tun
log /var/log/openvpn/server.log
log-append /var/log/server.log
status /var/log/openvpn-status.log
verb 3
explicit-exit-notify 1

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

创建相关文件

echo 1 > /var/log/openvpn-status.log
echo 1 > /var/log/server.log
echo 1 > /var/log/openvpn/server.log
echo 1 > /etc/openvpn/server/ipp.txt
  • 1
  • 2
  • 3
  • 4
五、启动服务

检查一下。没什么就可以启动服务端了

尝试使用systemctl enbale openvpn-server@servie.service启动失败
转用命令启动,
openvpn --cd /etc/openvpn/ --daemon --config server.conf
启动完成检查下,比如使用ip ad查看有没有新的tun0网卡出现,netstat -lunp | grep 1194 查看1194端口是不是被监听了。一切正常,下一步
  • 1
  • 2
  • 3
  • 4

开始iptables转发功能。如果服务端只是用来中转,其实可以不开启的。

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
  • 1
  • 2

服务端配置到此结束。
注意在云上的设备还要在管理台对1194端口进行开放,否则会被云防火墙拦截

客户端创建

这是一个创建和管理客户端的脚本。需自行修改一点才能使用

#!/bin/bash
# Date: 2018-3-26
# Create By Mr.Chen
#Date:2023-11-18
#Modify:Little Peng
# Describe: Create Openven User

USER=$2
PASS=$(echo "${USER}@phj.plus $(date)"|md5sum |cut -b 1-12)
CA_PASS="这里写你的证书密码"
OVDIR="/etc/openvpn"
SER_ERSA="${OVDIR}/easy-rsa/"
CLI_ERSA="${OVDIR}/easy-rsa/"
KEYS_DIR="${OVDIR}/client"
DB_FILE="${SER_ERSA}/pki/index.txt"

if [ ! -f /bin/expect ];then
  echo "expect is not installed, start the installation..."
  yum -y install expect
  if [ $? != 0 ];then
     echo "Installation failed, please install manually"
     exit 1
  fi
fi



function GenerateAkey(){
  rlist=$(find /etc/openvpn/ -name "${USER}*")
  if [ -n "$rlist" ];then
    echo "用户: ${USER} 已存在"
    exit 1
  fi
  cd ${CLI_ERSA}/
/bin/expect <<EOF
  spawn ./easyrsa gen-req $USER
  expect "Enter PEM pass phrase:"
  send "${PASS}\r"
  expect "Verifying - Enter PEM pass phrase"
  send "${PASS}\r"
  expect "Common Name"
  send "\r"
  expect eof
EOF
}

function GenerateAconf(){
cat > ${KEYS_DIR}/${USER}/${USER}.ovpn <<EOF
client
dev tun
proto udp
remote 这里写你的服务端公网IP 1194(1194是你映射在公网的端口,)
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert ${USER}.crt
key ${USER}.key
remote-cert-tls server
tls-auth ta.key 1
auth-user-pass
cipher AES-256-CBC
verb 3
EOF
}

function ImportAkey(){
  cd ${SER_ERSA}/
  ./easyrsa import-req ${CLI_ERSA}/pki/reqs/${USER}.req ${USER}
/bin/expect <<EOF
  spawn ./easyrsa sign client $USER
  expect "Confirm request details:"
  send "yes\r"
  expect "Enter pass phrase for"
  send "${CA_PASS}\r"
  expect eof
EOF
}
function CreateUserPass(){
	echo -e "$user:$pass" >> $OVDIR/server/auth.txt
}
function CreateUser(){
  GenerateAkey
  ImportAkey
  #CreateUserPass
  mkdir ${KEYS_DIR}/${USER}
  cp ${SER_ERSA}/pki/issued/${USER}.crt ${KEYS_DIR}/${USER}/
  cp ${CLI_ERSA}/pki/private/${USER}.key ${KEYS_DIR}/${USER}/
  cp ${OVDIR}/server/{ca.crt,ta.key} ${KEYS_DIR}/${USER}/
  echo "${PASS}" > ${KEYS_DIR}/${USER}/${USER}.pass
  cd ${KEYS_DIR}/
  GenerateAconf
  zip -r ${USER}.zip ${USER}/
  if [ -d ${USER} ];then
    rm -rf ${USER}
  fi
  echo -e "\033[32mPlease Download ${KEYS_DIR}/${USER}.zip\033[0m"
  echo -e ""
  if [ -f ${SER_ERSA}/pki/issued/${USER}.crt ];then
	echo -e "${USER} create success!!!"  
  else
    echo -e "\033[31mUser creation failed\033[0m"
  fi
}

function RemoveUser(){
  rlist=$(find /etc/openvpn/ -name "${USER}*")
  if [ ! -n "$rlist" ];then
    echo "用户: ${USER} 不存在"
    exit 1
  fi
  echo -e "\033[31m${rlist}\033[0m"
  read -p "上述文件将被移除,请确认(yes/no): " yn
  if [ "$yn" = "yes" ];then
    for f in $rlist;do
      rm -rf $f
      if [ $? = 0 ];then
        echo -e "\033[31m$f\033[0m       \033[32m[del]\033[0m"
      else
        echo -e "\033[31m$f\033[0m       \033[31m[fail]\033[0m"
      fi
    done
    sed -i "/=${USER}$/d" ${DB_FILE}
    if [ $? = 0 ];then
      cd ${SER_ERSA}/
/bin/expect <<EOF
  spawn ./easyrsa update-db
  expect "Enter pass phrase for"
  send "${CA_PASS}\r"
  expect eof
EOF
      echo -e "\033[31m${DB_FILE}\033[0m       \033[32m[update]\033[0m"
    else
      echo -e "\033[31m${DB_FILE}\033[0m       \033[32m[fail]\033[0m"
    fi   
  else
    exit 0
  fi
}

function RevokeUser(){
  rlist=$(find /etc/openvpn/ -name "${USER}*")
  if [ ! -n "$rlist" ];then
    echo "用户: ${USER} 不存在"
    exit 1
  fi
  cd ${SER_ERSA}/
/bin/expect <<EOF
  spawn ./easyrsa revoke ${USER}
  expect "Continue with revocation"
  send "yes\r"
  expect "Enter pass phrase for"
  send "${CA_PASS}\r"
  expect eof
EOF
}

function Gencrl(){
  cd ${SER_ERSA}/
/bin/expect <<EOF
  spawn ./easyrsa gen-crl
  expect "Enter pass phrase for"
  send "${CA_PASS}\r"
  expect eof
EOF
}

case "$1" in
    start)
        /usr/sbin/openvpn --daemon --config /etc/openvpn/server.conf --log-append /var/log/openvpn.log
    ;;
    restart)
        /usr/bin/pkill --signal SIGHUP --exact openvpn
    ;;
    add)
        if [ -n "$2" ];then
          CreateUser
        else
          echo $"Usage: $0 add username"
        fi
    ;;
    remove)
        if [ -n "$2" ];then
          RevokeUser
          Gencrl
          RemoveUser
        else
          echo $"Usage: $0 remove username"
        fi
    ;;
    *)
        echo $"Usage: $0 {start|restart|add|remove} username"
        exit 1
esac 

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196

给脚本添加执行权限

chmod +x vpnctl.sh
./ vpnctl.sh add aikuai
  • 1
  • 2

部分日志

Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'aikuai'
Certificate is to be certified until Nov 16 03:13:25 2033 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/pki/issued/aikuai.crt


  adding: aikuai/ (stored 0%)
  adding: aikuai/aikuai.key (deflated 24%)
  adding: aikuai/ta.key (deflated 40%)
  adding: aikuai/aikuai.crt (deflated 45%)
  adding: aikuai/ca.crt (deflated 25%)
  adding: aikuai/aikuai.ovpn (deflated 29%)
  adding: aikuai/aikuai.pass (stored 0%)
Please Download /etc/openvpn/client/aikuai.zip

aikuai create success!!!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

使用工具lrzsz下载/etc/openvpn/client/aikuai.zip的文件,使用即可!
到此完成!
Windows上连接正常在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/208527
推荐阅读
相关标签
  

闽ICP备14008679号