openvpn搭建

30 篇文章 0 订阅

拓扑

在这里插入图片描述

环境

openvpn服务器
wan:192.168.1.100/24
lan:172.16.0.1 /24
内网主机:172.16.0.2/24
外网客户端: 192.168.1.200/24

通过脚本安装

github安装脚本地址

https://github.com/Nyr/openvpn-install

执行以下命令

wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh
Welcome to this OpenVPN road warrior installer!

Which IPv4 address should be used?
     1) 192.168.1.100
     2) 172.16.0.1
IPv4 address [1]: 1

This server is behind NAT. What is the public IPv4 address or hostname?
Public IPv4 address / hostname [123.456.77.88]:

Which protocol should OpenVPN use?
   1) UDP (recommended)
   2) TCP
Protocol [1]:

What port should OpenVPN listen to?
Port [1194]:

Select a DNS server for the clients:
   1) Current system resolvers
   2) Google
   3) 1.1.1.1
   4) OpenDNS
   5) Quad9
   6) AdGuard
DNS server [1]:

Enter a name for the first client:
Name [client]: client01

OpenVPN installation is ready to begin.
Press any key to continue...
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * extras: mirror.bit.edu.cn
 * updates: mirror.bit.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 epel-release.noarch.0.7-11 将被 安装
--> 解决依赖关系完成

依赖关系解决

===============================================================================================================================
 Package                            架构                         版本                       源                            大小
===============================================================================================================================
正在安装:
 epel-release                       noarch                       7-11                       extras                        15 k

事务概要
===============================================================================================================================
安装  1 软件包

总下载量:15 k
安装大小:24 k
Downloading packages:
epel-release-7-11.noarch.rpm                                                                            |  15 kB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : epel-release-7-11.noarch                                                                                   1/1
  验证中      : epel-release-7-11.noarch                                                                                   1/1

已安装:
  epel-release.noarch 0:7-11

完毕!
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                                                    | 8.1 kB  00:00:00
 * base: mirrors.aliyun.com
 * epel: mirrors.bfsu.edu.cn
 * extras: mirrors.bfsu.edu.cn
 * updates: mirrors.bfsu.edu.cn
epel                                                                                                    | 4.7 kB  00:00:00
(1/3): epel/x86_64/group_gz                                                                             |  95 kB  00:00:00
epel/x86_64/updateinfo         FAILED
https://mirrors.ustc.edu.cn/epel/7/x86_64/repodata/5e4e1e558d9c8af6333e9081f10ccad453e3d951108a8107c0e368f9278fc253-updateinfo.xml.bz2: [Errno 14] HTTPS Error 404 - Not Found
正在尝试其它镜像。
To address this issue please refer to the below wiki article

https://wiki.centos.org/yum-errors

If above article doesn't help to resolve this issue please use https://bugs.centos.org/.

(2/3): epel/x86_64/updateinfo                                                                           | 1.0 MB  00:00:00
epel/x86_64/primary_db         FAILED
https://mirror.lzu.edu.cn/epel/7/x86_64/repodata/a0cbbb12b67f4299b1c8c0efe25ea6e9f1f9957244064df0849d62e1f0888809-primary.sqlite.bz2: [Errno 14] HTTPS Error 404 - Not Found
正在尝试其它镜像。
(3/3): epel/x86_64/primary_db                                                                           | 6.9 MB  00:00:00
软件包 2:tar-1.26-35.el7.x86_64 已安装并且是最新版本
正在解决依赖关系
--> 正在检查事务
---> 软件包 ca-certificates.noarch.0.2019.2.32-76.el7_7 将被 升级
---> 软件包 ca-certificates.noarch.0.2020.2.41-70.0.el7_8 将被 更新
---> 软件包 openssl.x86_64.1.1.0.2k-19.el7 将被 升级
---> 软件包 openssl.x86_64.1.1.0.2k-21.el7_9 将被 更新
--> 正在处理依赖关系 openssl-libs(x86-64) = 1:1.0.2k-21.el7_9,它被软件包 1:openssl-1.0.2k-21.el7_9.x86_64 需要
---> 软件包 openvpn.x86_64.0.2.4.10-1.el7 将被 安装
--> 正在处理依赖关系 libpkcs11-helper.so.1()(64bit),它被软件包 openvpn-2.4.10-1.el7.x86_64 需要
--> 正在检查事务
---> 软件包 openssl-libs.x86_64.1.1.0.2k-19.el7 将被 升级
---> 软件包 openssl-libs.x86_64.1.1.0.2k-21.el7_9 将被 更新
---> 软件包 pkcs11-helper.x86_64.0.1.11-3.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

