VPN 直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN 无疑是 Linux 下开源 VPN 的先锋,提供了良好的性能和友好的用户 GUI。 OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。

教程环境介绍

  • 购买的阿里云服务器 (AliOS 、CentOS)
  • 使用阿里云NAT 服务以及EIP服务

    安装Docker

    ```bash

    更新系统

    yum update

安装基础组件

sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2

安装阿里源

sudo yum-config-manager \ —add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker

sudo yum install docker-ce

启动Docker

systemctl start docker

  1. <a name="xhLFl"></a>
  2. # 安装Docker-Compose
  3. > 参考文档: [https://docs.docker.com/compose/install](https://docs.docker.com/compose/install/)
  4. ```bash
  5. # 下载安装包
  6. sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  7. # 创建软链接
  8. sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  9. # 查看版本
  10. docker-compose --version

VPN 服务端搭建

OpenVPN 在官网有一个推荐的Docker 仓库我们直接pull 到Docker kylemanna/openvpn:2.4 udp

  • 初始化VPN

    1. docker run -v [宿主机存OpenVPN配置目录]:/etc/openvpn --rm kylemanna/openvpn:2.4 ovpn_genconfig -u udp://[公网IP]
  • 创建服务端密码

    1. docker run -v [宿主机存OpenVPN配置目录]:/etc/openvpn --rm -it kylemanna/openvpn:2.4 ovpn_initpki
    • 输入私钥密码(输入时是看不见的):
      Enter PEM pass phrase:
    • 再输入一遍
      Verifying - Enter PEM pass phrase:
    • 输入一个CA名称
      Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
    • 输入刚才设置的私钥密码
      Enter pass phrase for /etc/openvpn/pki/private/ca.key:12345678
  • docker-compose.yml ```bash version: ‘3’

services: openvpn: image: kylemanna/openvpn:2.4 container_name: openvpn ports:

  1. - "1194:1194/udp"
  2. restart: always
  3. volumes:
  4. - /opt/openvpn:/etc/openvpn
  5. cap_add:
  6. - NET_ADMIN
  1. - 启动OpenVPN 服务
  2. ```bash
  3. docker-compose up -d

用户管理

  • 创建用户

    这个时候客户端就可以拿着 opvn 文件链接到服务器了

  1. # 创建用户 执行后需要你输入创建秘钥的密码
  2. docker run -v /opt/openvpn:/etc/openvpn --rm -it kylemanna/openvpn:2.4 easyrsa build-client-full [用户名] nopass
  3. # 导出配置
  4. docker run -v /opt/openvpn:/etc/openvpn --rm kylemanna/openvpn:2.4 ovpn_getclient [用户名] > /opt/openvpn_client/[用户名].ovpn
  • 删除用户 ```bash

    删除用户 执行后需要你输入创建秘钥的密码

    docker run -v /opt/openvpn:/etc/openvpn —rm -it kylemanna/openvpn:2.4 easyrsa revoke [用户名]

刷新

docker run -v /opt/openvpn:/etc/openvpn —rm -it kylemanna/openvpn:2.4 easyrsa gen-crl update-db ```

到这里服务器端已经安装完成了,客户端的证书已经生成了;客户端配置参考另外一篇 《OpenVPN 客户端》

配置OpenVPN 仅代理指定IP流量(可选)

在一般环境不希望服务器代理全部流量,提高客户端流畅度降低服务器压力则需要如下配置

服务端

找到输出服务器配置的目录 openvpn.conf 的配置文件;将 block-outside-dns注释 如果已经注释或者不存在则不用管

服务端推送配置

注释路由转发 Route Configurations Below 注释 push "block-outside-dns" 注释 push "dhcp-option DNS 8.8.8.8"

添加需要推送的IP push "route IP地址 子掩码" 例如: push "route 192.168.1.166 255.255.255.255"

客户端

客户端指定配置

  • opvn 文件的最后面注释 redirect-gateway def1
  • 在文件末尾添加 route-nopull 标示禁止代理全部流量
  • 在文件末尾继续添加 route [IP/域名] 255.255.0.0 vpn_gateway 指定IP 进行代理