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
posted @ 2020-03-24 22:16  IamJet  阅读(317)  评论(0编辑  收藏  举报