VPN
net-to-net VPN
上次的隧道实例在传输过程中是没有加密的,加密后就是网对网的VPNVirtual Private Network)了。如
何加密?
: 可以使用IPSec协议来进行加密。
IPSec是什么?
: IPSec(Internet Protocol Security, Internet 协议安全性) 一组IP安全协议集, 通过使用加密的安全服务以确
保在 Internet 协议 (IP) 网络上进行保密而安全的通讯。我们这里主要的应用就是IPSec VPNIPSEC的加密
通信中包含了两个协议,分别为AH(Authentication header验证包头),用于对端验证,ESP(Encapsulating
security payload,封装安全载荷)协议,用于加密。
如何实现IPSec VPN?
: linux上相应的开源软件有freeswan,strongswan,openswan,libreswan等。目前centos7的镜像文件里自
带的软件为libreswan
实验: libreswan实现net-to-net VPN
实验准备: 四台虚拟机,和隧道实验的一样。可以直接接着隧道实验继续做
实验步骤:
1. 把隧道先删除(如果是新准备的环境没有隧道环境,无视这一步)
2. 两地VPN服务器上安装libreswan软件包
3. 两地VPN服务器上分别产生加密传输所需要的密钥
4. 配置两地VPN服务器(主要配置两地的公网IP,内网网段,密钥等)
5. 启动两地的VPN服务(服务名称为ipsec)
6. 测试验证
1,先使用ip tunnel del tun0把上面做的tunnel给删除掉,确认深圳与北京内网不能互通。而下面我们的目的就是
要让它们互通,并且加密传输
2,在深圳vpn和北京vpn上安装libreswan(本地yum源就可以)
# yum install libreswan
3,在深圳vpn和北京vpn上分别产生密钥(我这里定义深圳为left,北京为right)
深圳vpn
# rm /etc/ipsec.d/*.db -rf
# ipsec initnss
# rm /etc/ipsec.secrets -rf
# ipsec newhostkey --output /etc/ipsec.secrets
# ipsec showhostkey --left --这里是left
ipsec showhostkey loading secrets from "/etc/ipsec.secrets"
ipsec showhostkey loaded private key for keyid: PPK_RSA:AQOwU+sNI
# rsakey AQOwU+sNI
leftrsasigkey=0sAQOwU+sNITn......
====================================================
注意:centos7.4以上自带的librewan在创建key的时候要多加一个ckaid;操作如下
# ipsec newhostkey --output /etc/ipsec.secrets
Generated RSA key pair with CKAID b24219f0e84b0aaa6e3b054c707e1993c0c1c78d was stored
in the NSS database
# ipsec showhostkey --left --ckaid b24219f0e84b0aaa6e3b054c707e1993c0c1c78d
# rsakey AwEAAdbBY
leftrsasigkey=0sAwEAAdbBYBxjW......
========================================================
北京vpn
# rm /etc/ipsec.d/*.db -rf
# ipsec initnss
# rm /etc/ipsec.secrets -rf
# ipsec newhostkey --output /etc/ipsec.secrets
Generated RSA key pair using the NSS database
# ipsec showhostkey --right --这里是right
ipsec showhostkey loading secrets from "/etc/ipsec.secrets"
ipsec showhostkey loaded private key for keyid: PPK_RSA:AQPtd7QeG
# rsakey AQPtd7QeG
rightrsasigkey=0sAQPtd7QeG.......
===========================================================
4, 配置两边VPN服务器的主配置文件,建立新的VPN链接(先只配置一边VPN,配置完后直接scp拷到另一边的VPN,不
用做任何修改)
# vim /etc/ipsec.d/sz-to-bj.conf --自己建立一个子配置文件,名字以.conf结尾就行
conn sz-to-bj --一个vpn连接的名称,名字随意
   leftid=@szvpn --vpnid标识,按格式,名字随意
   left=192.168.72.128 --vpn的公网ip
   leftsubnet=192.168.100.0/24 --vpn的内网网段
   leftrsasigkey=0sAQOwU+sNIT...... --前面第二步在左vpn上得到的leftkey(最好复制粘贴过
)
   rightid=@bjvpn
   right=192.168.72.129
   rightsubnet=192.168.101.0/24
   rightrsasigkey=0sAQPtd7QeG......
   auto=start --启动服务时,会自动启动这个连接
