PC/Android通过SSL-VPN连接VPC

可通过SSL-VPN打通客户端(Windows、Linux、Android、macOS)与云上VPC内网,实现互联网环境下的安全访问。

针对iOS/iPadOS系统客户端,请查看iPhone/iPad通过SSL-VPN连接VPC

场景示例

目标:创建SSL-VPN网关,使本地客户端能够通过内网IP安全访问VPC内的ECS实例。

image

资源规划如下:

  • VPC

    • 名称:vpc-demo

    • 地域:华东1(杭州)

    • 网段:10.0.0.0/16

    • 交换机:创建2个,名称分别为vsw1vsw2

      • vsw1位于可用区J,网段:10.0.0.0/24

      • vsw2位于可用区K,网段:10.0.1.0/24

    • ECS:地址为10.0.0.1,操作系统为Alibaba Cloud Linux 3.2104 LTS 64

  • 客户端所在的本地网段:172.16.0.0/16

步骤一:配置云上VPN资源

在将客户端连接到VPC之前,需先在阿里云控制台创建并配置 VPN 网关、SSL 服务端、SSL客户端。

1. 创建VPN网关

VPN 网关是 SSL-VPN 连接在云上的出入口。

  1. 前往控制台VPN网关页面,单击创建VPN网关

  2. VPN网关(包月)页面进行配置:

    配置项

    截图

    • 实例名称vpn-demo

    • 地域和可用区华东1(杭州)

    • 网关类型普通型

    • VPC:选择客户端要访问的VPC。

    • 虚拟交换机1/虚拟交换机2: 分别选择vsw1vsw2

      VPN网关底层采用双机热备架构,在VPC支持多个可用区的地域,为保障跨可用区高可用性,VPC需包含至少2个位于不同可用区的交换机。如果不满足条件,请先创建交换机
    • 带宽规格5Mbps

    • IPsec-VPN关闭(开启下方的SSL-VPN后才会有关闭选项)。

    • SSL-VPN开启

    • SSL连接数5

    • 计费周期:按需选择,最小为1个月

    • 服务关联角色:如果未创建,请单击创建服务关联角色

    关于创建VPN网关的详细参数描述,请参见创建和管理VPN网关实例

    image

  3. 购买支付完毕后,可在VPN网关页面看到已创建的VPN网关。

    刚创建的VPN网关状态为准备中,约1~5分钟状态会变为正常,此时即可开始使用。

    image

2. 创建SSL服务端

SSL服务端用于定义客户端可访问的云上网络范围,以及配置客户端IP地址池。

  1. 前往SSL服务端页面,在顶部菜单栏切换至华东1(杭州)地域后,单击创建SSL服务端

    image

  2. 创建SSL服务端面板,根据以下信息配置SSL服务端:

    • 名称:输入server-demo

    • VPN网关:选择刚刚创建的VPN网关。

    • 本端网段:输入VPC的网段10.0.0.0/16

      此网段是您希望客户端访问的云上网络范围,通常是您的VPC网段。

    • 客户端网段:指 VPN 网关用于向客户端虚拟网卡分配 IP 的地址池,不能与本端网段或客户端已经使用的网段(例如客户端所在的本地网段)重叠,否则会导致路由冲突。建议使用不易冲突的 RFC 1918 私有网段(例如 10.200.200.0/24)。

    其他选项保持默认。关于创建SSL服务端的详细参数描述,请参见创建和管理SSL服务端

    image

3. 创建SSL客户端并下载证书

SSL客户端负责客户端证书管理。每个需要连接的客户端都需要导入证书,用于身份验证和加密。

  1. 在左侧导航栏,选择网间互联 > VPN > SSL客户端。顶部菜单栏,确认地域为华东1(杭州);在SSL客户端页面,单击创建SSL客户端

    image

  2. 创建SSL客户端面板,名称输入client-demoSSL服务端选择server-demo,然后单击确定

    image

  3. SSL客户端页面,找到已创建的SSL客户端,在其操作列单击下载证书

    image

步骤二:配置客户端

请根据客户端的操作系统,查看对应的配置方法。

Windows客户端

  1. 请下载适配您 Windows 系统版本的 OpenVPN 客户端,并根据界面提示完成安装:

    如果下载链接无法打开,请联系客户经理或阿里云工程师。
  2. 将下载的 SSL 客户端证书解压,并将解压后的所有文件复制到 OpenVPN 的配置目录中。

    • 默认路径C:\Program Files\OpenVPN\config

    • 注意:如果您修改过安装路径,请复制到您实际安装目录下的 config 文件夹内。

    image

  3. 用记事本打开config.ovpn文件,末尾添加1行:disable-dco

    OpenVPN 2.6版本引入的OpenVPN 的数据通道卸载 (DCO) 功能在某些Windows系统(如Windows 10/11特定版本)上存在兼容性问题,此配置是为了关闭DCO,以解决部分设备无法连接的问题。

    image

  4. 右键单击桌面右下角托盘处的OpenVPN图标,然后单击Connect建立VPN连接。

    image

  5. 如果显示StateConnected,且分配了IP,则证明已成功建立连接。

    image

