在CentOS 7环境下搭建OpenVPN服务,Windows客户端、Linux客户端通过OpenVPN服务访问后端机器。
主机规划与架构
服务器名称(hostname) | 操作系统版本 | 内网IP | 外网IP(模拟) | 角色 |
---|---|---|---|---|
web01 | CentOS7.7 | 172.16.10.191 | 无 | 被访问机器 |
web02 | CentOS7.7 | 172.16.10.192 | 无 | 被访问机器 |
openvpn-server | CentOS7.7 | 172.16.10.190 | 10.0.0.190 | Openvpn-Server |
openvpn-client | CentOS7.7 | 无 | 10.0.0.180 | Openvpn-Client |
本地笔记本电脑 | Windows10 | 无 | 10.0.0.X | Openvpn-Client |
OpenVPN软件版本
1 | Linux 安装:openvpn-2.4.9.tar.gz # GitHub地址:https://github.com/OpenVPN/openvpn |
如果widows安装软件在官方访问失败,那么可以从如下地址下载:
1 | https://www.techspot.com/downloads/5182-openvpn.html |
架构图
OpenVPN机器配置必要修改
1 | ## 不存在该配置则添加 |
原因:从客户端访问web01或web02机器需要通过VPN机器中转。
只需添加配置,不需要启动iptables服务
1 | ## 添加如下配置 |
原因:客户端连接VPN后,默认分配的10.8.0.0/24网段地址,不能直接访问web01或web02机器【这两台是172.16.10.0/24网段】,因此需要在iptables进行nat配置。
删除上面的iptables配置信息命令如下。作用:对比正常的访问和异常的访问
1 | # iptables -t nat -D POSTROUTING 1 |
系统时间与硬件时间同步
1 | [root@openvpn-server ~]# crontab -l # 定时任务同步系统时间 |
说明:如果时间不同步,那么VPN登录访问就可能存在问题。
Vmware虚拟机网络设置【可略】
web01机器
1 | $ cat /etc/sysconfig/network-scripts/ifcfg-eth0 |
web02机器
1 | [zhang@zhang ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 |
openvpn-server机器
1 | $ cat /etc/sysconfig/network-scripts/ifcfg-eth0 |
1 | $ cat /etc/sysconfig/network-scripts/ifcfg-eth1 |
openvpn-client机器
1 | $ cat /etc/sysconfig/network-scripts/ifcfg-eth0 |
安装openvpn
根据主机规划,在openvpn-server【172.16.10.190、10.0.0.190】部署openvpn。
安装依赖包
1 | # yum install -y lz4-devel lzo-devel pam-devel openssl-devel systemd-devel sqlite-devel |
[备注如果是阿里云机器,可能还需要装如下包:]
1 | yum install -y autoconf |
从github上下载openvpn源代码包并解压后编译安装,最后建立软连接
1 | # wget https://github.com/OpenVPN/openvpn/archive/v2.4.9.tar.gz |
配置文件修改
1 | # vim /usr/local/openvpn/lib/systemd/system/openvpn-server@.service |
配置系统服务,并开机自启动
1 | # cp -a /usr/local/openvpn/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn.service |
生成证书
easy-rsa下载与配置修改
下载easy-rsa并解压
1 | # wget https://github.com/OpenVPN/easy-rsa/archive/v3.0.7.tar.gz |
根据easy-rsa-3.0.7/easyrsa3/vars.example文件生成全局配置文件vars
1 | # cd easy-rsa-3.0.7/easyrsa3 |
修改vars文件,根据需要去掉注释,并修改对应值;或者直接在文件末尾追加如下信息:
1 | # 国家 |
生成服务端和客户端证书
1 | # ./easyrsa init-pki |
初始化,会在当前目录创建PKI目录,用于存储一些中间变量及最终生成的证书
1 | # ./easyrsa build-ca |
在这部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。
还需要输入common name 通用名,如:openvpen,这个你自己随便设置个独一无二的。
1 | # ./easyrsa build-server-full server nopass |
为服务端生成证书对并在本地签名。nopass参数生成一个无密码的证书;在此过程中会让你确认ca密码
1 | # ./easyrsa gen-dh |
创建Diffie-Hellman,确保key穿越不安全网络的命令,时间会有点长,耐心等待
生成多个客户端证书
1 | # ./easyrsa build-client-full client nopass # 无密码,实际应用中不推荐,客户端有密码可提高安全性 |
为客户端生成证书对并在本地签名。nopass参数生成一个无密码的证书;在此过程中都会让你确认ca密码
1 | # openvpn --genkey --secret ta.key |
加强认证方式,防攻击。如果配置文件中启用此项(默认是启用的),就需要执行上述命令,并把ta.key放到/etc/openvpn/server目录。配置文件中服务端第二个参数为0,同时客户端也要有此文件,且client.conf中此指令的第二个参数需要为1。【服务端有该配置,那么客户端也必须要有】
1 | mkdir -p /etc/openvpn/server/ |
创建服务端配置文件
参照openvpn-2.4.9/sample/sample-config-files/server.conf文件
服务端配置文件
1 | # cat /etc/openvpn/server/server.conf # 配置文件内容 |
配置文件参数说明
参考:openvpn-2.4.9/sample/sample-config-files/server.conf
1 | local 0.0.0.0 |
启动openvpn服务并查看进程与端口
1 | # systemctl start openvpn.service |
通过ifconfig命令,也可见多个tun0网卡信息
Windows客户端配置与访问
客户端安装
安装完毕后会在「网络连接」中会多出一个连接
客户端client用户配置文件
备注:文件名 windows为client.ovpn,Linux为client.conf
1 | 说明: |
参照openvpn-2.4.9/sample/sample-config-files/client.conf文件
1 | ;# 文件名 windows为client.ovpn,Linux为client.conf |
客户端zhangsan用户配置文件
备注:文件名 windows为zhangsan.ovpn,Linux为zhangsan.conf
1 | 说明: |
参照openvpn-2.4.9/sample/sample-config-files/client.conf文件
1 | ;# 文件名 windows为client.ovpn,Linux为client.conf |
配置文件参数说明
参考:openvpn-2.4.9/sample/sample-config-files/client.conf
1 | # 文件名 windows为client.ovpn,Linux为client.conf |
启动客户端并连接VPN
之前生成客户端证书的时候,加上 nopass 参数,因此直接连接无需输入密码。如果连接的是用户zhangsan,则需要输入密码。
连接成功后,会有如下提示
客户端访问后端的web01和web02机器
本地笔记本电脑操作
VPN机器抓包
可见能够正常访问
备注:可以将VPN机器的iptables配置删除;然后断开客户端连接,再重新连接,之后客户端ping 访问试试。【用于对比】
Linux客户端配置与访问
安装openvpn
安装参见上文,上面说过了Linux安装OpenVPN,这里不单独说了。我们这里使用之前创建的wangwu客户端用户进行验证。
配置文件修改
1 | [root@openvpn-client ~]# vim /usr/local/openvpn/lib/systemd/system/openvpn-server@.service |
配置系统服务,并开机自启动【请根据需要加入开机自启动】
1 | # cp -a /usr/local/openvpn/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn.service |
客户端wangwu客户配置
备注:文件名 windows为wangwu.ovpn,Linux为wangwu.conf
1 | 说明: |
1 | [root@openvpn-client wangwu]# pwd |
参照openvpn-2.4.9/sample/sample-config-files/client.conf文件
1 | [root@openvpn-client wangwu]# cat wangwu.conf |
启动客户端并连接VPN
1 | [root@openvpn-client wangwu]# systemctl start openvpn.service |
网卡信息如下图:
客户端访问后端的web01和web02机器
客户端Linux操作
VPN机器抓包
可见能够正常访问
备注:可以将VPN机器的iptables配置删除;然后断开客户端连接,再重新连接,之后客户端ping 访问试试。【用于对比】
推荐阅读
1 | https://www.bbsmax.com/A/x9J23DRZ56/ |
1 | https://my.oschina.net/u/3021599/blog/3048615 |
1 | http://www.ttlsa.com/linux/centos-install-pptp-vpn/ |
完毕!