Centos7使用docker搭建openvpn

准备好一台海外的主机,如公网ip为47.213.133.182,并安装好docker(docker官网下载最新的安装包),下载openvpn镜像docker pull kylemanna/openvpn:2.4

1、使用openvpn生成配置文件
mkdir -p /data/openvpn
docker run -v /data/openvpn:/etc/openvpn --rm kylemanna/openvpn:2.4 ovpn_genconfig -u udp://47.213.133.182

执行完命令后可在目录/data/openvpn中看到相应的配置文件;

2、初始化密钥文件
docker run -v /data/openvpn:/etc/openvpn --rm -it kylemanna/openvpn:2.4 ovpn_initpki

执行过程中需要先设置ca密码(如123456),Common Name可不设置直接按回车继续,接着需要输入ca密码更新密钥库以及生成crl文件;

3、生成客户端证书
docker run -v /data/openvpn:/etc/openvpn --rm -it kylemanna/openvpn:2.4 easyrsa build-client-full openvpn-client nopass

其中openvpn-client为自定义名称,生成的过程需要输入ca密码;

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

注意openvpn-client名称需与第三步生成时命名一致,此时生成的配置文件openvpn-client.ovpn即可用于客户端连接;

5、启动openvpn
docker run  -v /data/openvpn:/etc/openvpn -d -p 1194:1194/udp --restart=always --name openvpn --cap-add=NET_ADMIN --sysctl net.ipv6.conf.all.disable_ipv6=0 --sysctl net.ipv6.conf.default.forwarding=1 --sysctl net.ipv6.conf.all.forwarding=1  kylemanna/openvpn:2.4 

需要注意防火墙规则,其中1194为udp端口,可在其他机器上通过nc命令测试是否可连接

yum install nc -y
nc -vuz 47.213.133.182 1194

[root@ta6wkp3ir3ybrtef ~]# nc -vuz 47.213.133.182 1194
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 47.213.133.182:1194.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.01 seconds.
[root@ta6wkp3ir3ybrtef ~]# 
6、修改iptables规则

修改配置文件/etc/sysconfig/iptables,在*filter中的COMMIT命令前增加以下配置

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

重启iptables,systemctl restart iptables,如未生效需重启docker

7、客户端安装openvpn客户端openvpn-install-2.4.4-I601.exe

安装好客户端后,导入openvpn客户端配置文件即可,ccip.cc检查当前ip;

注意:通过海外的机器搭建的vpn用了一段时间后,端口可能会被封掉,报tls验证错误,需要更换一下端口;

  • 告警处理
Wed Aug 11 19:25:42 2021 WARNING: 'link-mtu' is used inconsistently, local='link-mtu 1541', remote='link-mtu 1542'
Wed Aug 11 19:25:42 2021 WARNING: 'comp-lzo' is present in remote config but missing in local config, remote='comp-lzo'

上面两个告警需要在客户端配置中增加参数comp-lzo

WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this

在客户端配置中增加参数auth-nocache


赞赏(Donation)
微信(Wechat Pay)

donation-wechatpay