鉴于公司现有VPN太坑,每次连接之后得做一些奇怪的配置才能访问外网,很麻烦,于是准备换了他,现有的是在路由上做的,这次准备用CentOS7.4来做一个openvpn,不用Debian了,琢磨一下CentOS系列的,仔细的想了一下,需求有两个,一是能访问公司内部的服务器,这个是必须的,第二个就是连接VPN之后外网IP也要变成公司的,因为机房的防火墙对于22/3389端口有限制,只能是公司的IP才能去连接,就酱紫,使用CentOS7.4X64系统,开撸开撸。
安装阶段
1.添加源
[root@openvpn ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@openvpn ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@openvpn ~]# mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
[root@openvpn ~]# mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
[root@openvpn ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2.安装openvpn
[root@openvpn ~]# yum -y install openvpn easy-rsa
生成openvpn必备文件
如果你安装的easy-rsa-3.0的版本,生成证书步骤请参考这里,2.2的请继续向下走,判断安装的easy-rsa版本看下图。
1.生成证书
[root@openvpn ~]# cp -r /usr/share/easy-rsa/ /etc/openvpn/
[root@openvpn ~]# cd /etc/openvpn/easy-rsa/2.0/
[root@openvpn /etc/openvpn/easy-rsa/2.0]# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/2.0/keys
[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./clean-all
[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./build-ca
一路回车y即可
2.生成服务器端证书和秘钥
[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./build-key-server server
一路回车Y即可。
3.生成客户端证书和密钥
[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./build-key client
一路回车Y
4.生成Diffie Hellman参数
该生成的都生成了,下面开始编写配置文件
配置OpenVPN服务器端文件
编辑/etc/openvpn/server.conf 文件,没有就手动创建,我的配置文件如下。如果是云服务器,尽量不要使用upd协议和1194端口,因为在国内很多接入商都不允许,导致1194端被封不能用。当然你也可以试一下,如果被封了就换一下。
local 192.168.1.168 #服务器IP
port 1194 #占用端口
proto udp #使用udp协议
dev tun #使用tun模式,也可以使用tap
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh2048.pem #指定证书位置
ifconfig-pool-persist /etc/openvpn/ipp.txt #存放每个人使用的IP
server 17.166.221.0 255.255.255.0 #客户端DHCP
push "route 192.168.1.0 255.255.255.0" #VPN访问网段,我的内网是192.168.1.0网段
push "redirect-gateway def1 bypass-dhcp" #所有流量都走VPN,如果不需要将下三行去掉
push "dhcp-option DNS 223.5.5.5" #DNS1
push "dhcp-option DNS 223.6.6.6" #DNS2
client-to-client #允许客户端之间互通
keepalive 20 120 #保持连接时间
comp-lzo #开启vpn压缩
#duplicate-cn #允许多人使用同一个证书连接VPN,不建议使用,注释状态
user openvpn #运行用户
group openvpn #运行组
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 1 #日志级别0-9,等级越高,记录越多
mute 20
启动openvpn,看状态。
[root@openvpn ~]# systemctl start openvpn@server
[root@openvpn ~]# systemctl enable openvpn@server
Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn@server.service to /usr/lib/systemd/system/openvpn@.service.
正常启动了,下面开始配置iptables及转发。
配置iptables及转发
关闭firewall
[root@openvpn ~]# systemctl stop firewalld.service //停止服务
[root@openvpn ~]# systemctl disable firewalld.service //禁止开启动
[root@openvpn ~]# firewall-cmd --state //查看状态
安装iptables,写入策略
iptables
这里的话需要看自己的实际环境去操作,不要照搬,先说一下我这里的情况,我这个服务器是新装的,是放在公司内部的服务器,也不需要做什么端口限制和访问控制,所以我的操作如下。
[root@openvpn ~]# yum -y install iptables iptables-services
[root@openvpn ~]# iptables -t nat -A POSTROUTING -s 17.166.221.0/24 -o ens192 -j MASQUERADE #NAT
[root@openvpn ~]# systemctl enable iptables.service
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@openvpn ~]# systemctl start iptables.service
[root@openvpn ~]# iptables -L -n
[root@openvpn ~]# iptables -t nat -L -n
我上面的操作只是单纯的添加了一个nat
,端口没做任何限制,全部开放,如果你的服务器iptables
已经装好了,而且还有一系列的规则,你的操作就是放行vpn
端口,添加NAT
,以上两项完成之后看一下现有的规则,看FORWARD
链,如果发现这一个,就还需要添加FORWARD
规则。
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
现在是拒绝全部FORWARD
,如果不添加FORWARD
规则,连接vpn
之后,不会发现你的电脑断网了,只能访问到提供vpn
服务的服务器,其他都访问不通,大概酱子。
现在这个测试服务器已经断网连不上了,我是在云后台以terminal
模式连接的,这个问题的解决办法两种,第一种是编辑iptables
配置文件,删除下面的规则重启iptables
即可,这个比较简单。
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
第二种就是添加规则了,允许tun0
网卡进行FORWARD
,两条规则。
[root@openvpn ~]# iptables -I FORWARD -i tun0 -j ACCEPT
[root@openvpn ~]# iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@openvpn ~]# iptables -L -n
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
我添加的是规则,到这里iptables
算是配置完成了。
开启转发
[root@openvpn ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@openvpn ~]# sysctl -p
服务端到此配置结束,生成证书开始连接。
客户端配置
1.添加openvpn用户
使用easy-rsa-3.0的忽略这里撒,直接从编辑client.ovpn
文件开始。
[root@openvpn ~]# cd /etc/openvpn/easy-rsa/2.0/
[root@openvpn /etc/openvpn/easy-rsa/2.0]# source vars
[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./build-key dalin
[root@openvpn /etc/openvpn/easy-rsa/2.0]# sz keys/dalin.* #下载用户证书文件
[root@openvpn /etc/openvpn/easy-rsa/2.0]# sz keys/ca.* #下载CA
2.编辑client.ovpn文件
至于客户端配置文件要怎么去写,之前写过,去这里看吧,从客户端配置第三步开始。
测试
最终效果,可以访问内部服务器,IP
地址变成公司的,结束。