主机名 |
系统版本 |
IP地址 |
角色 |
openvpn版本 |
openvpn |
CentOS7.4 |
10.0.0.252 |
openvpn服务端 |
openvpn-2.4.6.tar.gz |
Administrator |
Windows10 |
10.0.0.1 |
openvpn客户端 |
openvpn-install-2.4.6-I602.exe |
1.1.2.1 解压编译安装
# yum -y install openssl-devel lzo-devel pam-devel
# tar xf openvpn-2.4.6.tar.gz
# cd openvpn-2.4.6/
# ./configure --prefix=/usr/local/openvpn --disable-lzo
# make && make install
# mkdir /etc/openvpn #创建配置文件存放目录
# egrep -v "^#|^$" sample/sample-config-files/server.conf >/etc/openvpn/server.conf #从模板复制一份配置文件
1.1.2.2 制作证书
1.1.2.2.1 制作根证书
# tar xf EasyRSA-3.0.1.tgz
# cd EasyRSA-3.0.1
# ./easyrsa init-pki #初始化证书目录pki
# ./easyrsa build-ca nopass #创建根证书,名称随意,但是不能和服务端证书或客户端证书名字相同
/server/tools/EasyRSA-3.0.1/pki/ca.crt #生成的根证书
# ./easyrsa gen-dh #生成diffle human参数,它能保证秘钥在网络中安全传输
/server/tools/EasyRSA-3.0.1/pki/dh.pem #生成的文件
1.1.2.2.2 制作服务端证书
# ./easyrsa build-server-full server nopass #server是服务端证书名称,可以用其他名称
/server/tools/EasyRSA-3.0.1/pki/issued/server.crt #生成的服务端证书文件
/server/tools/EasyRSA-3.0.1/pki/private/server.key
1.1.2.2.3 制作客户端证书
# ./easyrsa build-client-full client nopass #client是客户端证书名称,可以随意定义名称
/server/tools/EasyRSA-3.0.1/pki/private/client.key
1.1.2.3 修改配置文件
# cat /etc/openvpn/server.conf
local 10.0.0.252 #本机的外网IP地址
port 1194 #默认的openVPN端口为1194
proto tcp #使用tcp协议
dev tun #虚拟网卡使用tun模式
ca /server/tools/EasyRSA-3.0.1/pki/ca.crt
cert /server/tools/EasyRSA-3.0.1/pki/issued/server.crt
key server.key /server/tools/EasyRSA-3.0.1/pki/private/server.key
dh /server/tools/EasyRSA-3.0.1/pki/dh.pem
server 10.8.0.0 255.255.255.0 #为客户端分配的IP网段地址,注意不要和openVPN服务器内网段相同
ifconfig-pool-persist ipp.txt #记录客户端和虚拟IP的映射关系,当客户端重新连接时依然被分配断开之前的IP地址
# 重定向客户端网关,这样客户端不需要推送172网段路由就可以访问内网了,但是无法访问互联网,此处注释
# push "redirect-gateway def1 bypass-dhcp"
# 给客户端推送的路由,这样可以访问内网了,客户端使用自己本地网关访问外网
push "route 172.16.1.0 255.255.255.0"
push "dhcp-option DNS 223.5.5.5" #给客户端推送的DNS服务器地址
push "dhcp-option DNS 223.6.6.6"
client-to-client #所有vpn客户端之间可以通信
keepalive 10 120
compress lz4-v2
push "compress lz4-v2"
max-clients 100 #openVPN服务端允许同时连接的最大客户端数量
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log #记录已连接客户端的日志
log /var/log/openvpn.log #openVPN服务日志文件
log-append /var/log/openvpn.log
verb 3 #日志级别为3
开启路由转发功能
# echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
# sysctl -p
1.1.2.4 防火墙配置
# systemctl stop firewalld
# systemctl disable firewalld
# yum -y install iptables-services
# systemctl start iptables
# systemctl enable iptables
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
# service iptables save
1.1.2.5 启动openvpn服务
# /usr/local/openvpn/sbin/openvpn --config /etc/openvpn/server.conf &
在windows10里安装openvpn的客户端openvpn-install-2.4.6-I602.exe
我的安装路径是E:\soft\openVPN\anzhuang
将Linux服务端中以下三个文件放到Windows中E:\soft\openVPN\anzhuang\OpenVPN\config目录下
/server/tools/EasyRSA-3.0.1/pki/ca.crt
/server/tools/EasyRSA-3.0.1/pki/private/client.key
/server/tools/EasyRSA-3.0.1/pki/issued/client.crt
在E:\soft\openVPN\anzhuang\OpenVPN\config目录下创建客户端配置文件client.ovpn,内容如下
client
dev tun
proto tcp
remote 10.0.0.252 1194 # 填服务器真实IP
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
verb 3 # 日志等级
最后双击桌面的客户端图标连接服务端,不出意外的话连接成功,如果失败的话右键桌面右下角的OpenVPN GUI小图标点击view log查看错误日志,找到具体报错原因并解决。
1.1.4 配置VPN分流
虽然把OpenVPN服务器搭建好了,但是有一个问题,客户端所有应用的网络都走VPN通道了,有时只是想访问某个站点或连接某个服务走VPN通道而已,其它的还是使用本地网络,也就是实现VPN分流效果。实现方法如下:
注释/etc/openvpn/server.conf里的以下三行:
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 223.5.5.5"
push "dhcp-option DNS 223.6.6.6"
添加推送到客户端的路由规则,比如:
push "route 172.16.1.0 255.255.255.0"
假设172.16.1.0是VPN服务器所在的局域网的网段,那么添加这条规则后,客户端也能访问与VPN服务器同一网段的其它机器了,上面的路由规则可以是具体IP,可以是网段,只要能符合路由表的规范。配置好后重新启动OpenVPN服务,客户端重新连接,此时可以发现只有访问172.16.1.0网段时才会走VPN通道。