阿里云部署OpenVPN

  • A+
所属分类:Linux技术

为便于开发通过访问阿里云公司内网,查看数据库,部署openvpn,centos系统7.5,阿里云网络弹性公网,内网VPC:172.16.0.0/16

[root@zabbix ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

阿里云openvpn内网IP

[root@zabbix openvpn]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.189.224  netmask 255.255.240.0  broadcast 172.16.191.255
        ether 00:16:3e:14:5e:6d  txqueuelen 1000  (Ethernet)
        RX packets 869539728  bytes 175519005569 (163.4 GiB)
        RX errors 0  dropped 50  overruns 0  frame 0
        TX packets 836805738  bytes 132231732565 (123.1 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

安装依赖的软件包

yum install -y lzo lzo-devel openssl openssl-devel pam pam-devel
yum install -y pkcs11-helper pkcs11-helper-devel
rpm -qa lzolzo-devel openssl openssl-devel pam pam-devel pkcs11-helper pkcs11-helper-devel

安装 OpenVPN 服务

cd /root/tools
wget http://oss.aliyuncs.com/aliyunecs/openvpn-2.2.2.tar.gz
tar -zxvf openvpn-2.2.2.tar.gz
cd openvpn-2.2.2
./configure
make && make install
echo $?

初始化PKI

进入cd easy-rsa/2.0/目录,修改vars证书环境文件,修改以下 5 行 export 定义的参数值

[root@zabbix openvpn-2.2.2]# cd easy-rsa/2.0/
[root@zabbix 2.0]# cp vars vars_$(date +%F)
[root@zabbix 2.0]# vim vars
export KEY_COUNTRY="CN"
export KEY_PROVINCE="BJ"
export KEY_CITY="BEIJING"
export KEY_ORG="aliyun"
export KEY_EMAIL="my@test.com"

说明:您可以对上述参数的值进行自定义设置,不会导致 OpenVPN 配置出现异常

重载&清除所有证书

source ./vars
./clean-all

生成证书CA 证书

在初始化时,您已经在 vars 证书环境文件中配置了默认参数值,在本步骤中连续回车确认,完成配置即可

./build-ca

生成server证书

其中aliyun是自定义的名字,连续回车确认,最后会有两次交互,输入y确认。完成后,keys目录下会生成aliyun.key、aliyun.csr和aliyun.crt三个文件

./build-key-server aliyun

Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y

生成客户端秘钥与证书

执行以下命令创建秘钥与证书,其中mike是用户名,连续回车确认,最后会有两次交互,输入y确认。

完成后,keys目录下会生成 1024 位 RSA 服务器密钥mike.key、mike.crt和mike.csr三个文件

./build-key mike

执行以下命令,生成用于客户端验证的 Diffie Hellman参数,完成后,keys目录下会生成 dh 参数文件dh1024.pem

./build-dh

复制证书、密钥和参数文件

mkdir /etc/openvpn
cp -a /root/tools/openvpn-2.2.2/easy-rsa/2.0/keys/  /etc/openvpn/
cd /root/tools/openvpn-2.2.2/sample-config-files/
cp server.conf client.conf /etc/openvpn/
cd /etc/openvpn

配置server.conf

cp server.conf server.conf_$(date +%F)
[root@zabbix openvpn]# vim server.conf
local 0.0.0.0
port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/aliyun.crt
key /etc/openvpn/keys/aliyun.key
dh /etc/openvpn/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
push "route 172.16.0.0 255.255.0.0"
push "dhcp-option DNS 192.168.0.220"
push "dhcp-option DNS 192.168.0.222"
client-to-client
log /var/log/openvpn.log

设置iptables

设置 iptables前,请确保 iptables 已经开启

yum install iptables-services
systemctl status iptables
systemctl list-unit-files|grep iptables

开启内部IPv4路由转发

vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

添加iptables 规则

[root@zabbix openvpn]# vim /etc/firewall.sh
#!/bin/bash
#this is a firewall scripts
#Clear all the rules
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z

#The definition of default rules
#iptables -P INPUT DROP
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

#openvpn
iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 172.16.189.224
chmod +x /etc/firewall.sh
sh /etc/firewall.sh
iptables -L -n -t nat

添加开机自启动

[root@zabbix openvpn]# vim /etc/rc.local 
#openvpn iptables
/etc/firewall.sh

启动openvpn

/usr/local/sbin/openvpn --config /etc/openvpn/server.conf &
ps -ef|grep openvpn

安装Windows客户端

服务器/etc/openvpn/目录下的ca.crt、mike.key、mike.crt、mike.csr下载到D:\Program Files (x86)\OpenVPN\config

D:\Program Files (x86)\OpenVPN\config目录下,创建mike.ovpn文件,配置如下(修改IP&cert&key名称)

client
dev tun
proto udp
remote 11.11.11.11 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert mike.crt
key mike.key
comp-lzo
verb 3

注意:

1、如果存放多分client证书,在config目录分别创建文件夹

2、启动客户端,注意必须要用管理员运行

增加用户

cd /root/tools/openvpn-2.2.2/easy-rsa/2.0/
source ./vars

一路回车,有两个Y确认

./build-key zhangsan
[root@zabbix 2.0]# cp /root/tools/openvpn-2.2.2/easy-rsa/2.0/keys/zhangsan.* /etc/openvpn/keys/
pkill openvpn
/usr/local/sbin/openvpn --config /etc/openvpn/server.conf &
ps -ef | grep openvpn

吊销用户

cd /root/tools/openvpn-2.2.2/easy-rsa/2.0/
source ./vars
./revoke-full zhangsan

吊销完成会生成crl.pem

cat keys/crl.pem

查看已经吊销(状态R)/(状态V)是颁发的证书

[root@zabbix 2.0]# cat keys/index.txt
V	290220022157Z		01	unknown	/C=CN/ST=BJ/L=BEIJING/O=aliyun/OU=changeme/CN=aliyun/name=changeme/emailAddress=my@test.com
V	290220022458Z		02	unknown	/C=CN/ST=BJ/L=BEIJING/O=aliyun/OU=changeme/CN=mike/name=changeme/emailAddress=my@test.com
R	290220033608Z	190223033810Z	03	unknown	/C=CN/ST=BJ/L=BEIJING/O=aliyun/OU=changeme/CN=zhangsan/name=changeme/emailAddress=my@test.com

将吊销证书拷贝到/etc/openvpn/keys

cp /root/tools/openvpn-2.2.2/easy-rsa/2.0/keys/crl.pem /etc/openvpn/keys/

配置增加吊销文件路径(增加以下内容)

[root@zabbix 2.0]# vim /etc/openvpn/server.conf
crl-verify /etc/openvpn/keys/crl.pem

重启openvpn服务

pkill openvpn
/usr/local/sbin/openvpn --config /etc/openvpn/server.conf &
ps -ef | grep openvpn

取消吊销用户

1、重新./build-key增加新用户,会取消吊销用户;

2、如果要取消所有吊销用户,注释掉crl-verify /etc/openvpn/keys/crl.pem重启服务;

3、也可以将Pem文件存放在单独文件夹,每个人员指定一行,如下:

./revoke-full user
mkdir /etc/openvpn/keys/user
cp kyes/crl.pem /etc/openvpn/keys/user

位置文件按照用户名单独定义

vim server.conf
/etc/openvpn/keys/user/crl.pem

阿里云ECS技术案例参考

pptp、openvpn、squid代理和端口转发可以参考

https://help.aliyun.com/knowledge_list/41507.html?spm=a2c4g.11186623.3.4.59d41d71KSCLEd

常见问题:

1、需要用管理员权限运行openvpn,可以在“兼容性”勾选--以管理员运行程序;

2、openvpn连接无法访问内网,报错如下,记得关闭windows防火墙;

0 12:04:11 2019 OPTIONS IMPORT: route options modified
Wed Apr 10 12:04:11 2019 ROUTE default_gateway=192.168.2.1
Wed Apr 10 12:04:11 2019 TAP-WIN32 device [以太网 2] opened: \\.\Global\{A232C72A-B2CA-401A-B307-9AF1F66A64FD}.tap
Wed Apr 10 12:04:11 2019 TAP-Win32 Driver Version 9.9 
Wed Apr 10 12:04:11 2019 TAP-Win32 MTU=1500
Wed Apr 10 12:04:11 2019 Notified TAP-Win32 driver to set a DHCP IP/netmask of 10.8.0.62/255.255.255.252 on interface {A232C72A-B2CA-401A-B307-9AF1F66A64FD} [DHCP-serv: 10.8.0.61, lease-time: 31536000]
Wed Apr 10 12:04:11 2019 Successful ARP Flush on interface [25] {A232C72A-B2CA-401A-B307-9AF1F66A64FD}
Wed Apr 10 12:04:16 2019 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Wed Apr 10 12:04:16 2019 Route: Waiting for TUN/TAP interface to come up...
Wed Apr 10 12:04:21 2019 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Wed Apr 10 12:04:21 2019 Route: Waiting for TUN/TAP interface to come up...
Wed Apr 10 12:04:22 2019 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Wed Apr 10 12:04:22 2019 Route: Waiting for TUN/TAP interface to come up...
Wed Apr 10 12:04:23 2019 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Wed Apr 10 12:04:23 2019 Route: Waiting for TUN/TAP interface to come up...
Wed Apr 10 12:04:24 2019 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Wed Apr 10 12:04:24 2019 Route: Waiting for TUN/TAP interface to come up...
Wed Apr 10 12:04:26 2019 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Wed Apr 10 12:04:26 2019 Route: Waiting for TUN/TAP interface to come up...
Wed Apr 10 12:04:27 2019 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Wed Apr 10 12:04:27 2019 Route: Waiting for TUN/TAP interface to come up...
Wed Apr 10 12:04:28 2019 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Wed Apr 10 12:04:28 2019 Route: Waiting for TUN/TAP interface to come up...
Wed Apr 10 12:04:29 2019 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down
Wed Apr 10 12:04:29 2019 Route: Waiting for TUN/TAP interface to come up...
Wed Apr 10 12:04:30 2019 TEST ROUTES: 0/0 succeeded len=2 ret=0 a=0 u/d=down

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: