16.Linux环境搭建虚拟网络

1.虚拟网络的简介

***(全称:Virtual Private Network)虚拟专用网络,
是依靠ISP和其他的NSP,在公共网络中建立专用的数据通信的网络技术,
所谓虚拟是指不需要去拉实际的长途物理线路,而是借用了公共Internet网络实现的。

2.作用

***的功能是帮助公司里的远程用户(出差,在家)、公司的分支机构、
商业合作伙伴及供应商等公司和自己的公司内部网络之间建立可信的安全连接或者是局域网连接,
确保数据的加密安全传输和业务访问,对于运维工程师来说,还可以连接不同的机房为局域网来处理相关事宜。

3.SSL

SSL ***(通过软件实现的)
SSL协议提供了数据私密性、端点验证、信息完整性等特性。SSL协议由许多子协议组成,
其中两个主要的子协议是握手协议和记录协议。
握手协议允许服务器和客户端在应用协议传输第一个数据字节以前,彼此确认,
协商一种加密算法和密码钥匙。在数据传输期间,
记录协议利用握手协议生成的秘钥加密和解密后来交换的数据。
SSL独立应用,因此任何一个应用程序都可以享受它的安全性而不必理会执行细节。
SSL置身于网络结构体系的传输层和应用层之间。此外,SSL本身就被几乎所有的WEB浏览器支持。
这意味着客户端不需要为了支持SSL链接安装额外的软件。这两个特征就是SSL能应用于v*p*n的关键点。
典型的SSL ***应用:Open ***,这是一个比较好的开源软件。`
Open v*p*n允许参与建立V P N的单点使用预设的私钥,
第三方证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库,
以及SSLv3/TLSv1协议。Open***能在Linux、xBSD、MacOS 上运行。
它并不是一个基于Web的v*p*n软件,也不能与IPSec及其他v*p*n软件包兼容。

4.Open***

官网:https://openv*p*n.net/

专用网:专用网就是在两个网络(例如,北京和广州)之间架设一条专用线路,
但是它并不需要真正地去铺设光缆之类的物理线路。虽然没有亲自去铺设,
但是需要向电信运营商申请租用专线,在这条专用的线路上只传输自己的信息,所以安全稳定,同时也费用高昂


在众多的V P N产品中,OpenV P N无疑是Linux下开源v*p*n的经典产品,他提供了良好的访问性能和友好的用户GUI。

Open v*p*n是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。
一个实现V PN 的开源软件,OpenV P N 是一个健壮的、高度灵活的 V P N 守护进程。
它支持 SSL/TLS 安全、Ethernet bridging、经由代理的 TCP  UDP 隧道和 NAT。
另外,它也支持动态 IP 地址以及DHCP,可伸缩性足以支持数百或数千用户的使用场景,
同时可移植至大多数主流操作系统平台上。

5.部署Open***

Openv*p*n 分为客户端和服务端
5.1服务端
# 1.安装openv*p*n和证书工具
[root@m01 ~]# yum -y install openv*p*n easy-rsa

# 生成服务器配置文件
[root@m01 ~]# cp /usr/share/doc/openv*p*n-2.4.11/sample/sample-config-files/server.conf /etc/openv*p*n/

# 准备证书签发相关文件
[root@m01 ~]# cp -r /usr/share/easy-rsa/ /etc/openv*p*n/easy-rsa-server

# 准备签发证书相关变量的配置文件
[root@m01 ~]#  cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openv*p*n/easy-rsa-server/3/vars

# 初始化PKI生成PKI相关目录和文件
[root@m01 3]# cd /etc/openv*p*n/easy-rsa-server/3

# 初始化数据,在当前目录下生成pki目录及相关文件 
[root@m01 3]# ./easyrsa init-pki

# 创建CA机构 (直接回车)
[root@m01 3]# ./easyrsa build-ca nopass

# 验证CA证书
[root@m01 3]# openssl x509 -in pki/ca.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            e8:d1:bd:b8:92:1a:63:67
    Signature Algorithm: sha256WithRSAEncryption
...
# 创建服务端证书申请(或者说创建私钥)  (直接回车)
[root@m01 3]# ./easyrsa gen-req server nopass

# 创建证书 (直接回车) 回复yes
[root@m01 3]# ./easyrsa sign server server

# 验证证书  是一个随机字符串,使用tab补齐
# diff pki/certs_by_serial/(tab补齐)  pki/issued/server.crt 没有任何消息代代表成功
[root@m01 3]# diff pki/certs_by_serial/F28FE8C23953FF5613D37D1E951C41A5.pem pki/issued/server.crt
5.2创建 Diffie-Hellman 密钥
方式一:
[root@m01 3]# ./easyrsa gen-dh

方式二:
[root@m01 3]# openssl dhparam -out /etc/openv*p*n/dh2048.pem 2048

image-20211229201808345

6.客户端证书

# 复制证书到客户端
[root@m01 3]# cp -r /usr/share/easy-rsa/ /etc/openv*p*n/easy-rsa-client
[root@m01 3]# cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openv*p*n/easy-rsa-client/3/vars
[root@m01 3]# cd /etc/openv*p*n/easy-rsa-client/3
# 初始化证书目录
[root@m01 3]# ./easyrsa init-pki
# 生成客户端证书 (直接回车)
[root@m01 3]# ./easyrsa gen-req kid nopass
# 将客户端证书请求文件复制到CA的工作目录
[root@m01 3]# cd /etc/openv*p*n/easy-rsa-server/3
[root@m01 3]# ./easyrsa import-req /etc/openv*p*n/easy-rsa-client/3/pki/reqs/kid.req kid
# 签发客户端证书
[root@m01 3]# pwd 路径不能错
/etc/openv*p*n/easy-rsa-server/3 (yes)
[root@m01 3]# ./easyrsa sign client kid

# 验证 (两次查看证书是一致的,不一致就恢复快照重来)
[root@m01 3]# cat pki/index.txt
V	240401022739Z		ADBFFB9F45E5CEF861E7F642BA6C447E	unknown	/CN=server
V	240401023724Z		47765AD8225E12A13FB1EEBAC769B999	unknown	/CN=kid
[root@m01 3]# ll pki/certs_by_serial/
total 16
-rw------- 1 root root 4438 Dec 28 10:37 47765AD8225E12A13FB1EEBAC769B999.pem
-rw------- 1 root root 4552 Dec 28 10:27 ADBFFB9F45E5CEF861E7F642BA6C447E.pem

7.下载&安装open***

https://www.download.io/openv*p*n-gui-download-windows.html

openv*p*n-install-2.4.7-I606-Win10.exe
设置设置安转路径,我不设置了.最好不要安在c盘,可能会涉及到windows的权限问题...

在这里插入图片描述

1

启动openv*p*n

image-20211229203748491

8.创建链接配置文件

# 1.修改openv*p*n配置文件 
[root@m01 3]# > /etc/openv*p*n/server.conf
[root@m01 3]# vim /etc/openv*p*n/server.conf
"""
port 1194
proto tcp
dev tun
ca  /etc/openv*p*n/certs/ca.crt
cert  /etc/openv*p*n/certs/server.crt
key  /etc/openv*p*n/certs/server.key
dh  /etc/openv*p*n/certs/dh.pem
server 10.8.0.0 255.255.255.0
# 修改为自己的网段
push "route 172.16.1.0 255.255.255.0"
keepalive 10 120
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
max-clients 2048
user openv*p*n
group openv*p*n
status  /var/log/openv*p*n/openv*p*n-status.log
log-append   /var/log/openv*p*n/openv*p*n.log
verb 3
mute 20
# :wq
"""
# 创建日志文件目录
[root@m01 3]# mkdir -p /var/log/openv*p*n
# 切换路径
[root@m01 3]# cd
# 创建权限
[root@m01 ~]# chown openv*p*n.openv*p*n /var/log/openv*p*n
# 创建存放证书目录
[root@m01 ~]# mkdir -p /etc/openv*p*n/certs
# 复制证书
[root@m01 ~]# cp /etc/openv*p*n/easy-rsa-server/3/pki/dh.pem /etc/openv*p*n/certs/
[root@m01 ~]# cp /etc/openv*p*n/easy-rsa-server/3/pki/ca.crt /etc/openv*p*n/certs/
[root@m01 ~]# cp /etc/openv*p*n/easy-rsa-server/3/pki/private/server.key /etc/openv*p*n/certs/
[root@m01 ~]# cp /etc/openv*p*n/easy-rsa-server/3/pki/issued/server.crt /etc/openv*p*n/certs/
[root@m01 ~]# ll /etc/openv*p*n/certs/
total 20
-rw------- 1 root root 1172 Dec 28 10:54 ca.crt
-rw------- 1 root root  424 Dec 28 10:54 dh.pem
-rw------- 1 root root 4552 Dec 28 10:54 server.crt
-rw------- 1 root root 1704 Dec 28 10:54 server.key

image-20211229204219369

# 2.启动Openv*p*n
# 开启系统内核网络转发功能
[root@m01 ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
[root@m01 ~]# sysctl -p

# 安装防火墙
[root@m01 ~]# yum install iptables-services -y
[root@m01 ~]# systemctl disable --now firewalld
[root@m01 ~]# systemctl start iptables
[root@m01 ~]# iptables -F
[root@m01 ~]# iptables -F -t nat

# 添加iptables规则 重启失效!
[root@m01 ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

# 永久保存Iptables规则
[root@m01 ~]# service iptables save
# 查看
[root@m01 ~]# iptables -t nat -L -v -n
...
Chain POSTROUTING (policy ACCEPT 3 packets, 228 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      *       10.8.0.0/24          0.0.0.0/0    
# 3.创建链接文件
[root@m01 ~]# mkdir -p /etc/openv*p*n/client/kid/

# 切换路径
# 准备证书
[root@m01 kid]# cp /etc/openv*p*n/easy-rsa-server/3/pki/ca.crt /etc/openv*p*n/client/kid/
[root@m01 kid]# cp /etc/openv*p*n/easy-rsa-server/3/pki/issued/kid.crt /etc/openv*p*n/client/kid/
[root@m01 kid]# cp /etc/openv*p*n/easy-rsa-client/3/pki/private/kid.key /etc/openv*p*n/client/kid/

# 4.准备链接文件
[root@m01 ~]# vim /etc/openv*p*n/client/kid/client.ov*p*n 
"""
client
dev tun
proto tcp
remote 192.168.15.81 1194
resolv-retry infinite
nobind
ca ca.crt
cert kid.crt
key kid.key
remote-cert-tls server
cipher AES-256-CBC
verb 3
compress lz4-v2
# :wq
"""
# 5. 启动Openv*p*n
[root@m01 ~]# systemctl enable --now openv*p*n@server
# 6. 查看服务是否启动
[root@m01 ~]# systemctl status openv*p*n@server
● openv*p*n@server.service - Openv*p*n Robust And Highly Flexible Tunneling Application On server
   Loaded: loaded (/usr/lib/systemd/system/openv*p*n@.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-12-29 21:27:40 CST; 1min 26s ago
# 没启动就重新恢复镜像!重新设置
# 7.iptables设置开机自动启动
systemctl enable --now iptables 
[root@m01 ~]# ip a
# 第四个网卡
...
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::bcce:c869:1de1:a47c/64 scope link flags 800 
       valid_lft forever preferred_lft forever

image-20211229213647214

C:\Program Files\Openv*p*n\config 根据提示
/etc/openv*p*n/client/kid

image-20211229214218598

image-20211229213954515

image-20211229214915848

如果提示没有权限下载带次目录的话需要获取权限,
右键增加“获取管理员的所有权限”菜单,
将下面的内容保存在记事本中,并另存为 获取管理员的所有权限--带图标.reg,然后双击执行
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\runas]
[HKEY_CLASSES_ROOT\*\shell\runas]
@="获取超级管理员的所有权限"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
[HKEY_CLASSES_ROOT\Directory\shell\runas]
[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="获取超级管理员的所有权限"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
[HKEY_CLASSES_ROOT\dllfile\shell]
[HKEY_CLASSES_ROOT\dllfile\shell\runas]
@="获取超级管理员的所有权限"
"HasLUAShield"=""
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\dllfile\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
[HKEY_CLASSES_ROOT\Drive\shell\runas]
[HKEY_CLASSES_ROOT\Drive\shell\runas]
@="获取超级管理员的所有权限"
"Icon"="C:\\Windows\\System32\\imageres.dll,-78"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Drive\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"

image-20211229214315352

9.连接测试

重新打开 Openv*p*n GUI软件

image-20211229215039000

断开xshell
ssh root@172.16.1.81
连接成功!
cmd 
ping  172.16.1.81

image-20211229215528601

image-20211229215845559

# 连接其它的虚拟机

image-20220104172440346

10.附录

#server.conf文件中以#或;开头的行都为注释
[root@instance-gvpb80ao ~]# grep -Ev "^#|^$" /etc/openv*p*n/server.conf
;local a.b.c.d  #本机监听IP,默认为本机所有IP
port 1194       #端口
;proto tcp      #协议,生产推荐使用TCP
proto udp #默认协议
;dev tap   #创建一个以太网隧道,以太网使用tap,一个tap设备允许完整的以太网帧通过Openv*p*n隧道,可提供非ip协议的支持,比如IPX协议和AppleTalk协议,tap等同于一个以太网设备,它操作第二层数据包如以太网数据帧。
dev tun    #创建一个路由IP隧道,生产推存使用tun.互联网使用tun,一个tun设备大多时候,被用于基于IP协议的通讯。tun模拟了网络层设备,操作第三层数据包比如IP数据封包。
;dev-node MyTap  #TAP-Win32适配器。非windows不需要配置
ca ca.crt       #ca证书文件
cert server.crt  #服务器证书文件
key server.key   #服务器私钥文件
dh dh2048.pem    #dh参数文件
;topology subnet
server 10.8.0.0 255.255.255.0  #客户端连接后分配IP的地址池,服务器默认会占用第一个IP 10.8.0.1将做为客户端的网关
ifconfig-pool-persist ipp.txt  #为客户端分配固定IP,不需要配置,建议注释
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100  #配置网桥模式,不需要配置,建议注释
;server-bridge
;push "route 192.168.10.0 255.255.255.0"  #给客户端生成的到达服务器后面网段的静态路由,下一跳为openv*p*n服务器的10.8.0.1
;push "route 192.168.20.0 255.255.255.0"  #推送路由信息到客户端,以允许客户端能够连接到服务器背后的其它私有子网
;client-config-dir ccd #为指定的客户端添加路由,此路由通常是客户端后面的内网网段而不是服务端的,也不需要设置
;route 192.168.40.128 255.255.255.248 
;client-config-dir ccd    
;route 10.9.0.0 255.255.255.252
;learn-address ./script                #运行外部脚本,创建不同组的iptables规则,无需配置
;push "redirect-gateway def1 bypass-dhcp" #启用后,客户端所有流量都将通过v*p*n服务器,因此生产一般无需配置此项
;push "dhcp-option DNS 208.67.222.222"   #推送DNS服务器,不需要配置
;push "dhcp-option DNS 208.67.220.220"
;client-to-client                       #允许不同的client直接通信,不安全,生产环境一般无需要配置
;duplicate-cn                           #多个用户共用一个证书,一般用于测试环境,生产环境都是一个用户一个证书,无需开启
keepalive 10 120         #设置服务端检测的间隔和超时时间,默认为每10秒ping一次,如果 120 秒没有回应则认为对方已经down
tls-auth ta.key 0 #访止DoS等攻击的安全增强配置,可以使用以下命令来生成:openv*p*n --
genkey --secret ta.key #服务器和每个客户端都需要拥有该密钥的一个拷贝。第二个参数在服务器端应该为’0’,在客户端应该为’1’
cipher AES-256-CBC  #加密算法
;compress lz4-v2    #启用Openv*p*n2.4.X新版压缩算法
;push "compress lz4-v2"   #推送客户端使用新版压缩算法,和下面的comp-lzo不要同时使用
;comp-lzo          #旧户端兼容的压缩配置,需要客户端配置开启压缩,openv*p*n2.4.X等新版可以不用开启
;max-clients 100   #最大客户端数
;user nobody         #运行openv*p*n服务的用户和组
;group nobody
persist-key          #重启v*p*n服务时默认会重新读取key文件,开启此配置后保留使用第一次的key文件,生产环境无需开启
persist-tun          #启用此配置后,当重启v*p*n服务时,一直保持tun或者tap设备是up的,否则会先down然后再up,生产环境无需开启
status openv*p*n-status.log #openv*p*n状态记录文件,每分钟会记录一次
;log         openv*p*n.log   #第一种日志记录方式,并指定日志路径,log会在openv*p*n启动的时候清空日志文件,不建议使用
;log-append openv*p*n.log   #第二种日志记录方式,并指定日志路径,重启openv*p*n后在之前的日志后面追加新的日志,生产环境建议使用
verb 3                   #设置日志级别,0-9,级别越高记录的内容越详细,0 表示静默运行,只记录致命错误,4 表示合理的常规用法,5 和 6 可以帮助调试连接错误。9 表示极度冗余,输出非常详细的日志信息
;mute 20                 #相同类别的信息只有前20条会输出到日志文件中
explicit-exit-notify 1   #通知客户端,在服务端重启后自动重新连接,仅能用于udp模式,tcp模式不需要配置即可实现断开重新连接,且开启此项后tcp配置后将导致openv*p*n服务无法启动,所以tcp时必须不能开启此项
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值