使用openvpn docker及frp docker工具构建虚拟专业网络(V-P-N)
借助Docker和OpenVPN技术,您可以在短时间内设置并运行VPN服务器,并保证您的服务器安全。
运行环境
Ubuntu 16.04 TLS
Docker version 19.03.8, build afacb8b7f0
OpenVPN Android Client 0.7.43
创建OpenVPN Docker容器
- 安装Docker:如果您的系统上没有安装Docker,请先按照适用于您的操作系统的指南安装Docker。在Ubuntu上,可以使用以下命令安装Docker:
bash
sudo apt update
sudo apt install docker.io
- 获取OpenVPN Docker镜像:使用以下命令从Docker Hub上获取OpenVPN镜像:
bash
sudo docker pull kylemanna/openvpn
- 创建OpenVPN配置目录:创建一个目录用于保存OpenVPN配置文件和证书:
bash
OVPN_DATA="ovpn-data-test"
docker volume create --name $OVPN_DATA
执行上述命令后,会在docker默认数据及配置保存目录/var/lib/docker/volumes
下创建openvpn的配置目录ovpn-data-test
- 初始化OpenVPN配置:使用以下命令初始化OpenVPN配置和证书。替换
YourPublicIP.com
为您希望访问OpenVPN服务器的公共IP地址或域名。
bash
sudo docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://YourPublicIP.com
如果你是本地创建VPN server,那么这里YourPublicIP.com
应该填写你本地IP地址。
生成安全证书并运行OpenVPN server
-
生成OpenVPN服务器证书:使用以下命令生成OpenVPN服务器的证书和密钥。
sudo docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki
输入"yes",然后按Enter键,如下所示,以启动OpenVPN PKI系统。
输入CA证书密码,或者输入Enter
为CA证书输入一个名称,或者输入Enter
输入在第2步设置的CA密码,以检查请求是否匹配签名。
再次输入密码生成ca私钥
2.使用以下命令启动OpenVPN服务器:
bash
sudo docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
--cap-add=NET_ADMIN
参数通过修改Docker默认不授予的网络接口来应用额外的Linux能力。
生成OpenVPN client证书
- 生成客户端配置文件:使用以下命令生成OpenVPN客户端配置文件。将
CLIENTAPP
替换为您希望的客户端名称。
bash
sudo docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTAPP nopass
bash
sudo docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient CLIENTAPP > CLIENTAPP.ovpn
将生成的CLIENTAPP.ovpn
客户端证书拷贝到你的Android Client。
现在,您已经成功安装了OpenVPN服务器,并生成了一个客户端配置文件。将CLIENTAPP.ovpn
文件发送给您的客户端,并使用OpenVPN客户端连接到您的OpenVPN服务器即可。
VPN server内网穿透
如果openvpn server是在局域网内部署,则还需要使用frp工具进行穿透,关于frp内网穿透内容参考如下:
具体到本文中的openvpn frp配置及命令如下:
服务端:frps
frps.init
文件不需要修改,需要在启动命令中增加7002
端口的映射
客户端: frpc
/opt/frpc.init
增加vpn配置
docker运行命令增加1194映射
bash
docker run --restart=always -d --network host -v /opt/frpc.ini:/etc/frp/frpc.ini -p 80:80/tcp -p 1194:1194/udp --name frpc snowdreamtech/frpc
CLIENTAPP.ovpn
中remote 0.0.0.0 7002 udp
需要修改为remote PublicIP.com 7002 udp
OpenVPN 使用Web UI管理
为了方便OpenVPN server的管理,官方提供了Web UI管理页面
- 下载
openvpn-as
docker
我们仍然使用docker来安装,命令如下:
bash
docker pull linuxserver/openvpn-as
- 创建docker容器
bash
docker create --name=openvpn-as --restart=always -v /home/docker/openvpn-as/config:/config -e INTERFACE=eth0 -e PGID=1001 -e PUID=1001 -e TZ=Africa/Nairobi --net=host --privileged linuxserver/openvpn-as
- 启动
openvpn-as
容器
bash
docker start openvpn-as
- 登录Web UI
使用https://YourIP:943/admin
登录admin管理页面
注意: 默认账号密码为
admin
和password
登录 openvpn-as后效果如下:
配置DNS以获得更快和更安全的连接
目前,您的OpenVPN Access Server已经正确工作。但为了提高VPN服务器的性能,您需要配置DNS。
要配置DNS,您需要访问OpenVPN服务器的Web界面,并使用Google或您喜欢的DNS地址更新DNS设置。Google提供了最快速的DNS服务器,您将在您的OpenVPN Access Server中使用它们。
- 在OpenVPN Access Server仪表板的CONFIGURATION选项卡下,点击左侧面板中的VPN设置。
滚动到DNS设置部分,启用"Have clients use Specific DNS servers"选项,如下所示。
- 接下来,更新主DNS服务器(8.8.8.8)和次DNS服务器(8.8.8.4)为Google DNS地址,然后点击"Save Settings"保存更改。
- 保存更改后,点击"Update Running Server"重新启动服务器,以使更改生效。
- 现在,在您的Linux机器上导航到OpenVPN Access Server(例如https://YourIP:943/admin)。将YourIP替换为您服务器的IP地址。如果配置正确,您将看到如下所示的相同页面。
使用默认凭据(用户名:admin,密码:password)登录。
-
点击任何平台图标下载客户端应用程序,然后点击"Yourself (user-locked profile)"下载客户端.ovpn文件。
-
最后,启动您下载的OpenVPN客户端,并像在"使用证书保护OpenVPN客户端"教程的最后一步中那样导入.ovpn文件。
结论
托管您的VPN服务器绝不应该是一个复杂的任务,更不用说保护服务器连接了。幸运的是,OpenVPN Docker就在眼前,拯救了一切。在本教程中,您已经学会了在Ubuntu上使用Docker安装、设置和配置OpenVPN。您还了解了如何通过OpenVPN CA和客户端证书保护Docker容器中的OpenVPN访问。
除了通过命令行界面访问OpenVPN服务器外,您现在还可以通过OpenVPN Access Server的Web界面进行可视化操作。通过为OpenVPN客户端应用程序生成客户端配置文件,您已经实现了快速部署VPN。
Github
参考
(Fundamentals of Running OpenVPN in Docker on Ubuntu) https://adamtheautomator.com/openvpn-in-docker/
(frp+openvpn+docker实现内网穿透)https://www.jianshu.com/p/8bffa1046008
https://medium.com/@gurayy/set-up-a-vpn-server-with-docker-in-5-minutes-a66184882c45