1. 获取镜像
docker pull kylemanna/openvpn
2. quick start
OVPN_DATA="ovpn-data"
# 初始化ovpn_data容器,包含配置文件和证书
docker run --name $OVPN_DATA -v /etc/openvpn busybox
#
docker run --volumes-from $OVPN_DATA --rm kylemanna/openvpn ovpn_genconfig -u udp://VPN.SERVERNAME.COM #更改VPN.SERVERNAME.COM为你的ip或域名
# 生成EasyRSA PKI 证书授权中心
docker run --volumes-from $OVPN_DATA --rm -it kylemanna/openvpn ovpn_initpki
# input ca pssword for securiry
...
#sart openvpn server process
docker run --volumes-from $OVPN_DATA -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
- sh 文件配置
#!/bin/bash
set -ex
OVPN_DATA=ovpn-data
CLIENT=xx-client
IMG=kylemanna/openvpn
#
# Create a docker container with the config data
# 初始化ovpn_data容器,包含配置文件和证书
docker run --name $OVPN_DATA -v /etc/openvpn busybox
# fetch host ip
ip addr ls
SERV_IP=$(ip -4 -o addr show scope global | awk '{print $4}' | sed -e 's:/.*::' | head -n1)
docker run --volumes-from $OVPN_DATA --rm $IMG ovpn_genconfig -u udp://$SERV_IP
# nopass is insecure
docker run --volumes-from $OVPN_DATA --rm -it -e "EASYRSA_BATCH=1" -e "EASYRSA_REQ_CN=Travis-CI Test CA" $IMG ovpn_initpki nopass
docker run --volumes-from $OVPN_DATA --rm -it $IMG easyrsa build-client-full $CLIENT nopass
docker run --volumes-from $OVPN_DATA --rm $IMG ovpn_getclient $CLIENT > $CLIENT.ovpn
#
# Fire up the server
#
iptables -N DOCKER
ptables -I FORWARD -j DOCKER
# run in shell bg to get logs
docker run --name "ovpn-server" --volumes-from $OVPN_DATA --rm -p 1194:1194/udp --privileged $IMG 1>/root/ovpn_info.log 2>/root/ovpn_error.log &
- 生成客户端证书和配置文件
替换CLIENTNAME, 客户端的名字是用来识别正在运行的OpenVPN客户端的机器, e.g. CLIENTNAME:phone
# 创建客户端证书
docker run --volumes-from $OVPN_DATA --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass
# 传送到客户端证书和配置文件
docker run --volumes-from $OVPN_DATA --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn
3. 配置 openvpn 客户端
在Ubuntu12.04/14.04和Debian wheezy/jessie客户端(或者类似的): 安装OpenVPN:
sudo apt-get install openvpn
- 命令行启动
sudo openvpn CLIENTNAME.ovpn
- OpenVPN Network Manager plugin
sudo apt-get install network-manager-openvpn-gnome
then import .ovpn file
- note
The OpenVPN protocol requires the client and server to have synchronized time. If the time on your local PC is incorrect you may see the error ##TLS Error: Unroutable control packet received## from in your logs
solve TLS Error: Unroutable control packet received
4. 验证操作
有几种通过VPN路由来验证网络连接的方法。
- 网页浏览器
访问网站来确定外部IP地址。外部IP地址应该是OpenVPN服务器。 试试google“what is my ip”或icanhazip.com。
- 命令行
从命令行,wget或curl命令派上用场。以curl为例:
curl icanhazip.com
以wget为例:
wget -qO - icanhazip.com
预期的反应应该是OpenVPN服务器的IP地址。
另一个选择是使用dig或使用host到一个特殊配置的DNS服务器做专用的DNS查询。基于host的例子:
host -t A myip.opendns.com resolver1.opendns.com
基于dig的例子:
dig +short myip.opendns.com @resolver1.opendns.com
预期的反应应该是OpenVPN服务器的IP地址。
5. 参考
在Ubuntu14.04的Docker容器中运行OpenVPN
kylemanna/openvpn OpenVPN for Docker