Linux客户端

  1. 执行以下命令安装OpenVPN客户端,并创建conf目录。

    CentOS
    yum install -y openvpn
    mkdir -p /etc/openvpn/conf
    Ubuntu
    apt-get update
    apt-get install -y openvpn
    mkdir -p /etc/openvpn/conf
  2. 将已下载的SSL客户端证书解压拷贝至/etc/openvpn/conf/目录。

    image

  3. 进入/etc/openvpn/conf/目录,执行以下命令建立VPN连接。

    openvpn --config /etc/openvpn/conf/config.ovpn --daemon
  4. (可选)使OpenVPN进程开机自动启动

    1. 编辑/etc/rc.local文件,并在文件中添加命令。

      #以编辑模式打开/etc/rc.local文件
      vi /etc/rc.local 
      #按下i键,进入文件编辑模式,然后在/etc/rc.local文件中补充以下命令
      cd /etc/openvpn/conf/
      openvpn --config /etc/openvpn/conf/config.ovpn --daemon
      #按下Esc键,退出文件编辑模式,然后输入以下命令保存退出文件
      :wq
    2. 为/etc/rc.local文件添加执行权限。

      chmod +x /etc/rc.local

Android客户端

  1. 下载并安装OpenVPN客户端(Android版本)如果下载链接无法打开,请联系客户经理或阿里云工程师。

    本文使用Android 9.0版本的客户端,并安装了3.0.5版本的OpenVPN客户端。

  2. 将已下载的SSL客户端证书传输至Android设备,并解压证书。

    说明
    • 如果您的Android设备无解压软件,您可以在电脑端解压证书然后将解压后的文件传输至Android客户端。

    • 请确保解压后的文件在同一个文件夹下,如下图所示。

    文件保存位置

  3. 打开OpenVPN客户端,导入config.ovpn文件,添加VPN连接。

    导入config文件

    序号

    说明

    选择OVPN Profile连接方式。

    在存储目录中找到config.ovpn文件。

    单击IMPORT,导入config.ovpn文件。

    系统自动读取config.ovpn文件中的信息,显示待连接的VPN网关的公网IP地址。单击ADD,添加VPN连接。

  4. 单击滑动按钮,开启VPN连接。

    开启OpenVPN

Mac客户端(图形界面,M系列芯片推荐)

  1. 打开Tunnelblick Releases页面,找到Tunnelblick 4.0.1 (build 5971)版本,在Assets面板中下载.dmg格式的文件。如果下载链接无法打开,请联系客户经理或阿里云工程师。

    image

  2. 安装Tunnelblick软件。

    image

    序号

    说明

    双击已下载的Tunnelblick软件安装包。

    双击Tunnelblick图标。

    选择我有配置文件

    单击确定

  3. 先将已下载的SSL客户端证书解压,再将已解压的config.ovpn文件拖动至配置面板下,建立VPN连接。

image

序号

说明

在启动台中单击Tunnelblick图标,打开Tunnelblick软件。

将已解压的文件config.ovpn拖动至配置面板下。

选择只是我

单击连接

