全网最完善的openVPN搭建部署指南

2年前 (2023-07-16)阅读35回复0
administrator
administrator
  • 管理员
  • 注册排名1
  • 经验值775
  • 级别管理员
  • 主题155
  • 回复0
楼主

参考链接:https://zhuanlan.zhihu.com/p/199176752

简介:openVPN灾后重建



这次终于把自己给"坑"坏了,因为一次不可控制的"停电"让公司的部分老年机饱受了一次"灾难性"的洗礼。

幸运的是部分幸存下来的主机中包括我们至关重要的服务,而就是那些看似无状态的服务深深的打了自己一巴掌。首当其冲的就是那个万恶的Openvpn服务。使用Openvpn主要是为了解决一下场景:

我们的部分非业务办公服务主要服务于内部的办公人员,由于疫情的背景下,我们需要满足远程办公的条件以及非本地的同事也是需要访问这些资源的,包括一些暴露在公网限制访问的服务等,所以通过点对点登录访问的Openvpn就是我们一直以来的选择。

灾难后的恢复永远是让人发狂,而这边大家又在不断的"吹更",实在难以淡定下来,不懂网络的我也没法直接在那些老古董身上动刀子,在一段焦虑和无奈之后还是冷静下仔细思考如何快速的恢复"战场",因为一台物理机老前辈因为掉电让磁盘歇工了,短时间内想要修复物理机恐怕已经不可能了,所以我开始这样做:


第一步 网上冲浪,查看防火墙端口绑定规则

在网上疯狂的搜索着关于CISCO ASA5515-X的网络配置,查看防火墙中关于公网IP:x.x.x.x与主机之间端口射映关系,因为不断的变更交接人,记录的网络配置信息和文档早已随着时间飞逝了,这时候不免想来句你妹的...

ciscoasa# show nat...
ciscoasa# show run object...

通过查看一波natobjectservice之后,发现了防火墙上配置的Public IP与内部服务OpenVPN主机之间端口的映射关系,于是赶紧找几个还有气的主机进行业务恢复

第二步 照着葫芦画个瓢

这是一台Centos7主机

[root@vpn ~]# cat /etc/redhat-releaseCentOS Linux release 7.7.1908 (Core)

首先就是将其IP地址修改为防火墙内规则制定的主机IP

[root@vpn ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="none"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"IPV6INIT="yes"IPV6_AUTOCONF="yes"IPV6_DEFROUTE="yes"IPV6_FAILURE_FATAL="no"IPV6_ADDR_GEN_MODE="stable-privacy"NAME="ens160"UUID="aa08d0dd-5ba5-412c-84ab-716b885c4d89"DEVICE="ens160"ONBOOT="yes"IPADDR="172.16.99.129"PREFIX="24"GATEWAY="192.168.99.254" # 修改成需要的IP地址IPV6_PRIVACY="no"PEERDNS="yes"DNS1="114.114.114.114"
第三步 配置OpenVPN环境

在找对IP访问的映射关系之后,就是抓紧恢复服务,于是有了下面的安装配置段:

  1. 使用easy-rsa制作OpenVPN所需的证书以及客户端证书

yum install openvpn
mkdir /data/tools -p 
wget -P /data/tools https://github.com/OpenVPN/easy-rsa/releases/download/3.0.1/EasyRSA-3.0.1.tgz
tar zxf EasyRSA-3.0.1.tgz
cp -rf EasyRSA-3.0.1 /etc/openvpn/easy-rsacd /etc/openvpn/easy-rsa

./easyrsa init-pki # 初始化证书目录pki./easyrsa build-ca nopass 
# 创建根证书,提示输入Common Name,名称随意,但是不能和服务端证书或客户端证书名称相同./easyrsa gen-dh # 生成Diffle Human参数,它能保证密钥在网络中安全传输
  1. 制作CA证书

./easyrsa init-pki # 初始化证书目录pki
  1. 制作服务端OpenVPN Server证书

./easyrsa build-server-full server nopass # server是服务端证书名称,可以用其它名称
  1. 制作客户端证书

./easyrsa build-client-full barry nopass # barry是客户端证书名称,可以用其它名称
  1. 配置LDAP认证

yum install openvpn-auth-ldap -y
[root@vpn openvpn]# ls -al /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so-rwxr-xr-x 1 root root 133320 Sep  6  2019 /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so
  1. 准备LDAP认证配置文件

<LDAP># LDAP server URLURL        ldap://192.168.99.130# Bind DN (If your LDAP server doesn't support anonymous binds)BindDN        cn=openvpn,dc=openldap,dc=kubemaster,dc=top
Password    openvpn_Passsword# Network timeout (in seconds)Timeout        15# Enable Start TLS#TLSEnable    no# Follow LDAP Referrals (anonymously)#FollowReferrals no# TLS CA Certificate File#TLSCACertFile    /usr/local/etc/ssl/ca.pem# TLS CA Certificate Directory#TLSCACertDir    /etc/ssl/certs# Client Certificate and key# If TLS client authentication is required#TLSCertFile    /usr/local/etc/ssl/client-cert.pem#TLSKeyFile    /usr/local/etc/ssl/client-key.pem# Cipher Suite# The defaults are usually fine here# TLSCipherSuite    ALL:!ADH:@STRENGTH</LDAP>

<Authorization># Base DNBaseDN        "ou=People,dc=openldap,dc=kubemaster,dc=top"# User Search FilterSearchFilter    "(&(uid=%u))"# Require Group MembershipRequireGroup    false# Add non-group members to a PF table (disabled)#PFTable    ips_vpn_users<Group>
  BaseDN        "ou=Groups,dc=example,dc=com"
  SearchFilter    "(|(cn=developers)(cn=artists))"
  MemberAttribute    uniqueMember
  # Add group members to a PF table (disabled)
  #PFTable    ips_vpn_eng
</Group>
</Authorization>
  1. 配置服务端配置文件

[root@vpn openvpn]# cat server.conf |egrep -v '^$|^#|^\;'port 11194
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key  # This file should be kept secretdh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.8.0.0 255.255.255.0 # 这里是openvpn server的IP地址池ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 114.114.114.114" # 下发给客户端的DNSpush "dhcp-option DNS 8.8.8.8"client-to-client
duplicate-cn
keepalive 10 120
comp-lzo
max-clients 50
user root
group root
persist-key
persist-tun
status openvpn-status.loglog         openvpn.loglog-append  openvpn.log
verb 3
mute 10
client-cert-not-required
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"username-as-common-name
push "route 192.168.0.0 255.255.0.0"push "route 192.168.99.0 255.255.255.0" # 下发给客户端的需要走VPN的网络流量,其它网段不走VPN,可正常上网。
  1. 开启路由转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
  1. OpenVPN防火墙的配置,这里是最重要的一环,注意不要把你的网络设备名称写错了。

iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o ens160 -j MASQUERADE # 网络设备为ens160
  1. 配置OpenVPN的启停脚本

#!/bin/bashecho "OpenVPN ..........[STOP]"ps -ef |grep openvpn | grep -v grep | awk '{print $2}' | xargs killecho "OpenVPN ..........[START]"/usr/local/openvpn/sbin/openvpn --config /etc/openvpn/server.conf &
  1. 开机服务自启,将下面内容写到/etc/rc.local

/usr/local/openvpn/sbin/openvpn --daemon --config /etc/openvpn/server.conf > /dev/null 2>&1 &exit 0
  1. 客户端的配置

# 把服务器上这三个文件拷贝下来和客户端的配置文件放在一起/etc/openvpn/easy-rsa/pki/private/barry.key
/etc/openvpn/easy-rsa/pki/issued/barry.crt
/etc/openvpn/easy-rsa/pki/ca.crt# 客户端配置文件内容client
dev tun
proto tcp
resolv-retry infinite
nobind
remote PUBLIC_ADDRESS 11194 # 就是与192.168.99.129上的11194绑定的那个公网IP地址persist-key
persist-tun
ca ca.crt
ns-cert-type server
cert barry.crt
key barry.key
verb 3 # 日志等级comp-lzo
auth-user-pass

这样基本上就完成了OpenVPN的搭建部署,也可能是我最后一次整这玩意儿。下面是配置OpenVPN时候遇到的问题

  1. 明明在openvpn服务端配置了服务端同一网段的下发路由,但就是ping不通服务端同一网段的其他主机,那你需要认真检查下面的配置,包括网卡设备名

iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o ens160 -j MASQUERADE # 网络设备为ens160sudo iptables -nL -t nat # 查看
  1. 为什么连上了OpenVPN我所有的流量都经过OpenVPN了,那是你启用了下面的配置,这个配置你也可以用于科学*/上网

push "redirect-gateway def1 bypass-dhcp"
  1. 给客户端指定固定的VPN地址

client-config-dir ccd # 表示指定固定IP地址的客户端配置文件存储在openvpn服务端配置文件统计目录下的ccd目录里面route 192.168.40.128 255.255.255.248 # 指定客户端IP的地址
  1. 为什么在linux/MacOS上配置都没有问题,而在window上有问题,此时你需要注意的是,在window上安装和启动OpenVPN都是需要管理员权限的,因为它会涉及到一些添加路由的操作,这些需要管理员权限。

以上为转发

版权所有:https://developer.aliyun.com/article/976279

1
回帖

全网最完善的openVPN搭建部署指南 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息