===============================================================================================================================
 Package                          架构                    版本                                  源                        大小
===============================================================================================================================
正在安装:
 openvpn                          x86_64                  2.4.10-1.el7                          epel                     527 k
正在更新:
 ca-certificates                  noarch                  2020.2.41-70.0.el7_8                  base                     382 k
 openssl                          x86_64                  1:1.0.2k-21.el7_9                     updates                  493 k
为依赖而安装:
 pkcs11-helper                    x86_64                  1.11-3.el7                            epel                      56 k
为依赖而更新:
 openssl-libs                     x86_64                  1:1.0.2k-21.el7_9                     updates                  1.2 M

事务概要
===============================================================================================================================
安装  1 软件包 (+1 依赖软件包)
升级  2 软件包 (+1 依赖软件包)

总下载量:2.6 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/5): ca-certificates-2020.2.41-70.0.el7_8.noarch.rpm                                                  | 382 kB  00:00:00
warning: /var/cache/yum/x86_64/7/epel/packages/openvpn-2.4.10-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
openvpn-2.4.10-1.el7.x86_64.rpm 的公钥尚未安装
(2/5): openvpn-2.4.10-1.el7.x86_64.rpm                                                                  | 527 kB  00:00:00
(3/5): openssl-1.0.2k-21.el7_9.x86_64.rpm                                                               | 493 kB  00:00:00
(4/5): openssl-libs-1.0.2k-21.el7_9.x86_64.rpm                                                          | 1.2 MB  00:00:00
(5/5): pkcs11-helper-1.11-3.el7.x86_64.rpm                                                              |  56 kB  00:00:00
-------------------------------------------------------------------------------------------------------------------------------
总计                                                                                           8.4 MB/s | 2.6 MB  00:00:00
从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 检索密钥
导入 GPG key 0x352C64E5:
 用户ID     : "Fedora EPEL (7) <epel@fedoraproject.org>"
 指纹       : 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 软件包     : epel-release-7-11.noarch (@extras)
 来自       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在更新    : ca-certificates-2020.2.41-70.0.el7_8.noarch                                                                1/8
  正在更新    : 1:openssl-libs-1.0.2k-21.el7_9.x86_64                                                                      2/8
  正在安装    : pkcs11-helper-1.11-3.el7.x86_64                                                                            3/8
  正在安装    : openvpn-2.4.10-1.el7.x86_64                                                                                4/8
  正在更新    : 1:openssl-1.0.2k-21.el7_9.x86_64                                                                           5/8
  清理        : 1:openssl-1.0.2k-19.el7.x86_64                                                                             6/8
  清理        : 1:openssl-libs-1.0.2k-19.el7.x86_64                                                                        7/8
  清理        : ca-certificates-2019.2.32-76.el7_7.noarch                                                                  8/8
  验证中      : openvpn-2.4.10-1.el7.x86_64                                                                                1/8
  验证中      : ca-certificates-2020.2.41-70.0.el7_8.noarch                                                                2/8
  验证中      : pkcs11-helper-1.11-3.el7.x86_64                                                                            3/8
  验证中      : 1:openssl-1.0.2k-21.el7_9.x86_64                                                                           4/8
  验证中      : 1:openssl-libs-1.0.2k-21.el7_9.x86_64                                                                      5/8
  验证中      : 1:openssl-1.0.2k-19.el7.x86_64                                                                             6/8
  验证中      : ca-certificates-2019.2.32-76.el7_7.noarch                                                                  7/8
  验证中      : 1:openssl-libs-1.0.2k-19.el7.x86_64                                                                        8/8

已安装:
  openvpn.x86_64 0:2.4.10-1.el7

作为依赖被安装:
  pkcs11-helper.x86_64 0:1.11-3.el7

