参考链接: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...
通过查看一波nat
、object
和service
之后,发现了防火墙上配置的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访问的映射关系之后,就是抓紧恢复服务,于是有了下面的安装配置段:
使用
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参数,它能保证密钥在网络中安全传输
制作
CA
证书
./easyrsa init-pki # 初始化证书目录pki
制作服务端
OpenVPN Server
证书
./easyrsa build-server-full server nopass # server是服务端证书名称,可以用其它名称
制作客户端证书
./easyrsa build-client-full barry nopass # barry是客户端证书名称,可以用其它名称
配置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
准备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>
配置服务端配置文件
[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,可正常上网。
开启路由转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p
OpenVPN
防火墙的配置,这里是最重要的一环,注意不要把你的网络设备名称写错了。
iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o ens160 -j MASQUERADE # 网络设备为ens160
配置
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 &
开机服务自启,将下面内容写到
/etc/rc.local
/usr/local/openvpn/sbin/openvpn --daemon --config /etc/openvpn/server.conf > /dev/null 2>&1 &exit 0
客户端的配置
# 把服务器上这三个文件拷贝下来和客户端的配置文件放在一起/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时候遇到的问题
明明在openvpn服务端配置了服务端同一网段的下发路由,但就是ping不通服务端同一网段的其他主机,那你需要认真检查下面的配置,包括网卡设备名
iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o ens160 -j MASQUERADE # 网络设备为ens160sudo iptables -nL -t nat # 查看
为什么连上了OpenVPN我所有的流量都经过OpenVPN了,那是你启用了下面的配置,这个配置你也可以用于科学*/上网
push "redirect-gateway def1 bypass-dhcp"
给客户端指定固定的
VPN
地址
client-config-dir ccd # 表示指定固定IP地址的客户端配置文件存储在openvpn服务端配置文件统计目录下的ccd目录里面route 192.168.40.128 255.255.255.248 # 指定客户端IP的地址
为什么在
linux/MacOS
上配置都没有问题,而在window上有问题,此时你需要注意的是,在window上安装和启动OpenVPN
都是需要管理员权限的,因为它会涉及到一些添加路由的操作,这些需要管理员权限。
以上为转发
版权所有:https://developer.aliyun.com/article/976279