企业VPN办公环境搭建(阿里云ECS上搭建OpenVPN服务器)

日期:2015年10月16日 作者: 分类:运维 浏览:29323

应用环境

办公地点A:主要办公地点,市场统一管理,8:30-18:00开门供电,配置有电信50M宽带

办公地点B:公司仓库,24小时供电区,配置2M铁通宽带,工作时间为9:00-18:30

办公地点C:辅助办公地点,安全可靠,24小时供电区,配置100M移动宽带,无外网IP地址,工作时间无限制

服务器:办公ERP服务器物理机一台,阿里云ECS服务器一台(4M电信宽带)

之前办公:

由于网络环境的因素,ERP服务器只能放在A区才能通过外网IP的方式让A、B、C三区都能正常连接ERP服务器进行办公,但由于工作时间的不同,会导致其它办公区不能按工作时间使用ERP系统

改造后要实现的目标

ERP系统要24小时能访问,同时要保证ERP系统的安全,让员工只在指定的机器上进行连接访问。

方案:

阿里云ECS上安装OpenVPN服务器,将ERP服务器放置到C区,服务器和所有员工使用的电脑通过VPN证书连接虚拟网络,这样就可以通过VPN穿透移动宽带的内网和铁通宽带的线路限制。

VPN网络搭建

1)ECS环境(操作系统为CentOS 7.x)

ECS服务器上要配置epel软件源,由于阿里云ECS上已经配置了epel源,此处不用配置,没有配置的主参考以下链接:

http://mirrors.aliyun.com/help/epel

安装OpenVPN所需软件

yum -y install openvpn easy-rsa iptables-services

2)拷贝easy-rsa脚本到/etc/openvpn

cp -r /usr/share/easy-rsa/ /etc/openvpn

进入easy-rsa目录并编辑vars文件

cd /etc/openvpn/easy-rsa/2.0
vim vars

export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650

export KEY_COUNTRY="CN"
export KEY_PROVINCE="YN"
export KEY_CITY="Kunming"
export KEY_ORG="MYORG"
export KEY_EMAIL="wanglu@example.com"
export KEY_OU="MyOrgUnit"

export KEY_NAME="EasyRSA"

 

让上面修改的变量生效

source ./vars

运行clean-all心确保工作区的干净

./clean-all

现在可以开始生成证书了,生成过程中会在交互界面要你输入一些参数,由于之前在vars中设置过了,这里全部按回车就行

./build-ca

此命令生成的ca.crt和ca.key会保存在/etc/openvpn/easy-rsa/2.0/keys/目录下

3)生成服务器端证书和密钥

./build-key-server server

运行该命令后会提示输入一些参数,此处我全部留空,但要注意,提示输入[y/n]时输入y,这样就完成服务器端证书生成了

4)生成一个Diffie-Hellman交换密钥

./build-dh

5)生成客户端证书

./build-key client1

该命令和生成服务端证书步骤一样

6)将ca.crt、server.crt、server.key、dh2048.pem拷贝到/etc/openvpn目录下

cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt /etc/openvpn/
cp /etc/openvpn/easy-rsa/2.0/keys/server.crt /etc/openvpn/
cp /etc/openvpn/easy-rsa/2.0/keys/server.key /etc/openvpn/
cp /etc/openvpn/easy-rsa/2.0/keys/dh2048.pem /etc/openvpn/

配置OpenVPN服务器

拷贝示例配置文件到/etc/openvpn目录下

cp /usr/share/doc/openvpn-2.3.8/sample/sample-config-files/server.conf /etc/openvpn/

修改配置如下:

# 填写OpenVPN要使用的IP地址
# 这里我写ECS服务器的外网IP
# 具体IP根据自己的服务器来写
local xxx.xxx.xxx.xxx

# 使用的端口,记住防火墙要打开1194端口
port 1194

# 使用的协议,保持默认
proto udp

# "dev tun" will create a routed IP tunnel,
dev tun

# 生成的证书相关的配置
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

# 网络拓扑,为了让所有客户端在同一子网内,打开此选项
topology subnet

# 配置使用的IP地址
# 下面的设置,些服务器会自动使用10.8.8.1做为自己的IP地址
server 10.8.8.0 255.255.255.0

# 如果要固定客户端的IP地址,请打开此选项,否则不要打开
client-config-dir ccd

# 此选项必须打开
push "redirect-gateway def1 bypass-dhcp"

# 网络相关的设置,此处用DNSPOD的DNS
push "dhcp-option DNS 119.29.29.29"
push "dhcp-option DNS 182.254.116.116"

# 让客户端之间可以相互通讯
client-to-client


# 第20秒会进行ping测试,如果120秒没有回应会断线
keepalive 20 120

comp-lzo
max-clients 20

# 为了安全
user nobody
group nobody

persist-key
persist-tun

# 开启日志
log-append  /var/log/openvpn.log

# 设置日志等级
verb 3

因为我在配置文件中配置了client-config-dir ccd,所以我要继续设置客户端IP(没有打开的可以不用设置,DHCP服务器会自动分配)

首先在/etc/openvpn下建立ccd目录

mkdir /etc/openvpn/ccd

这里我将之前生成的client1的客户端IP设置为如下10.8.8.101,子网掩码为255.255.255.0

vi /etc/openvpn/ccd/client1

配置文件如下:

ifconfig-push 10.8.8.101 255.255.255.0

禁用firewalld启用iptables

为了有效的进行数据转发,要关闭CentOS 7默认的firewalld开启iptables

#关闭firewalld
systemctl stop firewalld

#禁用firewalld
systemctl disable firewalld

#启用iptables
systemctl enable iptables

#启动iptables
systemctl start iptables

禁用SELINUX,并重启服务器

vi /etc/selinux/config

# 更改配置文件中的参数如下
SELINUX=disabled

修改linux内核参数,开发端口功能

vi /etc/sysctl.conf
# 修改如下参数
net.ipv4.ip_forward = 1
# 让内核参数更新
sysctl -p

在iptables中增加一条转发规则

# 注意规则中eth1,这个是对应server.conf中配置的外网IP地址所在的网络接口
iptables -t nat -A POSTROUTING -s 10.8.8.0/24 -o eth1 -j MASQUERADE
# 保存规则
iptables-save > /etc/sysconfig/iptables

启动OpenVPN服务器

systemctl start openvpn@server

至此,OpenVPN服务器搭建完成

使用效果:

A、B、C三处所有的电脑,包括ERP服务器,通过OpenVPN客户端连接到OpenVPN服务器,这样,A、B、C三地的电脑和服务器就都在10.8.8.0这个网段,从而实现了内网穿透和运营商线路限制,最终实现了ERP系统24小时安全访问。

 

OpenVPN客户端配置使用:https://wanglu.info/2015/11/1010.html

 

遇到喷子了,还在评论里骂人。我不敢说100%的原创,但我只想说,在ECS上搭建起OpenVPN我自认没有能力不做任何参考就可以轻松完成。因为参考的文章太多(当然,大多数是Google出来的英文文档),故原文没有做任何说明,在此补充说明。另外,出于对个人网络配置的隐私性,将自己使用的ECS上的IP和客户证书名字给模糊处理了,不排除处理没对应好的地方。

至于问我是不是真在ECS上操作过,我只送3个字:正在用!

标签:,

除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址

本文地址:https://wanglu.info/2015/10/983.html