OpenVPN 连接 VPC 的核心原理

OpenVPN 通过加密隧道实现客户端与 VPC(虚拟私有云)的安全通信,其核心流程可分为以下阶段:

  1. 证书认证(PKI 体系)‌
    证书作用‌:
    CA 证书‌:根证书,验证服务端和客户端证书的合法性(信任链基础)。
    服务端证书‌:标识 VPN 服务器身份,由 CA 签名。
    客户端证书‌:标识客户端身份,由 CA 签名。
    验证流程‌:
    客户端和服务端交换证书,通过 CA 证书验证对方身份,确保通信双方可信。
  2. 隧道建立(TLS 握手)‌
    密钥协商‌:
    使用 TLS/SSL 协议协商会话密钥(如 AES-256-GCM),后续数据通过此密钥加密。
    模式选择‌:
    UDP 模式‌:默认高效模式,适合低延迟场景(如 proto udp)。
    TCP 模式‌:可靠性优先,穿透性更强(如 proto tcp)。
  3. 数据传输(加密隧道)‌
    流量封装‌:
    客户端流量(如 HTTP、SSH)被封装到 OpenVPN 加密隧道。
    数据包通过 TLS 加密后传输,防止中间人窃听或篡改。
    协议封装‌:
    使用 ‌TUN 设备‌(IP 层隧道)或 ‌TAP 设备‌(以太网层隧道)处理流量。
  4. 路由与 NAT(访问 VPC 资源)‌
    服务端路由配置‌:
    OpenVPN 服务端将客户端流量路由到 VPC 子网(如 10.0.0.0/16)。
    VPC 安全组/路由表‌:
    在云平台(如 AWS、阿里云)配置 VPC 路由表,允许来自 OpenVPN 服务端 IP 的流量。
    安全组需放行 OpenVPN 端口(如 UDP 1194)。
  5. 连接维护(心跳与重连)‌
    Keepalive 机制‌:
    服务端和客户端定期发送心跳包(如 keepalive 10 60),检测连接状态。
    会话恢复‌:
    支持断线后自动重连,保持隧道持久性。
    密钥轮换‌:
    动态更新会话密钥(reneg-sec 3600),提升安全性。

OpenVPN 连接 VPC 的本质是通过 ‌加密隧道‌ 和 ‌PKI 证书体系‌,将客户端流量安全地引入私有网络。其核心依赖 TLS 协议保障通信安全,并通过路由规则实现 VPC 资源访问。正确配置证书、加密算法和路由策略是成功的关键。

前置条件

  1. 创建VPC网络
  2. 创建安全组

    3.更换VPC网络

过程

‌步骤 1:准备阿里云ECS实例‌

‌步骤 2:安装OpenVPN和生成证书‌

# CentOS
sudo yum install -y epel-release
sudo yum install -y openvpn easy-rsa

# Ubuntu
sudo apt update
sudo apt install -y openvpn easy-rsa
mkdir -p ~/easy-rsa/keys
cp -r /usr/share/easy-rsa/3/* ~/easy-rsa/
cd ~/easy-rsa
./easyrsa init-pki
./easyrsa build-ca           # 生成CA证书(设置密码和名称)
./easyrsa build-server-full server nopass  # 生成服务器证书(名称如server)
./easyrsa gen-dh                          # 生成Diffie-Hellman参数
./easyrsa build-client-full client1 nopass  # 创建客户端client1的证书

步骤 3:配置OpenVPN服务器

sudo mkdir -p /etc/openvpn/server
sudo cp ~/easy-rsa/pki/ca.crt ~/easy-rsa/pki/issued/server.crt ~/easy-rsa/pki/private/server.key ~/easy-rsa/pki/dh.pem /etc/openvpn/server/
sudo nano /etc/openvpn/server/server.conf

添加以下内容(根据实际情况调整):

port 1194
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 172.17.0.0 255.255.255.0  # VPN客户端使用的子网
push "route 192.168.0.0 255.255.0.0"  # 替换为VPC的CIDR(如192.168.0.0/16)
keepalive 10 120
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3
# 启用IP转发
sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sudo sysctl -p

# 配置iptables NAT规则(假设ECS内网网卡为eth0)
sudo iptables -t nat -A POSTROUTING -s 172.17.0.0/24 -o eth0 -j MASQUERADE
sudo iptables-save > /etc/sysconfig/iptables  # CentOS保存规则
sudo netfilter-persistent save                # Ubuntu(需安装iptables-persistent)

‌步骤 4:启动OpenVPN服务

sudo systemctl start openvpn-server@server
sudo systemctl enable openvpn-server@server

‌步骤 5:配置客户端‌

‌获取客户端配置文件‌:

client
dev tun
proto udp
remote 10.8.0.0 1194  #更换实际ecs的公网IP地址
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
remote-cert-tls server
verb 3