更新完毕:
  ca-certificates.noarch 0:2020.2.41-70.0.el7_8                        openssl.x86_64 1:1.0.2k-21.el7_9

作为依赖被升级:
  openssl-libs.x86_64 1:1.0.2k-21.el7_9

完毕!

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/server/easy-rsa/pki


Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Generating RSA private key, 2048 bit long modulus
..............................................+++
...+++
e is 65537 (0x10001)

Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Generating a 2048 bit RSA private key
...............................................+++
........+++
writing new private key to '/etc/openvpn/server/easy-rsa/pki/easy-rsa-3627.viTWfn/tmp.Bj8lGz'
-----
Using configuration from /etc/openvpn/server/easy-rsa/pki/easy-rsa-3627.viTWfn/tmp.ZqNojc
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Feb 11 06:58:54 2031 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Generating a 2048 bit RSA private key
.............+++
.........+++
writing new private key to '/etc/openvpn/server/easy-rsa/pki/easy-rsa-3714.k6HfDe/tmp.xIiZZC'
-----
Using configuration from /etc/openvpn/server/easy-rsa/pki/easy-rsa-3714.k6HfDe/tmp.d5B2ex
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'client01'
Certificate is to be certified until Feb 11 06:58:54 2031 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Using configuration from /etc/openvpn/server/easy-rsa/pki/easy-rsa-3781.7zEvur/tmp.9PQJwP

An updated CRL has been created.
CRL file: /etc/openvpn/server/easy-rsa/pki/crl.pem


success
success
success
success
success
success
Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn-server@server.service to /usr/lib/systemd/system/openvpn-server@.service.

Finished!

The client configuration is available in: /root/client01.ovpn
New clients can be added by running this script again.

安装客户端

在网上下载客户端,安装后导入在服务端生成的配置文件
在这里插入图片描述
在这里插入图片描述
连接成功,基本不需要配置东西。
在这里插入图片描述

如果要增加新的客户端,在服务端运行安装脚本即可。

配置文件

一、vars配置文件
vars配置文件的主要内容如下:

cat vars |grep -vE “#|$”

clip_image001

KEY_DIR定义key生成的目录。

KEY_SIZE定义生成私钥的大小,一般为1024或2048,默认为2048位。这个就是我们在执行build-dh命令生成dh2048文件的依据。

CA_EXPIRE定义CA证书的有效期,默认是3650天,即10年。

KEY_EXPIRE定义密钥的有效期,默认是3650天,即10年。

KEY_COUNTRY定义所在的国家。

KEY_PROVINCE定义所在的省份。

KEY_CITY定义所在的城市。

KEY_ORG定义所在的组织。

KEY_EMAIL定义邮箱地址。

KEY_OU定义所在的单位。

KEY_NAME定义openvpn服务器的名称。

以上就是vars配置文件的全部内容,有关vars配置文件的使用,我们也可以系统的默认配置。

二、server.conf服务器端配置文件
服务器端配置文件server.conf,是这三个配置文件中最重要的一个,也是所有对openvpn客户端推送的信息,都是通过这个文件进行配置的。

grep -vE “#|$” server.conf

clip_image002

;local a.b.c.d

定义openvpn监听的IP地址,如果是服务器单网卡的也可以不注明,但是服务器是多网卡的建议注明。

port 1194

定义openvpn监听的的端口,默认为1194端口。

proto tcp

;proto udp

定义openvpn使用的协议,默认使用UDP。如果是生产环境的话,建议使用TCP协议。

dev tun

;dev tap

定义openvpn运行时使用哪一种模式,openvpn有两种运行模式一种是tap模式,一种是tun模式。

tap模式也就是桥接模式,通过软件在系统中模拟出一个tap设备,该设备是一个二层设备,同时支持链路层协议。

tun模式也就是路由模式,通过软件在系统中模拟出一个tun路由,tun是ip层的点对点协议。

具体使用哪一种模式,需要根据自己的业务进行定义。

ca ca.crt

定义openvpn使用的CA证书文件,该文件通过build-ca命令生成,CA证书主要用于验证客户证书的合法性。

cert vpnilanni.crt

定义openvpn服务器端使用的证书文件。

key vpnilanni.key

