
前提条件
1、云服务器,不限制云服务商但是必须要公网IP地址,且有最高权、能放行端口
2、家里有一台能安装OpenVPN Client客户端的路由器,我是用的是红米AC2100,刷的OpenWRT系统
3、远程使用的OpenVPN Client的客户端,比如手机、电脑
教程
1、使用Docker安装OpenVPN服务端
获取最新版本的 Docker 安装包
wget -qO- https://get.docker.com/ | sh
shell38 Bytes© 奎利
启动docker服务,验证docker信息,命令如下:
sudo service docker start
docker version
shell40 Bytes© 奎利
拉取OpenVPN镜像到本地,并初始化docker容器
# 拉取OpenVPN的镜像
docker pull kylemanna/openvpn
# 新建OpenVPN的工作目录
mkdir /etc/openvpn
# 初始化容器以保存配置文件和证书。容器将提示用户输入一个密码以保护新生成的证书授权机构使用的私钥
# xx.xx.xx.xx为您服务器的公网IP地址
docker run -v /etc/openvpn:/etc/openvpn –rm kylemanna/openvpn ovpn_genconfig -u udp://xx.xx.xx.xx:1194
docker run -v /etc/openvpn:/etc/openvpn –rm -it kylemanna/openvpn ovpn_initpki
shell342 Bytes© 奎利
启动过程中需要输入证书密码和域名,请注意输入密码时不会显示任何信息;


启动OpenVPN Server进程,启动后可以输入 docker ps查看运行容器信息
docker run \
–name openvpn \
–restart=always \
–privileged=true \
-v /etc/openvpn/:/etc/openvpn \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
-p 1194:1194/udp \
–cap-add=NET_ADMIN \
-d kylemanna/openvpn
shell228 Bytes© 奎利

2、配置OpenVPN服务端
修改/etc/openvpn.config配置文件如下:
server 192.168.255.0 255.255.255.0
verb 3
key /etc/openvpn/pki/private/192.168.175.128.key
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/192.168.175.128.crt
dh /etc/openvpn/pki/dh.pem
tls-auth /etc/openvpn/pki/ta.key
key-direction 0
keepalive 10 60
persist-key
persist-tun
proto udp
# Rely on Docker to do port mapping, internally always 1194
port 1194
dev tun0
status /tmp/openvpn-status.log
# VPN连接后分配的IP地址将记录在ipp.txt中,下次连接VPN继续使用此IP地址
ifconfig-pool-persist ipp.txt
# 客户端互联
client-to-client
# 客户端所在的局域网联通
client-config-dir /etc/openvpn/ccd
user nobody
group nogroup
comp-lzo no
### Route Configurations Below
route 192.168.254.0 255.255.255.0
### Push Configurations Below
push “block-outside-dns”
push “dhcp-option DNS 8.8.8.8”
push “dhcp-option DNS 8.8.4.4”
push “comp-lzo no”
generic794 Bytes© 奎利
配置文件修改完成后,重新启动docker容器
# 先暂停openvpn容器
docker stop openvpn
# 后启动openvpn容器
docker start openvpn
shell71 Bytes© 奎利
在 /etc/openvpn/ccd目录下, 为局域网的VPN网关创建配置文件,配置文件的文件名要和客户名相同。
我为家中路由器生成的证书名称为OpenWRT,内网网段为192.168.1.0/24,所以配置文件为:
vi ccd/OpenWRT
# 键入i,在文件里添加路由信息
iroute 192.168.1.0 255.255.255.0
# 键入Esc,输入:wq 保存退出
generic85 Bytes© 奎利
3、配置OpenVPN客户端
生成带密码的客户端证书,作为电脑和手机的VPN证书,每次登录VPN时,都需要输入密码;
docker run -v /etc/openvpn/:/etc/openvpn –rm -it kylemanna/openvpn easyrsa build-client-full client001
输入密码:******
shell115 Bytes© 奎利
生成不带密码的客户端证书,作为OpenWRT的VPN证书,VPN连接时不用输入密码;
docker run -v /etc/openvpn/:/etc/openvpn –rm -it kylemanna/openvpn easyrsa build-client-full OpenWRT nopass
shell108 Bytes© 奎利
导出证书,并下载到本地
docker run -v /etc/openvpn/:/etc/openvpn –rm kylemanna/openvpn ovpn_getclient client001 > /etc/openvpn/client001.ovpn
docker run -v /etc/openvpn/:/etc/openvpn –rm kylemanna/openvpn ovpn_getclient client001 > /etc/openvpn/OpenWRT.ovpn
shell236 Bytes© 奎利
修改client001.ovpn远程客户端证书,禁用默认路由,新增局域网192.168.1.0的路由和指向服务端的路由;
# redirect-gateway def1
route-nopull
route 192.168.1.0 255.255.255.0 vpn_gateway
route 192.168.255.0 255.255.255.0 vpn_gateway
generic128 Bytes© 奎利
修改OpenWRT.ovpn客户端证书,禁用默认路由,新增一条指向服务端的路由;
# redirect-gateway def1
route-nopull
route 192.168.255.0 255.255.255.0 vpn_gateway
generic83 Bytes© 奎利
将OpenWRT.ovpn导入到家中路由器的OpenVPN客户端中,并启用;
将client001.ovpn导入到手机或者电脑的OpenVPN客户端中,点击连接并输入密码,等待连接完成后即可访问家中的服务。
参考资料
OpenVPN Docker搭建 – 简书 (jianshu.com)
发表回复