OpenVPN服务部署及使用文档

OpenVPN服务部署及使用文档

本文档目的为实现vpn便捷访问,使用闲置设备,绑定公网IP后,搭建vpn服务,使办公网设备访问池中其他无公网设备;

环境

云主机名 系统 内网IP 公网IP VPN服务端口 备注
openvpn服务器 CentOS7.9 172.17.1.65 123.247.xxx.xxx 1194

部署OpenVPN

原文档链接:在 CentOS7 上搭建 OpenVPN 服务端并添加用户 (babamumu.com)

安装openvpn及其他依赖

安装服务

yum -y install epel-release
yum -y install openvpn easy-rsa iptables-services

配置IP地址转发

很重要,如果不配置,则无法实现vpn功能;

echo -e "###OpenVPN ADD\nnet.ipv4.conf.default.accept_source_route = 1\nnet.ipv4.conf.default.rp_filter = 0\nnet.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

生成证书和密钥

查看文件

安装完openvpn服务端后,会生成/usr/share/easy-rsa/3.0.8/目录,其中保存的是生成证书用的工具;

[root@openvpn ~]# ls /usr/share/easy-rsa/3.0.8/
easyrsa  openssl-easyrsa.cnf  x509-types

创建目录

mkdir -p /etc/openvpn/easy-rsa/

将所需文件复制到指定目录中

