MENU

Centos7.4搭建openvpn

2017 年 12 月 25 日 • 应用服务器

鉴于公司现有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

20171225103806.png

生成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即可。

20171225104227.png

3.生成客户端证书和密钥

[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./build-key client

一路回车Y

20171225104403.png

4.生成Diffie Hellman参数

20171225104457.png

该生成的都生成了,下面开始编写配置文件

配置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

20171225111020.png

启动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.

20171225112216.png

正常启动了,下面开始配置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地址变成公司的,结束。

最后编辑于: 2019 年 01 月 02 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码