VPN简介

虚拟专用网络 Virtual Private Network

主要功能是在公用网络上建立专用网络,进行加密通讯。在企业网络中有广泛应用。

VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。

VPN可通过服务器、硬件、软件等多种方式实现。

虚拟专用网(VPN)被定义为通过一个公用网络(通常是因特网)建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定的隧道。虚拟专用网是对企业内部网的扩展。虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,并保证数据的安全传输。

顾名思义,虚拟专用网络我们可以把它理解成是虚拟出来的企业内部专线。它可以通过特殊的加密的通讯协议在连接在Internet上的位于不同地方的两个或多个企业内部网之间建立一条专有的通讯线路,就好比是架设了一条专线一样,但是它并不需要真正的去铺设光缆之类的物理线路。这就好比去电信局申请专线,但是不用给铺设线路的费用,也不用购买路由器等硬件设备。VPN技术原是路由器具有的重要技术之一,目前在交换机,防火墙设备或WINDOWS2000等软件里也都支持VPN功能,一句话,VPN的核心就是在利用公共网络建立虚拟私有网。

用途

  1. 降低成本。VPN利用现有的互联网组建虚拟专网,不需要使用专用线路就能实现数据的安全传输,提供比其他通信方式(如专线和长途电话)更低廉的成本。

  2. 易于扩展。在公司分部增多、内部网络节点越来越多时,专线连接网络结构趋于复杂,费用昂贵。而采用VPN只需在节点处架设VPN设备,就可利用互联网建立安全连接。如果有新的内部网络想加入安全连接,只需添加一台VPN设备,改变相关配置即可。

  3. 保证安全。为了保障信息的安全,VPN利用可靠的加密认证技术,在内部网络建立隧道,以防止信息被泄露、篡改和复制。

分类

VPN的应用分类

  1. Access VPN(远程接入VPN):客户端到网关,使用公网作为骨干网在设备之间传输VPN数据流量

  2. Intranet VPN(内联网VPN):网关到网关,通过公司的网络架构连接来自同公司的资源

  3. Extranet VPN(外联网VPN):与合作伙伴企业网构成Extranet,将一个公司与另一个公司的资源进行连接。

VPN的隧道协议分类

  1. PPTP

工作在OSI模型的第二层,数据链路层,又称为二层隧道协议

  1. L2TP

工作在OSI模型的第二层,数据链路层

  1. IPSec

工作在OSI模型的第三层,网络层,又称为三层隧道协议


L2TP(第二层隧道协议)是 PPTP(点对点隧道协议)的扩展,互联网服务提供商使用它来启用互联网上的 VPN。

IPSec(互联网安全协议)是一组安全协议。

IKEv2(互联网密钥交换)是一种在 IPSec 中设置安全关联的协议。

L2TP/IPsec

L2TP/IPsec是一种常用的VPN配置类型,L2TP(第二层隧道协议)本身不提供加密功能,通常与IPsec(互联网协议安全)结合使用以提供加密和身份验证功能。

  • 安全性较高

通过结合IPsec,提供了数据加密和身份验证,适用于需要较强安全性的场景。

  • 兼容性较好

广泛支持多种设备和操作系统,包括macOS。

  • 配置复杂度中等

需要设置IPsec参数,但整体配置相对直观。


Cisco/IPsec

  • 安全性高

IPsec本身提供了强大的加密和身份验证功能,适用于高安全需求的环境。

  • 兼容性较好

虽然主要针对Cisco设备,但也可以通过路由器和防火墙等设备实现跨平台的兼容。

  • 配置复杂度高

需要详细配置IPsec参数,包括预共享密钥、认证方法等,适合有专业技术支持的场景。

IKEv2/IPsec

IKEv2/IPsec是一种较新的VPN协议,IKEv2(互联网密钥交换版本2)提供了快速重新连接和移动设备支持的功能。

  • 安全性高

IKEv2结合IPsec提供了高级别的数据加密和身份验证。

  • 兼容性较好

广泛支持各种设备和操作系统,特别适合移动设备和需要频繁切换网络环境的用户。

  • 配置复杂度中等

相对于Cisco/IPsec较为简单,但仍需要一定的配置知识。

  • 快速重连接

IKEv2能够快速重新建立连接,适用于网络不稳定的环境。

安全性:IKEv2/IPsec和Cisco/IPsec都提供了较高的安全性,而L2TP/IPsec通过结合IPsec也达到了较高的安全标准。

兼容性:IKEv2/IPsec具有最好的兼容性,Cisco/IPsec次之,L2TP/IPsec也较为广泛支持,但Cisco/IPsec更依赖于Cisco设备。

配置复杂度:Cisco/IPsec配置最为复杂,L2TP/IPsec中等,IKEv2/IPsec相对简单。

IPSec

简介

Internet Protocol Security,互联网安全协议,是通过对IP协议的分组进行加密和认证来保护IP协议的网络传输协议簇

随着Internet的飞速发展,IPSec的应用领域越来越广。与此同时,互联网安全问题也日趋严重,网络上的数据非常容易被他人恶意窃听和篡改。IPSec协议是一个标准的网络安全协议,也是一个开放标准的网络架构,通过加密以确保网络的安全通信。IPSec的作用主要包括确保IP数据安全以及抵抗网络攻击。

工作原理

  1. 主机识别:主机识别数据包是否需要保护,使用 IPSec 进行传输时,这些数据包流量会自己触发安全策略。主机还会检查传入的数据包是否正确加密。

  2. IKE 阶段 1:主机使用 IPSec 协商将用于安全通道的策略集,双方验证完成后,在它们之间建立一个安全通道,用于协商 IPSec 电路加密或验证通过它发送的数据的方式。

  3. IKE 阶段 2:通过安全通道进行,在该通道中,两台主机协商在会话中使用的加密算法类型,主机还同意并交换双方计划用于进出流量的加密和解密密钥。

  4. IPSec 传输:通过新创建的 IPSec 加密隧道交换数据,之前设置的 IPSec SA 用于加密和解密数据包。

  5. IPSec 终止:当主机之间的会话超时或通信完成时,通信双方之间的隧道在空闲时间达到一定值后会自动删除。

功能

  1. 数据机密性

IPSec发送方将包加密后再通过网络发送。

  1. 数据完整性

IPSec可以验证IPSec发送方发送的包,以确保数据传输时没有被改变。

  1. 数据认证

IPSec接受方能够鉴别IPsec包的发送起源。此服务依赖数据的完整性。

  1. 反重放

IPSec接受方能检查并拒绝重放包。

组成

  1. 认证头(AH),为IP数据报提供无连接数据完整性、消息认证以及防重放攻击保护;

  2. 封装安全载荷(ESP),提供机密性、数据源认证、无连接完整性、防重放和有限的传输流(traffic-flow)机密性;

  3. 安全关联(SA),提供算法和数据包,提供AH、ESP操作所需的参数。

  4. 密钥协议(IKE),提供对称密码的钥匙的生存和交换。

模式

IPSec 有两种不同的运行方式:隧道模式和传输模式。

两者之间的区别在于 IPSec 如何处理数据包报头。

在隧道模式下加密和验证整个 IP数据包(包括 IP 标头和有效负载),并附加一个新的报头,如下图所示。通常,隧道模式应用在两个安全网关之间的通讯。

在传输模式下,IPSec 仅加密(或验证)数据包的有效负载,但或多或少地保留现有的数据报头数据。通常,传输模式应用在两台主机之间的通讯,或一台主机和一个安全网关之间的通讯。

IPSec传输模式和隧道模式的区别

1. 从安全性来讲,隧道模式优于传输模式。它可以完全对原始IP数据包进行验证和加密。隧道模式下可以隐藏内部IP地址、协议类型和端口。

2. 从性能来讲,隧道模式因为有一个额外的IP头,所以它将比传输模式占用更多带宽。

3. 从场景来讲,传输模式主要应用于两台主机或一台主机和一台VPN网关之间通信;隧道模式主要应用于两台VPN网关之间或一台主机与一台VPN网关之间的通信。


IPSec环境搭建(macOS)

1.Homebrew安装

Homebrew是一款Mac OS平台下的软件包管理工具

拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

Enter按下后显示如图界面,可选择任一镜像下载源

首次下载需要额外下载安装Git,并在成功安装后关闭重启MAC终端

或执行以下命令:

source /Users/admin/.profile

2.strongSwan安装

strongSwan是一个开源、基于IPsec的VPN解决方案

https://www.strongswan.org/
①安装

在MAC终端(terminal)输入如下命令:即可完成安装strongSwan

cd /usr/local
brew install strongswan

