[转帖]公司内网openvpn部署

公司,内网,openvpn,部署 · 浏览次数 : 0

小编点评

**安装步骤** 1. 下载并解压缩 openvpn-2.5.0.tar.gz 文件 2. 解压文件并设置环境变量 OPENVPN_DIR 3. 设置防火墙规则,允许 UDP 连接 4. 创建开机服务文件 5. 注册开机服务 6. 启动服务 **配置** 1. 编辑配置文件 openvpn-2.5.0/client.service 2. 修改指向配置文件 3. 注释掉防火墙规则,允许所有连接 4. 保存配置文件 **测试** 1. 连接到 VPN 服务 2. 测试 UDP 连接是否成功

正文

公司内网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张网卡,一张负责连接内网,一张负责连接外网)

系统时间与硬件时间同步

  1. [root@openvpn-server ~]# crontab -l # 定时任务同步系统时间
  2. [root@openvpn-server ~]# crontab -e # 添加定时任务
  3. */10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
  4. [root@openvpn-server ~]# ll /etc/localtime # 使用上海时间
  5. lrwxrwxrwx. 1 root root 33 Mar 9 03:59 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
  6. [root@openvpn-server ~]# hwclock --show # 查看硬件时间
  7. Sun 03 May 2020 03:34:37 PM CST -0.614806 seconds
  8. [root@openvpn-server ~]# hwclock --systohc # 系统时间同步到硬件时间
  9. 说明:如果时间不同步,那么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连接能用
到了这里意味着成功了一半。
第一步测试网络能否通10.2.2.1
这里网络不通。需要开启转发功能
开启转发功能并生效
修改配置
grep 'net.ipv4.ip_forward = 1' /etc/sysctl.conf || echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
使其生效
sysctl -p
原因:从客户端访问web01或web02机器需要通过VPN机器中转。
现在能ping通,但是还是无法用ssh登陆
原因是请求后的数据包无法找到网络返回回来,需要手动指定数据包返回路径
这里需要停止防火墙,去除开机启动,用 iptables规则。这里经测试firewall无法使用该规则
systemctl stop firewalld
systemctl disable firewalld
iptables配置
只需添加配置,不需要启动iptables服务
添加规则
iptables -t nat -A POSTROUTING -s 10.123.0.0/24 -o ens33  -j MASQUERADE
永久保存
iptables-save > /etc/sysconfig/iptables
查询规则
iptables -L -n -t nat
原因:客户端连接VPN后,默认分配的10.123.0.0/24网段地址,不能直接获取web01或web02机器【这两台是10.2.2.0/24网段】返回的数据包,因此需要在iptables进行nat配置。
删除上面的iptables配置信息命令如下。作用:对比正常的访问和异常的访问
iptables -t nat -D POSTROUTING 1
现在可以进行访问了
接下来就是另一台Linux做客户端
安装步骤,如服务端一样
  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
  cp -a /usr/local/openvpn/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn-client.service
   vi /usr/lib/systemd/system/openvpn-client.service
修改指向配置文件
mkdir -p /etc/openvpn/
将客户端生成的客户配置文件传到该服务器解压
备注:文件名 windows为wangwu.ovpn,Linux为wangwu.conf
cp -a zhonghaoling-tcp.ovpn zhonghaoling.conf
注册开机服务
systemctl enable openvpn-client.service
启动服务
systemctl start openvpn-client.service
这里会报提示
Broadcast message from root@yanghome2 (Wed 2021-01-06 22:36:04 CST):
Password entry required for 'Enter Private Key Password:' (PID 16008).
Please enter password with the systemd-tty-ask-password-agent tool!
这里告诉你需要使用systemd-tty-ask-password-agent( 列出或处理当前正在等待中的系统密码请求)对其输入用户密码,
如果跳过,每隔1分钟又会提示输入密码
直接复制上面的提示,然后会输入密码
systemd-tty-ask-password-agent
ip address
就可以看见分配的地址了
先ping一下 内网服务器
可以看见可以ping通了
然后我们登陆一下
发现也可以登录了。
这里udp的连接就不配置了 ,
这里有个很迷的操作 
1---如何保留firewall的情况下openvpn服务器生效
2----udp无法立即生效,需要等待十几分钟才会生效,允许udp连接
                       end
