OpenVPN使用故障收录

简介: 运维系列

OpenVPN高级进阶

OpenVPN服务是一个比较老的服务了,但是作为一个核心的基础服务我觉得还是有必要认真仔细的掌握和理解,并且能根据其自身的功能优化和配置出我们需要的场景,只要能解决实际的问题场景,对我们来说就是有价值的,下面通过几个场景聊一下OpeVPN的高阶配置选项:

背景:

  1. 公司内部网段是192.168.99.0/24
  2. 所有人允许访问反向代理主机为192.168.99.130,但不能访问其他服务器;
  3. 特定的用户允许访问数据库服务器192.168.99.131,不能访问其他服务器;
  4. 管理员能访问所有公司内网服务器

场景1 限制主机访问

我们不需要VPN客户端访问VPN服务端所在集群中的所有其他主机,允许某些特定的VPN客户端访问指定的内网主机资源的时候,我们需要在客户端无感知的情况下对VPN服务端做一些设置满足以上场景:

更新服务端的配置,将VPN地址池的网段划分为管理员网段、客户组网段、普通网络:

# 在Openvpn服务端配置文件server.conf增加:
#10.8.0.0是给所有VPN客户端的IP段;
server 10.8.0.0 255.255.255.0
#10.8.1.0是给管理员分配的IP段;
server 10.8.1.0 255.255.255.0
#10.8.2.0就是给特定用户组分配的IP段;
server 10.8.2.0 255.255.255.0
#下面是定义服务器读取特殊客户端配置文件的目录为ccd,ccd是与Openvpn服务端配置文件同级目录中的ccd目录
client-config-dir ccd

然后给管理员配置访问网络

cat ccd/sysadmin1
ifconfig-push 10.8.1.1 10.8.1.2

客户组网络:

cat ccd/kehugroup
ifconfig-push 10.8.2.1 10.8.2.2

这里需要注意的是, ccd目录下的文件名就是用户的Common Name,OpenVPN是根据该名称来获得指定客户端的,客户端的IP地址不是任意指定的,由于Windows的TAP驱动必须采用/30网段的IP,为兼容该协议,应从特定的IP地址中选择,而且是成组出现的。

最后在完成网络的划分之后,在OpenVPN端进行Iptables限制:

iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 192.168.99.130 -j ACCEPT
iptables -A FORWARD -i tun0 -s 10.8.1.0/24 -d 192.168.99.0/24 -j ACCEPT
iptables -A FORWARD -i tun0 -s 10.8.2.0/24 -d 192.168.99.131 -j ACCEPT

场景2 打通OpenVPN客户端与服务端的内网

#让所有客户端都增加到内网192.168.99.0/24的路由
push "route 192.168.99.0 255.255.255.0"
# 让所有的客户端都能访问仅允许服务端访问的网站(约束白名单)
push "route 39.156.69.79 255.255.255.255"
# 向客户端推送增加访问服务端子网的192.168.10.0/24的路由,注意服务端的IP是否是子网的网关,否则需要在子网网关处添加到达192.168.99.0的路由(客户端也是如此)
push "route 192.168.10.0 255.255.255.0"

在子网网关处添加路由

route add -net 192.168.99.0 mask 255.255.255.0 gw 192.168.10.254 dev ens160

场景3 OpenVPN提供DHCP与DNS

OpenVPN内部提供了DHCP的服务,而不需要依赖外部的DHCP服务器。同样,也提供了DHCP服务的一些配置参数

# openvpn服务端的配置
#定义客户端的DNS服务器地址
push "dhcp-option DNS 114.114.114.114" # 这是首选DNS
push "dhcp-option DNS 8.8.8.8" # 这是备选DNS
#定义客户端的WINS服务器地址
push "dhcp-options WINS 192.168.228.1" # 这是设置IP和主机名之间的映射与IP和域名之间的映射不同,较少使用
#让客户端发起的所有IP请求都通过OpenVPN服务器,可用于全局代理使用,启用后会出现浏览器内打不开网站等情况
push "redirect-gateway def1 bypass-dhcp"

场景4 添加LDAP认证