cp -r /usr/share/easy-rsa/3.0.8/* /etc/openvpn/easy-rsa/
cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/vars

进入/etc/openvpn/easy-rsa/并编辑vars文件

cd /etc/openvpn/easy-rsa/
vim ./vars

.
.
102 set_var EASYRSA_REQ_COUNTRY     "CN"
103 set_var EASYRSA_REQ_PROVINCE    "LiaoNing"
104 set_var EASYRSA_REQ_CITY        "ShenYang"
105 set_var EASYRSA_REQ_ORG         "LNSZ"
106 set_var EASYRSA_REQ_EMAIL       "xxxxx@qq.com"
107 set_var EASYRSA_REQ_OU          "Lnsz test vpn"
.
.

生效变量

source ./vars

生成CA根证书

./easyrsa init-pki
./easyrsa build-ca nopass

生成 OpenVPN 服务器证书和密钥

./easyrsa build-server-full remitProd nopass     #第一个参数 remitProd 为证书名称
./easyrsa gen-dh
openvpn --genkey --secret ta.key
#如果出现警告
#WARNING: Using --genkey --secret filename is DEPRECATED.  Use --genkey secret filename instead.
#则执行下面的命令
openvpn --genkey secret ta.key

复制证书及密钥文件

cd /etc/openvpn/
cp /etc/openvpn/easy-rsa/{pki/dh.pem,pki/ca.crt,ta.key,pki/issued/remitProd.crt,pki/private/remitProd.key} /etc/openvpn/

配置OpenVPN服务

cd /etc/openvpn/
vim service.conf

#local 123.57.xxx.xxx #指定监听的本机IP(因为有些计算机具备多个IP地址),该命令是可选的,默认监听所有IP地址
port 1194 #服务端端口号
proto tcp #通过tcp协议来连接,也可以通过udp
dev tun #路由模式,注意windows下必须使用dev tap
ca /etc/openvpn/ca.crt #ca证书存放位置
cert /etc/openvpn/remitProd.crt #服务器证书存放位置
key /etc/openvpn/remitProd.key  # #服务器密钥存放位置
dh /etc/openvpn/dh.pem #dh.pem存放位置
tls-auth /etc/openvpn/ta.key 0  #ta.key存放位置
server 20.20.20.0 255.255.255.0 #虚拟局域网网段设置
ifconfig-pool-persist ipp.txt
client-to-client                         #开启客户端互访
duplicate-cn                             #支持一个证书多个客户端登录使用,建议不启用
keepalive 10 120
cipher AES-128-CBC
#comp-lzo
max-clients 100                          #最大客户端并发连接数量
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
log         /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log
push "route 172.17.1.0 255.255.255.0" #实际内网ip网段

配置iptables和selinux

在安装centos系统后,初始化阶段应关闭selinux服务;

配置iptables规则实现ip转发

注意:以下内容中的地址是vpn的虚拟地址,应与配置文件保持一致。而且如果系统开启了firewalld,则需要同时开放1194端口;

systemctl enable iptables && systemctl start iptables
iptables -F   # 清理所有防火墙规则
iptables -t nat -A POSTROUTING -s 20.20.20.0/24 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables   # iptables 规则持久化保存

安装zip

yum -y install zip

服务启动测试

systemctl start openvpn@server  && systemctl enable openvpn@server

服务启动后,需要确认服务状态是否正常,并且端口是否开启;

[root@openvpn openvpn]# systemctl status openvpn@server
● openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On server
   Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-05-30 14:41:10 CST; 1h 6min ago
 Main PID: 22860 (openvpn)
   Status: "Initialization Sequence Completed"
   CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
           └─22860 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf

May 30 14:41:10 openvpn systemd[1]: Starting OpenVPN Robust And Highly Flexible Tunneling Application On server...
May 30 14:41:10 openvpn systemd[1]: Started OpenVPN Robust And Highly Flexible Tunneling Application On server.
[root@openvpn openvpn]# ss -tunl
Netid State      Recv-Q Send-Q                             Local Address:Port                                            Peer Address:Port
.
.
tcp   LISTEN     0      32                                             *:1194                                                       *:*
.
.

服务管理命令

systemctl start openvpn@server      # 启动服务;
systemctl stop openvpn@server       # 关闭服务;
systemctl status openvpn@server     # 查询服务状态;

创建client端配置文件及证书文件

原文当中使用脚本方式实现半自动用户管理;

创建脚本保存目录

mkdir /etc/openvpn/client

创建配置模板文件

cd /etc/openvpn/client
vim sample.ovpn

#!/bin/bash

client
remote 123.247.xxx.xxx 1194    # 此处为该vpn服务器的公网地址,例:remote 106.12.1.1 1194
dev tun
proto tcp
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client.crt
key /etc/openvpn/client.key
tls-auth /etc/openvpn/ta.key 1
remote-cert-tls server
resolv-retry infinite
nobind
persist-key
persist-tun
#comp-lzo
verb 3
mute-replay-warnings

创建添加vpn用户脚本

vim ovpn_user.sh

# ! /bin/bash
 
set -e
 
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys
EASY_RSA_DIR=/etc/openvpn/easy-rsa/
PKI_DIR=$EASY_RSA_DIR/pki
 
for user in "$@"
do
  if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then
    rm -rf $OVPN_USER_KEYS_DIR/$user
    rm -rf  $PKI_DIR/reqs/$user.req
    sed -i '/'"$user"'/d' $PKI_DIR/index.txt
  fi
  cd $EASY_RSA_DIR
  # 生成客户端SSL证书文件
  ./easyrsa build-client-full $user nopass
  # 整理下生成的文件
  mkdir -p  $OVPN_USER_KEYS_DIR/$user
  cp $PKI_DIR/ca.crt $OVPN_USER_KEYS_DIR/$user/   # CA 根证书
  cp $PKI_DIR/issued/$user.crt $OVPN_USER_KEYS_DIR/$user/   # 客户端证书
  cp $PKI_DIR/private/$user.key $OVPN_USER_KEYS_DIR/$user/  # 客户端证书密钥
  cp /etc/openvpn/client/sample.ovpn $OVPN_USER_KEYS_DIR/$user/$user.ovpn # 客户端配置文件
  sed -i 's/client.crt/'"$user".crt'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn
  sed -i 's/client.key/'"$user".key'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn
  cp $EASY_RSA_DIR/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key  # auth-tls 文件
  cd $OVPN_USER_KEYS_DIR
  zip -r $user.zip $user
done
exit 0

脚本测试

bash ovpn_user.sh [要添加的vpn用户名]

示例
bash ovpn_user.sh test

创建完成后可以在/etc/openvpn/client/keys/下看到相关文件

[root@openvpn openvpn]# ls /etc/openvpn/client/keys/
test  test.zip

创建删除vpn用户脚本

vim del_ovpn_user.sh

#!/bin/bash

set -e
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys
EASY_RSA_DIR=/etc/openvpn/easy-rsa/
for user in "$@"
do
  cd $EASY_RSA_DIR
  echo -e 'yes\n' | ./easyrsa revoke $user
  ./easyrsa gen-crl
  # 吊销掉证书后清理客户端相关文件
  if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then
    rm -rf $OVPN_USER_KEYS_DIR/${user}*
  fi
  systemctl restart openvpn@server
done
exit 0

使用方式与添加用户脚本相同;

windows连接测试

下载并安装client端

下载地址(可能需要翻墙):https://openvpn.net/client/

下载完成后直接安装即可;

下载添加的vpn用户中的压缩包

[root@openvpn openvpn]# ls client/keys/
test  test.zip

连接VPN测试

打开openvpn客户端,点击右下方+,选择FILE,将之前下载的压缩包中test.ovpn文件加载进去即可;

之后就可以进行访问测试了,步骤略;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容