文章知识点与官方知识档案匹配,可进一步学习相关知识

与[转帖]公司内网openvpn部署相似的内容:

[转帖]公司内网openvpn部署

公司内网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

[转帖]CentOS 7 下用 firewall-cmd / iptables 实现 NAT 转发供内网服务器联网

https://www.cnblogs.com/hope250/p/8033818.html 自从用 HAProxy 对服务器做了负载均衡以后,感觉后端服务器真的没必要再配置并占用公网IP资源。而且由于托管服务器的公网 IP 资源是固定的,想上 Keepalived 的话,需要挤出来 3 个公网 I

[转帖]org.hibernate.engine.query.spi.QueryPlanCache引起内存泄漏问题排查

事情缘由 协助公司中药网排查内存溢出的问题。这个系统是基于Hibernate3开发的一个药品信息、价格变动、药品咨询新闻相关的网站,90%的操作都是查询。 问题日志 工具排查 Dump堆内存文件,使用MAT进行分析 1、jsp 命令获取应用的pid 2、jmap -dump:format=b,fil

[转帖]Hibernate的QueryPlanCache引发的堆内存溢出

事情缘由 协助公司中药网排查内存溢出的问题。这个系统是基于Hibernate3开发的一个药品信息、价格变动、药品咨询新闻相关的网站,90%的操作都是查询。 问题日志 工具排查 Dump堆内存文件,使用MAT进行分析 1、jsp 命令获取应用的pid 2、jmap -dump:format=b,fil

[转帖]方神: 银河麒麟V10SP1桥接配置网卡总结

简介 公司计划再XC服务器上做业务软件的兼容测试,为了满足需要,想利用操作系统自带的KVM虚拟化做些虚拟机。再配置过程中发现虚拟机无法与宿主机通信,无法访问外网。以下对该问题做些简要的故障分析记录。 环境说明 服务器: 飞腾S2500*2 128Core 1T内存 操作系统: #版本 Kylin L

[转帖]用buildkit和containerd构建镜像

https://zhuanlan.zhihu.com/p/366671300 最近因为K8s抛弃Docker了,所以就只装了个containerd,这样就需要一个单独的镜像构建工具了,就用了buildkit,这也是Docker公司扶持的,他们公司的人出来搞的开源工具,官网在 https://gith

[转帖]用buildkit和containerd构建镜像

https://zhuanlan.zhihu.com/p/366671300 最近因为K8s抛弃Docker了,所以就只装了个containerd,这样就需要一个单独的镜像构建工具了,就用了buildkit,这也是Docker公司扶持的,他们公司的人出来搞的开源工具,官网在 https://gith

[转帖]websocket消息推送设计

https://cloud.tencent.com/developer/article/2168088?areaSource=&traceId= 1. 背景 公司内目前有几个项目都有消息推送的功能,例如:某个业务操作之后需要推送消息给前端页面,让用户实时感知。 但是目前公司内的消息推送实现分散在在各

[转帖]华为连投4家EDA公司 业内头部企业竞相

https://guba.sina.com.cn/?bid=115288&s=thread&tid=26 近日,华为旗下哈勃投资再度“落子”EDA(电子设计自动化软件工具),投资上海阿卡思微电子技术有限公司(下称“阿卡思微”)。这是华为在不到1年的时间内四度投资EDA公司,显示出其对EDA的看好程度

[转帖]Netflix 如何在 7 分钟内完成故障转移

https://www.oschina.net/translate/how-netflix-does-failovers-7-minutes-flat?print 在冬季2012年,Netflix公司遭受了 长时间断电 持续了七个小时,由于在美东地区的AWS弹性负载均衡服务的问题。(Netflix的