定义openvpn服务器端使用的秘钥文件,该文件必须严格控制其安全性。

dh dh2048.pem

定义Diffie hellman文件。

server 10.8.0.0 255.255.255.0

定义openvpn在使用tun路由模式时,分配给client端分配的IP地址段。

ifconfig-pool-persist ipp.txt

定义客户端和虚拟ip地址之间的关系。特别是在openvpn重启时,再次连接的客户端将依然被分配和断开之前的IP地址。

;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

定义openvpn在使用tap桥接模式时,分配给客户端的IP地址段。

;push “route 192.168.10.0 255.255.255.0”

向客户端推送的路由信息,假如客户端的IP地址为10.8.0.2,要访问192.168.10.0网段的话,使用这条命令就可以了。

;client-config-dir ccd

这条命令可以指定客户端IP地址。

使用方法是在/etc/openvpn/创建ccd目录,然后创建在ccd目录下创建以客户端命名的文件。比如要设置客户端 ilanni为10.8.0.100这个IP地址,只要在 /etc/openvpn/ccd/ilanni文件中包含如下行即可:

ifconfig-push 10.8.0.200 255.255.255.0

push “redirect-gateway def1 bypass-dhcp”

这条命令可以重定向客户端的网关,在进行fq时会使用到。

;push “dhcp-option DNS 208.67.222.222”

向客户端推送的DNS信息。

假如客户端的IP地址为10.8.0.2,要访问192.168.10.0网段的话,使用这条命令就可以了。如果有网段的话,可以多次出现push route关键字。同时还要配合iptables一起使用。

client-to-client

这条命令可以使客户端之间能相互访问,默认设置下客户端间是不能相互访问的。

duplicate-cn

定义openvpn一个证书在同一时刻是否允许多个客户端接入,默认没有启用。

keepalive 10 120

定义活动连接保时期限

comp-lzo

启用允许数据压缩,客户端配置文件也需要有这项。

;max-clients 100

定义最大客户端并发连接数量

;user nobody

;group nogroup

定义openvpn运行时使用的用户及用户组。

persist-key

通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys。

persist-tun

通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的。否则网络连接,会先linkdown然后再linkup。

status openvpn-status.log

把openvpn的一些状态信息写到文件中,比如客户端获得的IP地址。

log openvpn.log

记录日志,每次重新启动openvpn后删除原有的log信息。也可以自定义log的位置。默认是在/etc/openvpn/目录下。

;log-append openvpn.log

记录日志,每次重新启动openvpn后追加原有的log信息。

verb 3

设置日志记录冗长级别。

;mute 20

重复日志记录限额

以上就是openvpn服务器端server.conf配置文件的内容。

三、client.conf客户端配置文件
openvpn客户端的配置文件client.conf比较简单,如下:

grep -vE “#|;|^$” client.ovpn

clip_image003

client

定义这是一个client,配置从server端pull拉取过来,如IP地址,路由信息之类,Server使用push指令推送过来。

dev tun

定义openvpn运行的模式,这个地方需要严格和Server端保持一致。

proto tcp

定义openvpn使用的协议,这个地方需要严格和Server端保持一致。

remote 192.168.1.8 1194

设置Server的IP地址和端口,这个地方需要严格和Server端保持一致。

如果有多台机器做负载均衡,可以多次出现remote关键字。

;remote-random

随机选择一个Server连接,否则按照顺序从上到下依次连接。该选项默认不启用。

resolv-retry infinite

始终重新解析Server的IP地址(如果remote后面跟的是域名),保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址。这样无需人为重新启动,即可重新接入VPN。

nobind

定义在本机不邦定任何端口监听incoming数据。

persist-key

persist-tun

ca ca.crt

定义CA证书的文件名,用于验证Server CA证书合法性,该文件一定要与服务器端ca.crt是同一个文件。

cert laptop.crt

定义客户端的证书文件。

key laptop.key

定义客户端的密钥文件。

ns-cert-type server

Server使用build-key-server脚本生成的,在x509 v3扩展中加入了ns-cert-type选项。防止client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server,因为他们的CA里没有这个扩展。

comp-lzo

启用允许数据压缩,这个地方需要严格和Server端保持一致。

verb 3

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值