企业VPN办公环境搭建(阿里云ECS上搭建OpenVPN服务器)
应用环境
办公地点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所需软件
1 | yum -y install openvpn easy-rsa iptables-services |
2)拷贝easy-rsa脚本到/etc/openvpn
1 | cp -r /usr/share/easy-rsa/ /etc/openvpn |
进入easy-rsa目录并编辑vars文件
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 | 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" |
让上面修改的变量生效
1 | source . /vars |
运行clean-all心确保工作区的干净
1 | . /clean-all |
现在可以开始生成证书了,生成过程中会在交互界面要你输入一些参数,由于之前在vars中设置过了,这里全部按回车就行
1 | . /build-ca |
此命令生成的ca.crt和ca.key会保存在/etc/openvpn/easy-rsa/2.0/keys/目录下
3)生成服务器端证书和密钥
1 | . /build-key-server server |
运行该命令后会提示输入一些参数,此处我全部留空,但要注意,提示输入[y/n]时输入y,这样就完成服务器端证书生成了
4)生成一个Diffie-Hellman交换密钥
1 | . /build-dh |
5)生成客户端证书
1 | . /build-key client1 |
该命令和生成服务端证书步骤一样
6)将ca.crt、server.crt、server.key、dh2048.pem拷贝到/etc/openvpn目录下
1 2 3 4 | 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目录下
1 | cp /usr/share/doc/openvpn-2 .3.8 /sample/sample-config-files/server .conf /etc/openvpn/ |
修改配置如下:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | # 填写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目录
1 | mkdir /etc/openvpn/ccd |
这里我将之前生成的client1的客户端IP设置为如下10.8.8.101,子网掩码为255.255.255.0
1 | vi /etc/openvpn/ccd/client1 |
配置文件如下:
1 | ifconfig -push 10.8.8.101 255.255.255.0 |
禁用firewalld启用iptables
为了有效的进行数据转发,要关闭CentOS 7默认的firewalld开启iptables
01 02 03 04 05 06 07 08 09 10 11 | #关闭firewalld systemctl stop firewalld #禁用firewalld systemctl disable firewalld #启用iptables systemctl enable iptables #启动iptables systemctl start iptables |
禁用SELINUX,并重启服务器
1 2 3 4 | vi /etc/selinux/config # 更改配置文件中的参数如下 SELINUX=disabled |
修改linux内核参数,开发端口功能
1 2 3 4 5 | vi /etc/sysctl .conf # 修改如下参数 net.ipv4.ip_forward = 1 # 让内核参数更新 sysctl -p |
在iptables中增加一条转发规则
1 2 3 4 | # 注意规则中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服务器
1 | 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个字:正在用!
除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址
一整套做下来systemctl start openvpn@server是成功的,好像没什么问题,测试不知道成不成功,先评论再说
NONONO,跟着教程走到,./clean-all: 没有那个文件或目录,./build-ca: 没有那个文件或目录
时间有点久,相关的工具包失效了,教程也一直没有更新。
感谢老哥回复
推荐作者再更新一些客户端的连接方式就完整了,比如Windows或者macos,Linux的
好建议!倒是有单独写windows下的连接方式,在文章最下方有链接。
现在这么用心写文章的人太少了,给作者一个赞!
请问这个能支持sourcetree 的git指令吗?就是连接VPN以后,我的sourcetree提交或者其他app,像QQ什么的也是走VPN吗?还是只有浏览器走VPN
这种是系统全局的,就是连接上后,所有流量都是通过VPN的,有点像拨号上网的意思。
的确缺东西,启动不了
可以把你发现的错误指出一下吗?时间有点长了,我好更新解决下!
Good! 问一下,可靠性怎么考虑,如果Open VPN server端挂了,能快速倒换吗?谢谢。
好问题,server端挂掉的问题还没有去研究试验过,找个时间找资料学习看看。
明显不对,好吗,你自己真的在ECS上做过??神人!
和骂人的那条评论是同一个人吧?至于有没有真的在ECS上做过,抱歉,正在用!
妈的,就知道抄袭!!
非100%原创,但你联系邮箱都不愿意留下,喷完就走,有意思吗?
不用鸟这种喷子!没意思!