scp把配置文件拷给另外一台,路径保持一致
# scp /etc/ipsec.d/sz-to-bj.conf 192.168.72.129:/etc/ipsec.d/
5, 两边vpn服务器启服务
# systemctl start ipsec.service
# systemctl status ipsec.service
# systemctl enable ipsec.service
6, 还要注意两点:
a),把两台vpn服务器的ip_forward打开
b),两台vpn服务器上要随便加一个网关(这个网关ip可以不存在都行)
--原因是这个网关是默认的下一跳地址,实际环境指的就是前端路由出口,但我们这里是把192.168.72.129
192.168.72.129直接模拟公网ip,所以就不需要前端路由。但是这个软件还是要加一个网关才行
问题: 上面做的是深圳,北京两地的局域网互连,如果再加一个上海,怎么实现sz,bj,sh三地局域网的vpn互联呢?
: 两两互联。
拓展实验:实现sz,bj,sh三地局域网的vpn互联
然后两边的内网就可以互相ping通了
在两台vpn服务器上tcpdump抓包可以看到有ipsec的加密
# tcpdump -i eth0 host 192.168.72.128 and 192.168.72.129 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:15:10.535976 IP 192.168.72.128 > 192.168.72.129: ESP(spi=0x4255583a,seq=0x179),
length 132
12:15:10.536429 IP 192.168.72.128 > 192.168.72.129: ESP(spi=0xd97b1499,seq=0x179),
length 132
12:15:10.873037 IP 192.168.72.128 > 192.168.72.129: ESP(spi=0xd97b1499,seq=0x17a),
length 132
12:15:10.873392 IP 192.168.72.128 > 192.168.72.129: ESP(spi=0x4255583a,seq=0x17a),
length 132
12:15:11.536145 IP 192.168.72.128 > 192.168.72.129: ESP(spi=0x4255583a,seq=0x17b),
length 132
12:15:11.536668 IP 192.168.72.128 > 192.168.72.129: ESP(spi=0xd97b1499,seq=0x17b),
length 132
12:15:11.873129 IP 192.168.72.128 > 192.168.72.129: ESP(spi=0xd97b1499,seq=0x17c),
length 132
12:15:11.873679 IP 192.168.72.128 > 192.168.72.129: ESP(spi=0x4255583a,seq=0x17c),
length 132
抓包里看到有ESP的信息则表示隧道加密了
深圳    北京 上海
192.168.72.128192.168.72.129192.168.72.130
  1    23
192.168.100.2   192.168.101.3   192.168.102.4
  12 3
192.168.100.6   192.168.101.5   192.168.102.5
网关指向192.168.100.2网关指向192.168.101.3  网关指向192.168.102.4
答:
配置方法一:
深圳:
sz-to-bj
sz-to-sh
北京:
sz-to-bj
bj-to-sh
上海:
sz-to-sh
bj-to-sh
配置方法二:
深圳:
sz-to-bj
sz-to-sh
bj-to-sh
北京:
sz-to-bj
sz-to-sh
bj-to-sh
上海:
sz-to-bj
sz-to-sh
bj-to-sh
roadwarrior VPN
问题: 如果我出差在外住酒店,也要有和公司内网有安全传输的需求,如何实现?
什么是roadwarrior VPN
: raodwarrior在这里指的是出差的人。所以这种模式的VPN是指出差的人在外地通过VPN可以连接到公司
网络。
主要应用场景为以下几种:
1,这个你懂的
国内用户 --》 因特网 --》 国外VPN服务器 --》 facebook,youtube
2,出差员工在外任何地方(只要有网络)就可以通过加密链路连接到公司内网
出差用户windows --》 酒店路由器 --》 公司VPN服务器 --》 公司内网服务器
3, 运维人员在外或在家就可以办公
在家管理员用户 --》 家里路由器 --》 公司VPN服务器(防火墙,堡垒机,跳板机,审计等) --》 公司内
部被管理的服务器集
拓展实验: libreswan实现linux客户端点对网VPN
仍然使用上例用到的结构图(ip不变,但角色变了)
实验准备:
 192.168.72.128      192.168.72.129
  酒店路由器   公司VPN服务器(打开ip_forward)
 192.168.100.2   192.168.101.3
员工在酒店内笔记本获取的内网IP 公司内网机器
192.168.100.6 192.168.101.5
网关指向192.168.100.2 网关指向192.168.101.3
实验步骤:
1. 在出差员工笔记本上和VPN服务器上安装libreswan
2. 在出差员工笔记本上和VPN服务器上产生加密传输所需的密钥
3. 在出差员工笔记本上和VPN服务器上配置
4. 在出差员工笔记本上和VPN服务器上启动服务
5. 验证
1,在酒店路由器上systemctl stop ipsec.service;还要把网关也删除掉。因为现在它是默认酒店的一个路由器,
你不可能在上面安装libreswan;
2,需要在酒店路由器做一个SNAT伪装,让员工能上外网
# systemctl start firewalld
# systemctl enable firewalld
# firewall-cmd --add-masquerade
# firewall-cmd --runtime-to-permanent
3,VPN服务器上再次确认打开ip_forward
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p --保存退出后,用此使用使之生效
做完上面的准备工作后,出差员工在192.168.100.6上能ping192.168.72.129公司VPN服务器公网IP了,但
ping不通192.168.101.5公司内网服务器,所以需要做VPN拔号上去
1,192.168.100.6(这里模拟出差的员工带的笔记本)上安装libreswan
# yum install libreswan
2,在192.168.100.6(出差员工电脑)192.168.72.129(公司VPN服务器)上配置libreswanleftkey
rightkey
步骤也是和上面架构安装时一样,我这里的步骤如下
192.168.100.6(出差员工电脑)上的步骤
# rm /etc/ipsec.d/*.db -rf
# ipsec initnss
# rm /etc/ipsec.secrets -rf
# ipsec newhostkey --output /etc/ipsec.secrets
Generated RSA key pair using the NSS database
# ipsec showhostkey --left
leftrsasigkey=0sAQO8q6mzHW......
192.168.72.129(公司VPN服务器)上的步骤
# rm /etc/ipsec.d/*.db -rf
# ipsec initnss
# rm /etc/ipsec.secrets -rf
# ipsec newhostkey --output /etc/ipsec.secrets
Generated RSA key pair using the NSS database