Mac客户端(命令行)

  1. 打开Terminal命令行窗口,如果您的客户端尚未安装homebrew,执行以下命令安装Homebrew。

    说明

    Homebrew的安装脚本中包含sudo命令,中途会提示您输入管理员密码。当出现“Press RETURN/ENTER to continue...”时,按下Enter键继续。

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

    image

  2. 执行以下命令安装OpenVPN客户端。

    brew install openvpn

    image

  3. 将已下载的SSL客户端证书解压拷贝至配置目录。

    1. 备份/opt/homebrew/etc/openvpn目录。

      cp -r  /opt/homebrew/etc/openvpn /opt/homebrew/etc/openvpn_bak
    2. 执行以下命令删除OpenVPN当前的配置文件。

      rm /opt/homebrew/etc/openvpn/*
    3. 执行以下命令将已经下载的SSL客户端证书拷贝到配置目录。

      cp /path/to/certs.zip /opt/homebrew/etc/openvpn/
      说明

      /path/to/certs.zip是创建SSL客户端步骤中已下载的SSL客户端证书的路径,通常在当前用户的Downloads目录下,例如/Users/example/Downloads/certs.zip

  4. 执行以下命令解压证书。

    cd /opt/homebrew/etc/openvpn/
    unzip /opt/homebrew/etc/openvpn/certs.zip
  5. 选择运行方式。

    前台运行

    您可以执行如下命令启动客户端进程,建立VPN连接:

    sudo /opt/homebrew/opt/openvpn/sbin/openvpn --config /opt/homebrew/etc/openvpn/config.ovpn

    执行该命令后,该命令会保持在前台运行,当您需要断开连接时,请输入Ctrl+C终止如上命令。

    后台运行

    执行如下命令,使VPN客户端进程以服务的方式在后台运行,并开机自动启动:

    cp config.ovpn openvpn.conf
    sudo brew services start openvpn

    当需要停止运行时,请执行如下命令:

    sudo brew services stop  openvpn

步骤三:测试连通性

  1. 配置安全组规则

    为确保客户端能访问 VPC 内的资源,请在ECS实例关联的安全组中添加入方向规则,放行来自客户端网段10.200.200.0/24)的流量。

    • 用于连通性测试:允许 ICMP 协议,以便 ping 命令可以正常工作。

    • 用于业务访问:允许业务所需的特定端口,例如 TCP 22 (SSH), TCP 3389 (RDP), TCP 80/443 (Web服务) 等。

  2. Ping测试

    在客户端设备上,使用ping命令访问ECS,如果能够ping通,则表示客户端已和ECS内网连通:

    ping 10.0.0.1

    image

  3. 服务端口测试

    为进一步验证业务访问,可尝试访问 ECS 上运行的某个服务。例如,在 ECS 上安装并启动一个 Web 服务(如 Nginx):

    # 在ECS上执行(以Alibaba Cloud Linux 3 为例:)
    yum install -y nginx
    systemctl start nginx.service

    确认ECS关联的安全组已放行来自客户端网段的 TCP 80 端口的流量后,在客户端浏览器中访问 http://10.0.0.1

    如果能看到 Nginx 的欢迎页面,则证明业务访问正常。

    image

常见问题

如何使用用户名密码认证方式?

可开启双因子认证,即客户端只有通过证书认证和用户名密码双重认证后,才能建立SSL-VPN连接。

LinuxMac客户端,如何断开VPN连接?

  1. 打开命令行,执行如下命令搜索OpenVPN进程,并记录进程号。

    ps aux | grep openvpn
  2. 执行以下命令关闭OpenVPN进程。

    kill -9 <进程号>

无法成功连通?

问题现象

可能原因与排查步骤

无法连接,例如客户端日志提示 AUTH_FAILEDTLS Handshake failed

1. 网络问题:确认您的客户端设备可以正常访问互联网,并且本地网络防火墙或安全软件没有阻止 OpenVPN 客户端访问 VPN 网关的公网 IP 和端口(默认为TCP/1194)。

2. 证书问题:确认您导入的 config.ovpn 和相关证书文件完整且未被修改。尝试重新从控制台下载并导入证书。

连接成功,但 ping 不通 VPC 内的 ECS

1. 安全组规则:这是最常见的原因。请登录 ECS 控制台,检查对应实例的安全组规则,确保已添加入方向规则,源地址为您的客户端网段(例如 10.200.200.0/24),协议为 ICMP

2. ECS 内部防火墙:检查 ECS 操作系统内部的防火墙(如 firewalld, iptables)是否拦截了 ICMP 请求。

连接成功,ping 也通,但无法访问 ECS 上的服务(如网站、SSH)

1. 安全组规则:检查 ECS 安全组,确保已为您的客户端网段放行了相应的服务端口(如 TCP 80, TCP 22)。

2. 服务监听状态:登录 ECS,确认端口正常监听(例如Linux系统使用 netstat -nltp

3. ECS自身防火墙放通:登录 ECS,确认ECS操作系统自身的防火墙放通了端口

连接 VPN 后,无法访问本地网络(如打印机)或无法上网

路由冲突:可能是您在 SSL 服务端配置的客户端网段与您当前所在的本地网络网段冲突。请返回步骤一,修改 SSL 服务端的客户端网段为一个更冷门的网段(如 10.240.240.0/24),然后重新下载证书并配置客户端。

ECS 无法主动 ping 通客户端

正常现象。出于安全考虑,客户端的操作系统防火墙默认会阻止来自外部(包括 VPN 对端)的主动连接请求。这是预期行为,不影响客户端访问云上资源。如有云上资源访问客户端的请求,请在客户端防火墙放通ICMP协议。

更多问题请查看SSL-VPN连接常见问题