# Docker-OpenVPN 部署
https://abc.htmltoo.com/thread-46020.htm
# 配置iptables
iptables -A INPUT -s 10.2.2.0/24 -j ACCEPT
iptables -A INPUT -s 10.2.2.0/24 -m state --state NEW -m tcp -p tcp -j ACCEPT
iptables -A INPUT -m state --state NEW -m udp -p udp --dport 52114 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.2.2.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.2.2.0/24 -d 10.8.80.0/24 -o eth0 -j SNAT --to 10.8.80.1
iptables -t nat -A POSTROUTING -s 10.2.2.0/24 -d 10.8.81.0/24 -o eth0 -j SNAT --to-source 10.8.81.1
iptables -t nat -A POSTROUTING -s 10.2.2.0/24 -d 10.8.82.0/24 -o eth0 -j SNAT --to-source 10.8.82.1
service iptables save
service iptables restart
# 安装依赖
yum -y install openssl openssl-devel lzo expect
# 安装openvpn
yum -y install openvpn easy-rsa
# 修改easy-rsa配置文件
cd /usr/share/easy-rsa/3.0.3/
vi vars
export KEY_COUNTRY="CN"
export KEY_PROVINCE="FuJian"
export KEY_CITY="XiaMen"
export KEY_ORG="cndo.org"
export KEY_EMAIL="admin@cndo.org"
export KEY_OU="admin@cndo.org"
export KEY_NAME="EasyRSA"
source vars
# 创建各种加密证书和私钥
./clean-all && ./build-ca && ./build-key-server server && ./build-dh
openvpn --genkey --secret keys/ta.key
mkdir /etc/openvpn/keys
cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/
cp vpn_expect.expect /usr/share/easy-rsa/2.0/
/usr/bin/expect
cp create_vpnuser.sh /usr/share/easy-rsa/2.0/
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sysctl –p
iptables -I INPUT -p tcp --dport 52114 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.2.2.0/24 -j MASQUERADE
service openvpn start
chkconfig openvpn on
create_vpnuser.sh add prepare.wuqf ###脚本见附录
/etc/init.d/openvpn restart
# vi create_vpnuser.sh
#!/bin/bash
canshu_num=$#
xuan_zhe=$1
vpn_user=$2
help()
#帮助函数
{
echo '添加vpn用户执行命令sh create_vpnuser.sh add vpn用户名'
echo '删除vpn用户执行命令sh create_vpnuser.sh del vpn用户名'
}
add_user()
#新建vpn用户函数
{
if [ -f /usr/share/easy-rsa/2.0/keys/$vpn_user.crt ];then
echo "新建vpn用户存在,请检查!"
break
else
cd /usr/share/easy-rsa/2.0/
source ./vars
./vpn_expect.expect $vpn_user
cd /usr/share/easy-rsa/2.0/keys
touch $vpn_user.ovpn
echo "client" >>$vpn_user.ovpn
echo "dev tun" >>$vpn_user.ovpn
echo "proto tcp" >>$vpn_user.ovpn
echo "remote 222.76.214.135 52114" >>$vpn_user.ovpn
echo "resolv-retry infinite" >>$vpn_user.ovpn
echo "nobind" >>$vpn_user.ovpn
echo "persist-key" >>$vpn_user.ovpn
echo "persist-tun" >>$vpn_user.ovpn
echo "ca ca.crt" >>$vpn_user.ovpn
echo "cert "$vpn_user.crt >>$vpn_user.ovpn
echo "key "$vpn_user.key >>$vpn_user.ovpn
echo "ns-cert-type server" >>$vpn_user.ovpn
echo "comp-lzo" >>$vpn_user.ovpn
echo "verb 3" >>$vpn_user.ovpn
tar zcvf $vpn_user.tar.gz $vpn_user.* ca.crt
echo "================================================<成功提示>================================================"
echo "新建vpn用户:$vpn_user成功!"
echo "================================================<成功提示>================================================"
fi
}
del_user()
#删除vpn用户函数
{
cd /usr/share/easy-rsa/2.0/
source ./vars
/usr/share/easy-rsa/2.0/revoke-full $vpn_user
rm -rf /usr/share/easy-rsa/2.0/keys/$vpn_user.*
echo "================================================<成功提示>================================================"
echo "注销vpn用户:$vpn_user成功!"
echo "================================================<成功提示>================================================"
}
main()
#主函数
{
if [ $canshu_num -ne 2 ];then
echo "参数数量错误,请检查!"
help
break
else
if [ $xuan_zhe = "add" ];then
add_user
elif [ $xuan_zhe = "del" ];then
del_user
else
echo '参数类型选择错误,类型只包含add|del'
help
break
fi
fi
}
main
# vi vpn_expect.expect
#!/usr/bin/expect -f
if $argc<1 {
puts stderr "Usage: $argv0 need argv.\n"
exit 1
}
set vpnuser [lindex $argv 0]
set path /usr/share/easy-rsa/2.0
spawn $path/build-key $vpnuser
expect "*"
send "\r"
expect "*"
send "\r"
expect "*"
send "\r"
expect "*"
send "\r"
expect "*"
send "\r"
expect "*"
send "\r"
expect "*"
send "\r"
expect "*"
send "\r"
expect "*"
send "\r"
expect "*"
send "\r"
expect "*"
send "y\r"
expect "*"
send "y\r"
expect eof
exit
# 添加vpn帐号权限
sh /usr/share/easy-rsa/2.0/create_vpnuser.sh add prepare.wangdq
# Windown客户端安装及连接
把得到的私钥拷贝到openvpn客户端安装程序的config目录,默认C:\Program Files\OpenVPN\config,并解压,最后在桌面快捷方式找到图标并连接
# linux客户端安装及连接
yum install -y openvpn
cp prepare.wangdq.tar.gz /etc/openvpn/
tar xf /etc/openvpn/prepare.wangdq.tar.gz -C /etc/openvpn/
chkconfig openvpn on
service openvpn start
openvpn --config /etc/openvpn/prepare.wuqf.ovpn
注意config包含配置文件: ca.crt prepare.wangdq.crt ....