过程中需要输入MAC密码,输入显示为空,直接回车即可

②两种删除旧配置文件方法(任选其一)
  1. 使用终端命令

rm -f /usr/local/etc/ipsec.conf
rm -f /usr/local/etc/ipsec.secrets

  1. 文件夹内手动删除

#1.打开任意文件夹

#2.Command+shift +G

#3.输入/usr/local/etc,回车

#4.删除ipsec.conf和ipsec.secrets

确保删除后/usr/local/etc路径下没有ipsec.conf和ipsec.secrets两文件即可

③替换 swanctl.conf配置文件

控制 strongSwan 的工具有两种:starter 和 swanctl。

这里描述的过程是使用 swanctl 时的过程。

提供了配置文件模板,根据个人实际网络环境对应修改

connections {
  conn {
    proposals = aes128-sha2_384-prfsha256-modp3072
    version = 2
    remote_addrs = 192.168.10.88  # ★
    local {
      auth = psk
    }
    remote {
      auth = psk
    }

    children {
      home {
        esp_proposals = aes128-sha2_384-modp3072
        mode = transport
        start_action = trap
      }
    }
  }
}

secrets {
  ike2 {
    secret = "12345678" # ★
  }
}

①remote_addrs:为实际客户端设备IP

②secret:都行,八位以上,建议12345678

文件作成后,复制替换swanctl.conf

1.打开任意文件夹
2.Command+shift +G
3.输入/usr/local/etc/swanctl,回车
4.删除旧swanctl.conf
5.拖动复制提供的swanctl.conf模板

④验证是否安装成功

MAC终端(terminal)输入如下命令:

which swanctl

显示:/usr/local/bin/swanctl ,则表示安装完成

3.IPsec进程运行

①终端切换管理员Root身份

可能出现MAC终端默认用户权限不够无法启动进程的情况,故建议在进行下面流程前先切换root【管理员】身份

在MAC终端输入如下命令:

sudo -i

sudo su -

②启动IPsec的Charon主进程

Charon为strongSwan的主进程

负责IPSec SA的创建和更新操作

sudo /usr/local/Cellar/strongswan/5.9.6/libexec/ipsec/charon &

③载入Swanctl配置并运行
sudo swanctl --load-all

④查看IPsec连接状态
sudo swanctl --list-sa

将在成功连接PC Remote或FTP后开始显示Ping信息

否则在未连接 IPsec 时不显示任何内容

用完将IPsec关闭

在MAC终端(terminal)输入如下命令:

sudo kill `cat /var/run/charon.pid`



IPSec环境搭建(Linux)

  1. 环境准备

需要服务器连接带有公网IP的AP

  1. IPsec VPN Server安装

IPsec Vpn Server支持IPsex/L2TP,Cisco IPsec,IKEv2这三种类型的IPsec,对网络数据进行加密

通过Docker镜像运行IPsec Vpn Server

docker run \
    --name ipsec-vpn-server \
    --restart=always \
    -v ikev2-vpn-data:/etc/ipsec.d \
    -v /lib/modules:/lib/modules:ro \
    -p 500:500/udp \
    -p 4500:4500/udp \
    -d --privileged \
    hwdsl2/ipsec-vpn-server

  1. 前往映射的配置文件路径

cd /var/lib/docker/volumes/ikev2-vpn-data/_data
  1. 做成配置文件,并编辑保存

vim vpn.env
VPN_IPSEC_PSK=12345678
VPN_USER=ipsec
VPN_PASSWORD=12345678

配置文件书写后,重启服务器

  1. 查看连接情况(输出日志)

docker logs -f ipsec-vpn-server

42.84.46.169为公网IP

相关情报正常输出,证明服务端配置成功

  1. 客户端连通性测试

此处客户端选择macBook

追加VPN配置,并输入对应的信息

显示已连接,证明客户端侧连通成功

  1. 服务端连通性测试

终端输入如下命令

docker exec -it ipsec-vpn-server ipsec whack --trafficstatus

输出客户端IP,及虚拟化后的IP,证明服务端连通成功

至此,Linux侧基于IPSec-VPN-Server的服务部署完成

参考文章

https://cloud.tencent.com/developer/article/2043598https://baike.baidu.com/item/ipsec/2472311https://support.apple.com/zh-cn/guide/mac-help/mchlp2963/14.0/mac/14.0