通常情况下,OpenVPN客户端都需要通过SSL连接的,因此客户端必须要有ca证书,服务端可以通过设置client-cert-not-required让客户端不配置证书。但是一般通过OpenLDAP认证是最方便的事情:

  1. 安装LDAP`模块的配置
yum install openvpn-auth-ldap -y
[root@vpn ~]# ls -al /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so
-rwxr-xr-x 1 root root 133320 Sep  6  2020 /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so
  1. 准备ldap认证的配置文件/etc/openvpn/auth/ldap.conf
mkdir -p /etc/openvpn/auth
cd $_ && touch ldap.conf

下面是ldap.conf的配置文件

[root@vpn ~]# cat /etc/openvpn/auth/ldap.conf
<LDAP>
    # LDAP server URL
    URL        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    openvpnuserpasswd
    # 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 DN
    BaseDN        "ou=People,dc=openldap,dc=kubemaster,dc=top"
    # User Search Filter
    SearchFilter    "(&(uid=%u))" # uid或者cn一般都可以,根据自己的条件

    # Require Group Membership
    RequireGroup    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>

在完成ldap的配置之后,只需要在服务端增加以下配置即可:

client-cert-not-required
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"
username-as-common-name

这样就完成了基于openldap认证的OpenVPN客户端的用户鉴权。

疑难杂症

  1. VPN每隔10s左右会重新连接

基于密码认证的VPN出现每隔10s重新连接,说明你的账号在别的设备上进行登录了。请检查是否存在改情况并建议及时的修改密码。

  1. Mac上的Tunnelblick总是处于不断认证的状态

image-20200620123753245

出现这种情况说明你的Tunnelblick的版本太低,需要你及时的更新该软件的版本,就可以解决,TunnelBlick下载地址

  1. Window上使用OpenVPN客户端连接时出现SSL ERROR

出现这种问题说明你的Window上的OpenVPN客户端版本太低,需要重新下载客户端并且使用管理员身份安装和启动。

  1. Window上使用OpenVPN客户端连接时出现windows route add command failed

出现这种问题,属于打开VPN客户端的时候没有使用管理员身份打开,没有添加路由的权限。

  1. 使用OpenVPN连接出现身份验证失败

出现这种问题,这是属于你的用户名或者密码填写错误,认真检查账户信息或者找相关技术负责人重新修改密码。

相关文章
|
4月前
|
安全 前端开发 网络协议
百度搜索:蓝易云【pfSense使用HAProxy+ACME反向代理设置教程】
这些是使用pfSense的HAProxy和ACME插件设置反向代理的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
60 1
|
8月前
|
安全 测试技术 数据库连接
利用MSF上线断网主机的思路分享
利用MSF上线断网主机的思路分享
134 0
|
负载均衡 监控 网络协议
我个人的分布式集群问题集锦,nginx/lvs/dns/cdn(★firecat推荐★)
我个人的分布式集群问题集锦,nginx/lvs/dns/cdn(★firecat推荐★)
416 0
我个人的分布式集群问题集锦,nginx/lvs/dns/cdn(★firecat推荐★)
|
网络协议 网络安全 CDN
|
安全 算法 网络安全
你的你的Elasticsearch在“裸奔”吗?在“裸奔”吗?
随着越来越多的个人信息暴露在公网,信息安全得到欲来越多的关注,今天就教大家如何用Elasticsearch保障安全。
1066 0
|
Linux 数据安全/隐私保护 Windows
linux服务器出现严重故障后的原因以及解决方法
1、把系统安装光盘插入,重启机器,启动时迅速按下Del键,进入CMOS,把启动顺序改为光盘先启动,这样就启动了Linux安装程序,按F5,按提示打入Linux rescue回车,进入救援模式,接下来是选择语言及键盘,直接回车即可,程序提示已经把硬盘上的Linux系统安装到了/mnt/sysimage下,然后出现了超级用户提示符。
798 0
|
安全 Linux 应用服务中间件
nginx网站漏洞该如何修复 加强服务器的安全防护
服务器的安全防护中,网站环境的搭建与安全部署也是很重要的一部分,目前大多数的服务器都使用的是nginx来搭建网站的运行环境,包括windows服务器,linux服务器都在使用,nginx的安全设置对于服务器安全起到很重要的作用。
1680 0
|
安全 前端开发 数据安全/隐私保护
记一次站点被挂马问题排查
起因,在下班准备回家之际,收到几条朋友发来的信息,说他的网站在百度搜索做信息流广告推广,但是从百度搜索点击打开就会跳转的博彩网站,让我帮忙排查下问题,是不是被挂马了,于是乎就开始了后面的故事 为了保护网站隐私,假定网站地址是:http://www.
1708 0
|
监控 网络协议 Linux