![Docker部署OpenVPN就是这么简单[部署备忘录] Docker部署OpenVPN就是这么简单[部署备忘录]](http://www.itsec365.cn/zb_users/avatar/0.png)
Docker部署OpenVPN就是这么简单[部署备忘录]
时间:2021-03-31 作者:zhankehua 评论:0 点击:10010 次
前期在工作中使用CentOS7 部署OpenVPN,要花费较长的时间,需要编写脚本进行自动生成用户证书,删除用户证书。最大的一个麻烦事就是,为了兼容windows,必须实现net30模式(windows的低版本tap-win32驱动只支持这种模式)。ifconfig-push中的每一对IP地址表示虚拟客户端和服务器的IP端点。它们必须从连续的/30子网网段中获取(这里是/30表示xxx.xxx.xxx.xxx/30,即子网掩码位数为30),以便于与Windows客户端和TAP-Windows驱动兼容。明确地说,每个端点的IP地址对的最后8位字节必须取自下面的集合。
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] [ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78] [ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158] [161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198] [201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238] [241,242] [245,246] [249,250] [253,254]
也就是说,一个OpenVPN服务器最多支持64个用户。那如果有几百个用户怎么办?难道要部署在N台服务器上?这时就想到了使用docker。于是到网上找了一些关于docker部署openvpn的资料,发现都是官网帮助上的文档直接翻译过来。无法满足我的实际需求。经过对官网上的帮助文档进行研究及shell源码的研究和测试,现地已能够使用docker快速部署适合本公司使用的VPN,并且可以很容易扩展。好了,费话少说,现在将部署过程记录下了。
以下是创建openvpn的脚本(create_ovpn.sh):
#!/bin/bash OVPN_DATA="ovpn-data-225" docker volume create --name $OVPN_DATA docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -e "cipher AES-256-CBC" -e "ccd-exclusive" -e "client-config-dir /etc/openvpn/ccd" -E "cipher AES-256-CBC" -E "comp-lzo" -E "persist-tun" -E "persist-key" -E "auth-nocache" -d -D -N -c -s 10.225.1.0/24 -u udp://201.102.102.30:1192 docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki #Start OpenVPN server process docker run --name cz-ovpn-225 -v $OVPN_DATA:/etc/openvpn -d -p 1192:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
OVPN_DATA:这个是卷的名称,可以随便起。上面的225,我个人用来表示10.225,这个段。
以下这一行配置是我经过多次测试,用来分配固定IP后,用户上网进行分流(注:官网的配置指南中的配置,使用动态分配IP,并且所有的流量均通过VPN,实际上不需要这样。)
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -e "cipher AES-256-CBC" -e "ccd-exclusive" -e "client-config-dir /etc/openvpn/ccd" -E "cipher AES-256-CBC" -E "comp-lzo" -E "persist-tun" -E "persist-key" -E "auth-nocache" -d -D -N -c -s 10.225.1.0/24 -u udp://201.102.102.30:1192
基本配置与官网一致。现在运行脚本,创建openvpn服务器:
回车后,创建openvpn容器。
这里要注意,输入密码一定要正确,就是上一步填写的密码,否则会出错。
可以创建很多个OpenVPN服务器。
接下来就是创建用户和删除用户了。
所有脚本如下:
#create_client.sh #!/bin/bash export OVPN_DATA="ovpn-data-225-001" if [ -n "$1" ] ; then docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full $1 nopass docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient $1 > /root/docker/225-001/$1.ovpn if [ "`ls -A /var/lib/docker/volumes/$OVPN_DATA/_data/ccd/`" ]; then cat /var/lib/docker/volumes/$OVPN_DATA/_data/ccd/*|grep -oE '10.225.1.*'|sort -t $'.' -k4 -n >/root/docker/225-001/currentip.ini else echo "" >/root/docker/225-001/currentip.ini fi grep -vwf /root/docker/225-001/currentip.ini /root/docker/225-001/allip.ini >/root/docker/225-001/diffip.ini theip=`cat /root/docker/225-001/diffip.ini | head -n 1` #echo $theip echo 'ifconfig-push '$theip' push "route 192.168.101.0 255.255.255.0 vpn_gateway" push "route 192.168.102.0 255.255.255.0 vpn_gateway"' | docker run -v $OVPN_DATA:/etc/openvpn -i --rm kylemanna/openvpn tee /etc/openvpn/ccd/$1 fi
#del_client.sh #!/bin/bash export OVPN_DATA="ovpn-data-225-001" if [ -n "$1" ] ; then docker run --rm -it -v $OVPN_DATA:/etc/openvpn kylemanna/openvpn ovpn_revokeclient $1 remove docker run --rm -it -v $OVPN_DATA:/etc/openvpn kylemanna/openvpn rm -f /etc/openvpn/ccd/$1 fi
使用方法:
./create_client.sh mytest ./del_client.sh mytest
注:以上脚本拷贝下来,保存成.sh文件,均可运行。
docker所在服务器的环境为CentOS7,如果开启了firewall防火墙,需要加入以下这句话:
firewall-cmd --zone=public --add-masquerade --permanent
否则无法转发。
本文标签:
转载请注明出处: http://www.itsec365.cn/?id=62
已有 10010 位网友参与,快来吐槽:
发表评论