linux Open虚拟私有网络实施
一. 安装前环境
# 1. 部署系统为centos的6.10;
# 2. selinux关闭(略);
# 3. iptables设置妥当(略);
# 4. 其他基础环境设置、包括路由转发(略);
# 5. 这些基础设置根据需求不同,路由配置的可能不同,请根据具体需求灵活配置路由。
# 本案例将为VPN用户推一条路由,同时在客户端通过脚本增加默认路由,这个路由比客户端原来的默认路由掩码长,更优先。
# 这样VPN不用的情况下也不会影响客户端本身的通信。
# 个人认为OpenVPN非常适合服务器之间的连接场景。如果要设置用户的VPN,推荐用L2TP VPN。
#环境介绍:
192.168.31.15/24作为服务器地址
192.168.32.1/24 作为服务器的一个测试地址
10.0.8.1/24 作为VPN服务器上VPN地址,即VPN用户的VPN地址段网关
10.0.8.11/24 作为VPN客户端的VPN地址
192.168.31.16/24作为VPN客户机的原来的实际地址
#在这里做实验所以使用最简单的环境
[root@study05 openvpn]# setenforce 0 #关闭selinux
[root@study05 openvpn]# echo "1" > /proc/sys/net/ipv4/ip_forward #开启路由转发
[root@study05 openvpn]# /etc/init.d/iptables stop #关闭iptables
二. 部署OpenVPN Server端
1. 安装OpenVPN
yum -y install epel-release
yum -y install openvpn easy-rsa
2. 创建openvpn主配置文件
[root@study05 ~]#
[root@study05 ~]# openvpn --version | head -1
OpenVPN 2.4.8 x86_64-redhat-linux-gnu [Fedora EPEL patched] [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Nov 1 2019
[root@study05 ~]# cp /usr/share/doc/openvpn-2.4.8/sample/sample-config-files/server.conf /etc/openvpn/
3. 创建easy-rsa配置
[root@study05 ~]# ls /usr/share/easy-rsa/
3 3.0 3.0.6
[root@study05 ~]# mkdir /etc/openvpn/easy-rsa
[root@study05 ~]# cp -rf /usr/share/easy-rsa/3.0.6/* /etc/openvpn/easy-rsa/
4. CA证书制作
[root@study05 ~]# vim /etc/openvpn/easy-rsa/vars
set_var EASYRSA_REQ_COUNTRY "China" #国家
set_var EASYRSA_REQ_PROVINCE "China" #省
set_var EASYRSA_REQ_CITY "BeiJing" #城市
set_var EASYRSA_REQ_ORG "test" #组织
set_var EASYRSA_REQ_EMAIL "test@example.net" #邮箱
set_var EASYRSA_REQ_OU "test" #公司、部门
[root@study05 easy-rsa]# cd /etc/openvpn/easy-rsa
[root@study05 easy-rsa]# ./easyrsa init-pki #初始化pki生成PKI目录
[root@study05 easy-rsa]# ./easyrsa build-ca #创建CA证书,两次交互,首先是设置证书密码(两次),其次是设置证书名字。
5. 服务端证书制作
# 1. 制作服务端证书
[root@study05 easy-rsa]# ./easyrsa gen-req server nopass #nopass是不设置证书密码,使用server作为服务器证书名字
# 2. 服务端证书签名签约
[root@study05 easy-rsa]# ./easyrsa sign server server #第二个server是证书名字,注意交互输CA证书密码
6. DH证书制作和TA秘钥
[root@study05 easy-rsa]# ./easyrsa gen-dh #制作DH证书
[root@study05 easy-rsa]# cd /etc/openvpn
[root@study05 openvpn]# openvpn --genkey --secret ta.key #制作TA秘钥
7. 制作客户端证书
# 1. 制作客户端证书
[root@study05 openvpn]# mkdir -p /etc/openvpn/client
[root@study05 openvpn]# cd /etc/openvpn/client/
[root@study05 client]# cp -rf /usr/share/easy-rsa/3.0.6/* /etc/openvpn/client/
[root@study05 client]# cp /etc/openvpn/easy-rsa/vars .
[root@study05 client]# ./easyrsa init-pki
[root@study05 client]# ./easyrsa gen-req Jet nopass #这次客户端证书没有使用默认名字,起名Jet
#--------->重要!!!这里一定不要使用默认client名字,否则后续无法指定固定IP。
#--------->如果在生成的时候使用了client,后续再改证书名字不会生效,因为内部的comm name改变不了。
#--------->如果非得想用client作为客户端证书名字,那必须在生成证书的时候到如下交互提示的时候改掉。
# Common Name (eg, your name or your server's hostname) [xxx]:Jet
总结:与其这么麻烦,还不如客户端名字不要用client,这样交互的时候默认就会把Common Name写成证书名字,一步到位拉。
# 2. 对客户端证书签名、签约
[root@study05 openvpn]# cd /etc/openvpn/easy-rsa
[root@study05 easy-rsa]# ./easyrsa import-req /etc/openvpn/client/pki/reqs/Jet.req Jet
[root@study05 easy-rsa]# ./easyrsa sign client Jet #注意交互提示并设置证书密码
8. 修改服务端主配置文件
#服务器端证书和密钥统一放到和server.conf一个目录下,便于配置
[root@study05 easy-rsa]# cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/
[root@study05 easy-rsa]# cp /etc/openvpn/easy-rsa/pki/private/server.key /etc/openvpn/
[root@study05 easy-rsa]# cp /etc/openvpn/easy-rsa/pki/issued/server.crt /etc/openvpn/
[root@study05 easy-rsa]# cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/
[root@study05 openvpn]# vim server.conf
local 0.0.0.0 #监听地址,这样代表监听所有地址
port 1194 #监听端口
proto udp #监听协议
dev tun #采用路由隧道模式
daemon
ca ca.crt #ca证书路径
cert server.crt #服务器证书
key server.key #服务器密钥
dh dh.pem #密钥交换协议文件
server 10.8.0.0 255.255.255.0 #给客户端分配地址池
push "route 192.168.32.0 255.255.255.0" #允许客户端访问内网 20.0 的网段。
client-to-client #客户端之间互相通信
duplicate-cn
keepalive 10 120 #存活时间,10秒ping一次,120 如未收到响应则视为断线
comp-lzo #传输数据压缩
cipher BF-CBC
max-clients 100 #最多允许 100 客户端连接
user nobody #用户
group nobody #用户组
persist-key
persist-tun
log-append /var/log/openvpn/openvpn.log
status /var/log/openvpn/openvpn-status.log
ifconfig-pool-persist /var/log/openvpn/ipp.txt
tun-mtu 1400
mute 20
verb 3
client-config-dir /etc/openvpn/client #指定VPN客户端配置文件目录
topology subnet #重要参数,一定要配置。
[root@study05 client]# vim Jet
ifconfig-push 10.0.8.11 255.255.255.0 #为VPN客户端绑定IP
mkdir -p /var/log/openvpn
9. 启动服务
/etc/init.d/openvpn restart
三. 部署OpenVPN Client端
1. 安装OpenVPN
yum -y install epel-release
yum -y install openvpn
2. 创建openvpn主配置文件
[root@study06 ~]# cp /usr/share/doc/openvpn-2.4.8/sample/sample-config-files/client.conf /etc/openvpn/client.conf
[root@study06 ~]# cd /etc/openvpn/
[root@study06 ~]# vim client.conf
client #客户端模式
dev tun
proto udp
remote 192.168.31.15 1194 #OpenVPN服务器的IP和端口
nobind
user nobody
group nobody
persist-key
persist-tun
cipher BF-CBC
resolv-retry infinite
persist-key
persist-tun
ca ca.crt #CA证书
cert Jet.crt #客户端Jet的证书
key client01.key #客户端Jet的密钥
ns-cert-type server
comp-lzo
verb 3
mute 20
status /var/log/openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn.log
script-security 2
up up.sh
3. 将服务端生成的秘钥文件拷贝到客户端
[root@study05 openvpn]# scp /etc/openvpn/ca.crt root@192.168.31.16:/etc/openvpn
[root@study05 private]# scp /etc/openvpn/client/pki/private/Jet.key root@192.168.31.16:/etc/openvpn
[root@study05 issued]# scp /etc/openvpn/easy-rsa/pki/issued/Jet.crt root@192.168.31.16:/etc/openvpn
[root@study06 openvpn]# cat up.sh #这个脚本的目的是让客户端的数据都从VPN服务端转发
#!/bin/bash
/sbin/ip r a 0.0.0.0/1 via 10.8.0.1
/sbin/ip r a 128.0.0.0/1 via 10.8.0.1
[root@study06 openvpn]#
4. 启动服务
/etc/init.d/openvpn restart
tips:Windows客户端配置方法略。
四. 测试效果
# 连接VPN的路由走向
[root@study06 openvpn]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:3E:8F:82
inet addr:192.168.31.16 Bcast:192.168.31.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe3e:8f82/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:70360 errors:0 dropped:0 overruns:0 frame:0
TX packets:11711 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20892257 (19.9 MiB) TX bytes:1276710 (1.2 MiB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.11 P-t-P:10.8.0.11 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:53 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:792 (792.0 b) TX bytes:3198 (3.1 KiB)
[root@study06 openvpn]# ip r
192.168.32.0/24 via 10.8.0.1 dev tun0
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.11
192.168.31.0/24 dev eth0 proto kernel scope link src 192.168.31.16 metric 1
0.0.0.0/1 via 10.8.0.1 dev tun0
128.0.0.0/1 via 10.8.0.1 dev tun0
default via 192.168.31.1 dev eth0 proto static
[root@study06 openvpn]# traceroute 114.114.114.114
traceroute to 114.114.114.114 (114.114.114.114), 30 hops max, 60 byte packets
1 10.8.0.1 (10.8.0.1) 0.908 ms 0.302 ms 0.616 ms
2 * * *
# 断开VPN的路由走向
[root@study06 openvpn]# /etc/init.d/openvpn stop
正在关闭openvpn: [确定]
[root@study06 openvpn]#
[root@study06 openvpn]# ip r
192.168.31.0/24 dev eth0 proto kernel scope link src 192.168.31.16 metric 1
default via 192.168.31.1 dev eth0 proto static
[root@study06 openvpn]# traceroute 114.114.114.114
traceroute to 114.114.114.114 (114.114.114.114), 30 hops max, 60 byte packets
1 XiaoQiang (192.168.31.1) 2.798 ms 2.589 ms 4.445 ms