初始化

  • 拉取镜像
  • 注意:openvpn2.4使用了iptables命令,新版的linux没有这个命令了(我使用的是debian11.9安装)
# 版本有: 2.3   2.4  dev edge latest
docker pull kylemanna/openvpn:2.4

一. 生成配置文件

1.生成配置
mkdir -p /data/openv2.4/openvpn
docker run -v /data/openv2.4/openvpn:/etc/openvpn --rm kylemanna/openvpn:2.4  ovpn_genconfig -u udp://x.41.54.86

2. 初始化密钥文件
docker run -v /data/openv2.4/openvpn:/etc/openvpn --rm -it kylemanna/openvpn:2.4   ovpn_initpki
执行过程中需要先设置ca密码(如123456),Common Name可不设置直接按回车继续默认是server, 接着需要再输入ca密码更新密钥库以及生成crl文件

3. 生成客户端证书
docker run -v /data/openv2.4/openvpn:/etc/openvpn --rm -it kylemanna/openvpn:2.4   easyrsa build-client-full openvpn-client
docker run -v /data/openv2.4/openvpn:/etc/openvpn --rm -it kylemanna/openvpn:2.4   easyrsa build-client-full openvpn-client  nopass #不输入客户端密码
docker run -v /data/openv2.4/openvpn:/etc/openvpn --rm -it kylemanna/openvpn:2.4   easyrsa build-client-full openvpn-user nopass  创建第2用户
#加参数 nopass 可以不输入客户端密码
先输入客户端密码:    再输入第2步的ca密码

4. 导出客户端的配置文件openvpn-client.ovpn
docker run -v /data/openv2.4/openvpn:/etc/openvpn --rm kylemanna/openvpn:2.4  ovpn_getclient openvpn-client > /data/openv2.4/openvpn-client.ovpn
docker run -v /data/openv2.4/openvpn:/etc/openvpn --rm kylemanna/openvpn:2.4  ovpn_getclient openvpn-user > /data/openv2.4/openvpn-user.ovpn

二、配置docker-compose.yml

services:
  openvpn:
    image: kylemanna/openvpn:2.4
    restart: always
    #network_mode: host
    container_name: openvpn
    cap_add:
      - NET_ADMIN
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0
      - net.ipv6.conf.all.forwarding=1
      - net.ipv6.conf.default.forwarding=1
    volumes:
      - "/data/openv2.4/openvpn:/etc/openvpn"
    ports:
      - "1194:1194/udp"

三、启动容器

docker-compose up -d
#vpn已经可以连接了
  • 注意:此时所有的流量都是走服务器的vpn流量(如果服务器不能上网,则本地是不能打开网站的)

四、修改本地网络,不使用VPN流量

  • 服务端修改
 vi openvpn/openvpn.conf
#push "block-outside-dns"
#push "dhcp-option DNS 8.8.8.8"
#push "dhcp-option DNS 8.8.4.4"
  • 客户端修改
    vi openvpn-client.ovpn

remote x.41.54.86 1194 udp
#在这一行后添加
comp-lzo no   
route-nopull
#添加服务器上的内网地址,(注意子网掩码,我添加240的掩码一直失败,原因未知)
route 172.16.12.0 255.255.255.0
route 172.16.15.0 255.255.255.0

...
#注释最后一行
#redirect-gateway def1

参考:https://zhuanlan.zhihu.com/p/683127212