公司内网openvpn部署
准备环境
编号
|
服务器名称
|
网卡名称
|
网卡
|
定位
|
1号虚拟机
|
lan1
|
ens33
|
lan:10.2.2.1
|
内网主机
|
2号虚拟机
|
lan2
|
ens33
|
lan:10.2.2.2
|
中间主机vpn服务器
|
ens34
|
NAT:192.168.15.144
|
3号虚拟机
|
lan3
|
ens33
|
lan:10.2.2.3
|
内网主机
|
4号虚拟机
|
window1
|
|
NAT:192.168.15.136
|
外网主机
|
1号虚拟机 网络配置
3号虚拟机 网络配置
2号虚拟机 网络配置 (openvpn服务器需要2张网卡,一张负责连接内网,一张负责连接外网)
系统时间与硬件时间同步
*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
lrwxrwxrwx. 1 root root 33 Mar 9 03:59 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
Sun 03 May 2020 03:34:37 PM CST -0.614806 seconds
说明:如果时间不同步,那么VPN登录访问就可能存在问题。
安装openvpn
安装前置
查询前置
rpm -q lz4-devel lzo-devel pam-devel openssl-devel systemd-devel sqlite-devel autoconf automake libtool libtool-ltdl
安装依赖
yum -y install lz4-devel lzo-devel pam-devel openssl-devel systemd-devel sqlite-devel autoconf automake libtool libtool-ltdl
如果无网,,在有网的虚拟机上下载rpm,传上去。
装备2个安装包 (EasyRSA-3.0.8.tgz,openvpn-2.5.0.tar.gz)都可以在github上下载
链接:https://pan.baidu.com/s/1HmtA2eoXvFEC4pztvVbRRQ
提取码:62d4
百度网盘屏蔽了vpn关键字,无法分享,我全部重命名了,里面的东西自己对号入座即可
开始安装
tar xf openvpn-2.5.0.tar.gz
cd openvpn-2.5.0
autoreconf -i -v -f
./configure --prefix=/usr/local/openvpn --enable-lzo --enable-lz4 --enable-plugins --enable-port-share --enable-iproute2 --enable-pf --enable-plugin-auth-pam --enable-pam-dlopen --enable-systemd
make && make install
建立软连接
ln -s /usr/local/openvpn/sbin/openvpn /usr/local/sbin/openvpn
来到文件配置端。
cd /usr/local/openvpn/lib/systemd/system/
这里使用openvpn-server@.service 文件注册服务端
cp -a /usr/local/openvpn/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn-tcp.service
cp -a /usr/local/openvpn/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn-udp.service
复制2份到系统开机注册下
修改服务使用的配置文件对象。
vim openvpn-tcp.service
### 找到 ExecStart 这行,注释改为如下
ExecStart=/usr/local/openvpn/sbin/openvpn --config server-tcp.conf
同理 udp的也改。
vim openvpn-udp.service
根据配置文件,我们知道(WorkingDirectory在/etc/openvpn/server下面)需要有server-tcp.conf和server-udp.conf2个配置文件
但是这个稍后再做。
生成证书(这里需要一个专门的工具Easy-rsa)
easy-rsa下载与配置修改
tar xf EasyRSA-3.0.8.tgz
根据
EasyRSA-3.0.8
/vars.example文件生成全局配置文件vars
cp -a vars.example vars
需要修改的
# 国家
set_var EASYRSA_REQ_COUNTRY "CN"
# 省
set_var EASYRSA_REQ_PROVINCE "SC"
# 城市
set_var EASYRSA_REQ_CITY "LeShan"
# 组织
set_var EASYRSA_REQ_ORG "yang"
# 邮箱
set_var EASYRSA_REQ_EMAIL "yang@123.com"
# 拥有者
set_var EASYRSA_REQ_OU "yxl"
# 长度
set_var EASYRSA_KEY_SIZE 2048
# 算法
set_var EASYRSA_ALGO rsa
# CA证书过期时间,单位天
set_var EASYRSA_CA_EXPIRE 36500
# 签发证书的有效期是多少天,单位天
set_var EASYRSA_CERT_EXPIRE 36500
生成服务端和客户端证书
初始化与创建CA根证书
1 ./easyrsa init-pki
初始化,会在当前目录创建PKI目录,用于存储一些中间变量及最终生成的证书
2 ./easyrsa build-ca
在这部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。
还需要输入common name 通用名(这里不支持删除键),如:
openvpen
,这个你自己随便设置个独一无二的。
生成服务端证书
3 ./easyrsa build-server-full server nopass
密码就是刚刚上面一步输入的
为服务端生成证书对并在本地签名。nopass参数生成一个无密码的证书;在此过程中会让你确认ca密码
4 ./easyrsa gen-dh
创建Diffie-Hellman,确保key穿越不安全网络的命令,时间会有点长,耐心等待
生成客户端证书
生成多个客户端证书
./easyrsa build-client-full client nopass # 无密码,实际应用中不推荐,客户端有密码可提高安全性 //不推荐 不做测试
5 ./easyrsa build-client-full zhonghaoling # 让你输入密码,后续VPN连接时会使用
为客户端生成证书对并在本地签名。nopass参数生成一个无密码的证书;在此过程中都会让你确认ca密码
为了提高安全性,openvpn生成ta.key
6 openvpn --genkey secret ta.key
加强认证方式,防攻击。如果配置文件中启用此项(默认是启用的),就需要执行上述命令,并把ta.key放到/etc/openvpn/server目录。配置文件中服务端第二个参数为0,同时客户端也要有此文件,且client.conf中此指令的第二个参数需要为1。
【服务端有该配置,那么客户端也必须要有】
整理服务端证书
mkdir -p /etc/openvpn/server/
cp -a pki/ca.crt /etc/openvpn/server/
cp -a pki/private/server.key /etc/openvpn/server/
cp -a pki/issued/server.crt /etc/openvpn/server/
cp -a pki/dh.pem /etc/openvpn/server/
cp -a ta.key /etc/openvpn/server/
这些文件都是openvpn服务器需要的,客户端用户等下再整理
创建服务端配置文件
参照openvpn-2.4.9/sample/sample-config-files/server.conf文件
配置文件参数说明
参考:openvpn-2.4.9/sample/sample-config-files/server.conf
local 0.0.0.0
表示openvpn服务端的监听地址
port 1194
监听的端口,默认是1194
proto tcp
使用的协议,有udp和tcp。建议选择tcp
dev tun
使用三层路由IP隧道(tun)还是二层以太网隧道(tap)。一般都使用tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
ca证书、服务端证书、服务端密钥和密钥交换文件。如果它们和server.conf在同一个目录下则可以不写绝对路径,否则需要写绝对路径调用
server 10.8.0.0 255.255.255.0
vpn服务端为自己和客户端分配IP的地址池。
服务端自己获取网段的第一个地址(此处为10.8.0.1),后为客户端分配其他的可用地址。以后客户端就可以和10.8.0.1进行通信。
注意:该网段地址池不要和已有网段冲突或重复。其实一般来说是不用改的。除非当前内网使用了10.8.0.0/24的网段。
ifconfig-pool-persist ipp.txt
使用一个文件记录已分配虚拟IP的客户端和虚拟IP的对应关系,
以后openvpn重启时,将可以按照此文件继续为对应的客户端分配此前相同的IP。也就是自动续借IP的意思。
server-bridge XXXXXX
使用tap模式的时候考虑此选项。
push "route 10.0.10.0 255.255.255.0"
push "route 192.168.10.0 255.255.255.0"
vpn服务端向客户端推送vpn服务端内网网段的路由配置,以便让客户端能够找到服务端内网。多条路由就写多个Push指令
client-to-client
让vpn客户端之间可以互相看见对方,即能互相通信。默认情况客户端只能看到服务端一个人;
默认是注释的,不能客户端之间相互看见
duplicate-cn
允许多个客户端使用同一个VPN帐号连接服务端
默认是注释的,不支持多个客户登录一个账号
keepalive 10 120
每10秒ping一次,120秒后没收到ping就说明对方挂了
tls-auth ta.key 0
加强认证方式,防攻击。如果配置文件中启用此项(默认是启用的)
需要执行openvpn --genkey --secret ta.key,并把ta.key放到/etc/openvpn/server目录
服务端第二个参数为0;同时客户端也要有此文件,且client.conf中此指令的第二个参数需要为1。
cipher AES-256-CBC
# 选择一个密码。如果在服务器上使用了cipher选项,那么您也必须在这里指定它。注意,v2.4客户端/服务器将在TLS模式下自动协商AES-256-GCM。
compress lz4-v2
push "compress lz4-v2"
openvpn 2.4版本的vpn才能设置此选项。表示服务端启用lz4的压缩功能,传输数据给客户端时会压缩数据包。
Push后在客户端也配置启用lz4的压缩功能,向服务端发数据时也会压缩。如果是2.4版本以下的老版本,则使用用comp-lzo指令
comp-lzo
启用lzo数据压缩格式。此指令用于低于2.4版本的老版本。且如果服务端配置了该指令,客户端也必须要配置
max-clients 100
并发客户端的连接数
persist-key
persist-tun
通过ping得知超时时,当重启vpn后将使用同一个密钥文件以及保持tun连接状态
status openvpn-status.log
在文件中输出当前的连接信息,每分钟截断并重写一次该文件
;log openvpn.log
;log-append openvpn.log
默认vpn的日志会记录到rsyslog中,使用这两个选项可以改变。
log指令表示每次启动vpn时覆盖式记录到指定日志文件中,
log-append则表示每次启动vpn时追加式的记录到指定日志中。
但两者只能选其一,或者不选时记录到rsyslog中
verb 3
日志记录的详细级别。
;mute 20
沉默的重复信息。最多20条相同消息类别的连续消息将输出到日志。
explicit-exit-notify 1
当服务器重新启动时,通知客户端,以便它可以自动重新连接。仅在UDP协议是可用
配置参数
--------------------------------------------------------------------------------------------
local 0.0.0.0
port 1115
proto tcp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
server 10.123.0.0
255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.2.2.0 255.255.255.0"
;client-to-client
;duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/server/ta.key 0
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
;comp-lzo
max-clients 1000
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
verb 3
;explicit-exit-notify 1
------------------------------------------------------------------------------------------------------------------------
vim server-tcp.conf
创建配置文件
local 0.0.0.0
port 1229
proto udp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
server 10.124.0.0
255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.2.2.0 255.255.255.0"
;client-to-client
;duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/server/ta.key 0
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
;comp-lzo
max-clients 1000
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
verb 3
;explicit-exit-notify 1
--------------------------------------------------------------------------------------------------------------------------------------
vim server-udp.conf
注册开机认证
systemctl enable openvpn-tcp.service
systemctl enable openvpn-udp.service
启动openvpn服务并查看进程与端口
# systemctl start openvpn-tcp.service
# ps -ef | grep 'open'
nobody 1587 1 0 12:13 ? 00:00:00 /usr/local/openvpn/sbin/openvpn --config server-tcp.conf
# systemctl status openvpn-tcp.service
ip address
同时也会新增一个网卡
同理启动
systemctl start openvpn-udp.service
ip address
systemctl status openvpn-udp.service
客户端client用户配置文件
备注:文件名 windows为client.ovpn,Linux为client.conf
需要的证书与配置文件如下图:
下载并安装客户端
用户的配置文件需要放到config下
创建用户目录存放用户配置文件
说明:
1、注意路径,在OpenVPN/config目录下建立了zhonghaoling目录
2、ca.crt、
zhonghaoling
.crt、
zhonghaoling
.key、ta.key都是之前创建好的,只有zhangsan.ovpn需要单独下载并修改。
整理客户证书。
如果是公司给员工开通vpn,需要打包
(
ca.crt、
zhonghaoling
.crt、
zhonghaoling
.key、ta.key,
zhonghaoling-tcp.ovpn,zhonghaoling-udp.ovpn
)
发给员工。
员工只需要安装客户端,放入配置文件即可,不要把过多复杂的操作交给员工
cd /home/EasyRSA-3.0.8
mkdir /opt/zhonghaoling
cp -a pki/ca.crt /opt/zhonghaoling/
cp -a pki/issued/zhonghaoling.crt /opt/zhonghaoling/
cp -a pki/private/zhonghaoling.key /opt/zhonghaoling/
cp -a ta.key /opt/zhonghaoling/
首先这个用户是用window连接的
来到目录下
cd /opt/zhonghaoling/
创建客户端配置文件
vim zhonghaoling-tcp.ovpn
client
dev tun
proto tcp
remote 192.168.15.144 1115
resolv-retry infinite
nobind
;user nobody
;group nobody
persist-key
persist-tun
ca ca.crt
cert zhonghaoling.crt
key zhonghaoling.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
compress lz4-v2
verb 3
;mute 20
继续创建一份udp的
vim zhonghaoling-udp.ovpn
--------------------------------------------------------------------------------------------------------------------------------
client
dev tun
proto udp
remote 192.168.15.144 1229
resolv-retry infinite
nobind
;user nobody
;group nobody
persist-key
persist-tun
ca ca.crt
cert zhonghaoling.crt
key zhonghaoling.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
compress lz4-v2
verb 3
;mute 20
配置文件参数说明
参考:openvpn-2.4.9/sample/sample-config-files/client.conf
# 文件名 windows为client.ovpn,Linux为client.conf
client
# 标识这是个客户端
dev tun
# 使用三层路由IP隧道(tun)还是二层以太网隧道(tap)。服务端是什么客户端就是什么
proto tcp
# 使用的协议,有udp和tcp。服务端是什么客户端就是什么
remote 10.0.0.190 1194
# 服务端的地址和端口
resolv-retry infinite
# 一直尝试解析OpenVPN服务器的主机名。
# 在机器上非常有用,不是永久连接到互联网,如笔记本电脑。
nobind
# 大多数客户机不需要绑定到特定的本地端口号。
;user nobody
;group nobody
# 初始化后的降级特权(仅非windows)
persist-key
persist-tun
# 尝试在重新启动时保留某些状态。
ca ca.crt
cert client.crt
key client.key
# ca证书、客户端证书、客户端密钥
# 如果它们和client.conf或client.ovpn在同一个目录下则可以不写绝对路径,否则需要写绝对路径调用
remote-cert-tls server
# 通过检查certicate是否具有正确的密钥使用设置来验证服务器证书。
tls-auth ta.key 1
# 加强认证方式,防攻击。服务端有配置,则客户端必须有
cipher AES-256-CBC
# 选择一个密码。如果在服务器上使用了cipher选项,那么您也必须在这里指定它。注意,v2.4客户端/服务器将在TLS模式下自动协商AES-256-GCM。
compress lz4-v2
# 服务端用的什么,客户端就用的什么
# 表示客户端启用lz4的压缩功能,传输数据给客户端时会压缩数据包。
verb 3
# 日志级别
;mute 20
# 沉默的重复信息。最多20条相同消息类别的连续消息将输出到日志。
最后
查看文件
打包发给员工
zip -r zhonghaoling.zip zhonghaoling/
zip给客户端
启动openvpn
看见2个连接
首先确定openvpn服务器对应端口开启
tcp连接能用
能用内网ip登录和外网ip登录openvpn服务器
udp连接能用
到了这里意味着成功了一半。
./configure --prefix=/usr/local/openvpn --enable-lzo --enable-lz4 --enable-plugins --enable-port-share --enable-iproute2 --enable-pf --enable-plugin-auth-pam --enable-pam-dlopen --enable-systemd
cp -a /usr/local/openvpn/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn-client.service
Password entry required for 'Enter Private Key Password:' (PID 16008).