Relative Content

K4NZDROID

category

「GRE」- 安全威胁

问题描述
GRE 隧道的主要作用是将数据在分支-总部之间传递,数据并不加密,有被篡改的风险;
GRE 隧道建立也有一定风险,通过伪造 IP 地址,可以使得非法设备与合法设备之间建立 GRE 隧道;

解决方案
数据校验和验证
校验和验证是指对封装的报文进行端到端校验,通过数据校验防止数据被篡改
若 GRE 报文头中的 C 位标识位置 1,则校验和有效。发送方将根据 GRE 头及 Payload 信息计算校验和,并将包含校验和的报文发送给对端。接收方对接收到的报文计算校验和,并与报文中的校验和比较,如果一致则对报文进一步处理,否则丢弃;

隧道两端可以根据实际应用的需要决定配置校验和或禁止校验和。如果本端配置了校验和而对端没有配置,则本端将不会对接收到的报文进行校验和检查,但对发送的报文计算校验和;相反,如果本端没有配置校验和而对端已配置,则本端将对从对端发来的报文进行校验和检查,但对发送的报文不计算校验和;
识别关键字
识别关键字(Key)验证是指对 Tunnel 接口进行校验。通过这种弱安全机制,可以防止错误识别、接收其它地方来的报文;
若 GRE 报文头中的 K 位为 1,则在 GRE 头中插入一个四字节长关键字字段,收发双方将进行识别关键字的验证;

关键字的作用是标志隧道中的流量,属于同一流量的报文使用相同的关键字。在报文解封装时,GRE 将基于关键字来识别属于相同流量的数据报文。只有 Tunnel 两端设置的识别关键字完全一致时才能通过验证,否则将报文丢弃。这里的“完全一致”是指两端都不设置识别关键字,或者两端都设置相同的关键字;[……]

READ MORE

「Huawei-VRP」- 配置 GRE 隧道

#### RT1

[Huawei] interface Tunnel 0/0/100
[Tunnel] tunnel-protocol gre
[Tunnel] ping <peer-pubip-address>

[Tunnel] source <local-pubip-address>
[Tunnel] destination <peer-pubip-address>
[Tunnel] ip address <local-pivip-address-0>

#### RT2

[Huawei] interface Tunnel 0/0/100
[Tunnel] tunnel-protocol gre
[Tunnel] ping <peer-pubip-address>

[Tunnel] source <local-pubip-address>
[Tunnel] destination <peer-pubip-address>
[Tunnel] ip address <local-pivip-address-1>

#### Routing RT1

ip route-static xxxx xxxx Tunnel 0/0/100

#### Routing RT2

ip route-static xxxx xxxx Tunnel 0/0/100

注意事项: 1)local-pivip-address-0 与 local-pivip-address-1 要相同网段的内网地址[……]

READ MORE

「GRE」- GRE Over IPSec

问题描述
GRE 技术简单,但是使用 GRE 隧道传递的数据以明文方式传递的,数据容易被窃取;
解决方案
在现网中,一般与 IPsec 技术结合使用。GRE 技术构建分支-总部之间的内部网络互联,IPSec 技术加密 GRE 隧道报文;
原理简述

当网关之间采用 GRE over IPsec 连接时,先进行 GRE 封装,再进行 IPsec 封装;

封装模式
GRE over IPsec 使用的封装模式为可以是隧道模式也可以是传输模式。因为隧道模式跟传输模式相比增加了 IPsec 头,导致报文长度更长,更容易导致分片,所以 GRE over IPsec 推荐采用传输模式;
报文封装

IPsec 封装过程中增加的 IP 头即源地址为 IPsec 网关应用 IPsec 安全策略的接口地址,目的地址即 IPsec 对等体中应用 IPsec 安全策略的接口地址;
IPsec 需要保护的数据流为从 GRE 起点到 GRE 终点的数据流。GRE 封装过程中增加的 IP 头即源地址为 GRE 隧道的源端地址,目的地址为 GRE 隧道的目的端地址;
特性特征
GRE over IPsec 可利用 GRE 和 IPsec 的优势,通过 GRE 将组播、广播和非 IP 报文封装成普通的 IP 报文,通过 IPsec 为封装后的 IP 报文提供安全地通信;[……]

READ MORE

「Openswan」- 杂记

问题描述
Openswan,Linux 的 IPsec 实现。支持与 IPsec 相关的大部分扩展。包括 IKEv2,X.509 数字证书,NAT Traversal 等等;
类似的实现还有 strongSwan,但是 StrongSwan 更新一些。最近的一些 Linux 发行版中不再有 Openswan 了;
解决方案
部署安装
可以从 Github 上下载 Openswan
下载之后先阅读 README 文件,一定要认真阅读 Openswan 要求内核版本是基于 Kernel 2.4.x 或 2.6.x 的 Linux 发行版。而我的内核比较新,是 4.x 的,所以不能用 Openswan,即使能安装,为了后期考虑,我还是决定换 strongSwan,因为 strongSwan 支持 4.x 的内核;
安装 Openswan 依赖的软件包 gmp 及头文件,awk,flex,bison,iproute2,iptables,sed,awk,bash,cut,python 等等; 如果编译过程中出现问题,根据错误提示再安装其他相关的依赖就好了;
安装按照 README 的指引即可
使用源进行安装
apt-get install openswan
dpkg-reconfigure openswan
参考文献
Openswan Homepage GitHub Repo Openswan Wiki[……]

READ MORE

「IPSec VPN」- Racoon

问题描述
racoon,是 KAME 的用户空间进程,负责处理 IKE。在 Linux 系统中,是 ipsec-tools 的组成部分。
该笔记将记录:与 Racoon 相关的内容,以及相关问题的解决办法。
背景说明
下面是阿里云的 IPSec VPN 服务日志的节选,我们通过对其中的源码文件名及函数名进行检索,并根据检索结果推断其使用 Racoon 实现:


,2022-05-01 09:19:09 *** [DEBUG]: algorithm.c:524:alg_oakley_encdef(): encryption(aes)
,2022-05-01 09:19:09 *** [DEBUG]: oakley.c:3051:oakley_do_encrypt(): pad length = 16
,2022-05-01 09:19:09 *** [DEBUG]: oakley.c:3083:oakley_do_encrypt(): 1. encrypted payload by IV:
,2022-05-01 09:19:09 *** [DEBUG]: algorithm.c:524:alg_oakley_encdef(): encryption(aes)
,2022-05-01 09:19:09 *** [DEBUG]: oakley.c:3094:oakley_do_encrypt(): with key:

所以,我们需要对该软件有个简单的了解(比如 日志、特性 等等)。
而且需要开启 DPD 检查才能显示 IPSec VPN 服务的相关日志。
参考文献
KAME project – Wikipedia[……]

READ MORE

「Huawei VRP」- IPSec VPN

概述流程
配置 IPSec VPN 的步骤如下:
第一步、设备网络可达
解释:IPSec VPN 利用公网来构建私网,所以首先两端的公网必须是互通的;
需要检查报文发送方和接收方间的网络层可达性,确保双方只有建立 IPSec VPN 隧道才能进行 IPSec 通信;
第二步、识别感兴趣流(ACL)
解释:定义数据流,即选择需要进行 IPSec VPN 加密(传输)的流量;
因为部分流量无需满足完整性和机密性要求,所以需要对流量进行过滤,选择出需要进行 IPSec 处理的兴趣流;
通过配置 ACL 来定义和区分不同的数据流;
第三步、创建安全提议(Proposal)
配置 IPSec 安全提议。IPSec 提议定义用于保护数据流所用的安全协议、认证算法、加密算法、封装模式; 对等体的安全提议参数必须一致。为了能够正常传输数据流,安全隧道两端的对等体必须使用相同的安全协议、认证算法、加密算法和封装模式;
安全协议包括 AH 和 ESP,两者可以单独使用或一起使用;
AH 支持 MD5 和 SHA-1 认证算法,不支持加密; ESP 支持两种认证算法(MD5 和 SHA-1)和三种加密算法(DES、3DES 和 AES);
如果要在两个安全网关之间建立 IPSec 隧道,建议将 IPSec 封装模式设置为隧道模式,以便隐藏通信使用的实际源 IP 地址和目的 IP 地址;
第四步、创建安全策略
1)安全策略将要保护的数据流与安全提议进行绑定;
配置 IPSec 安全策略。IPSec 策略中会应用 IPSec 提议中定义的安全协议、认证算法、加密算法和封装模式。每一个 IPSec 安全策略都使用唯一的名称和序号来标识。IPSec 策略可分成两类:手工建立 SA 的策略;IKE 协商建立 SA 的策略;
第五步、应用安全策略
在接口上应用 IPSec 安全策略;
隧道模式,手工配置(Manual)

下面为配置 IPSec VPN 的流程(采用完全手工配置方法):
第 1 步、网络可达

[RTA] ip route-static 0.0.0.0 0.0.0.0 10.1.34.2

第 2 步、选择兴趣流

[RTA] acl number 3001
[RTA-acl-adv-3001] rule 5 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255

第 3 步、创建安全提议(Proposal)

// 包括:封装模式、传输模式(AH/ESP)、加密算法

[RTA][……]

READ MORE

「Huawei-VRP」- 配置 IPSec VPN 服务:IKE;隧道模式;

拓扑信息

1)这里仅演示 RTA 的配置,针对 RTB 设备,其与 RTA 相反;
第 1 步、网络可达

[RTA] ip route-static 10.1.2.0 24 20.1.1.2

第 2 步、选择兴趣流

[RTA] acl number 3001
[RTA-acl-adv-3001] rule 5 permit ip source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.255

第 3 步、配置 IKE 信息

// 配置 IKE Proposal 信息

[RTA] ike proposal 10
[RTA] display ike proposal number 10
——————————————-
IKE Proposal: 10
Authentication method : pre-shared
Authentication algorithm : SHA2-256
Encryption algorithm : AES-CBC-256
DH group : MODP-1024
SA duration : 86400
PRF : PRF-HMAC-SHA2-256
——————————————-

// 配置 IKE Peer 信息

[RTA] ike peer TO_RTB v1
[RTA-ike-peer-TO_RTB] remote-address 10.1.43.5
[RTA-ike-peer-TO_RTB] ike-proposal 10
[RTA-ike-peer-TO_RTB] pre-shared-key cipher Huawei123 # 用于 IKE 认证

在 IKE Peer 中,若使用 IKEv2 协商,仅需修改 ike peer TO_RTB v2 即可;
第 4 步、配置 IPSec 信息

// 配置 IPSec Proposal 信息

[RTA] ipsec proposal tran1
[RTA-ipsec-proposal-tran1] esp authentication-algorithm sha1
[RTA] display ipsec proposal

// 配置 IPSec Policy 信息

[RTA] ipsec poli[……]

READ MORE

「Huawei-VRP」- IPSec, IKEv2, with BGP

问题描述
早期,我们使用 IKEv1 建立 IPSec VPN 连接,并通过 ACL 抓取特定流量,来实现两个网络(公司与云商)的内网互通;
随着网络规模的扩大,现有多个子网需要与云商互通。但是,IKEv1 并不支持多个子网,所以我们尝试切换到 IKEv2 协议;
当我们完全切换 IKEv2 协议后,虽然 IPSec 两端能够协商成功,但是无法实现其他子网互通(或许,是我们配置问题,但是原始的子网互通正常),并且在云商的控制台中,我们看到相关错误提示(其提示:鉴于 IPSec VPN 实现的原因,即使 IKEv2 也会存在部分子网无法互通的问题);
在云商的错误提示中,其建议我们使用路由模式,即 IPSec VPN 抓取感兴趣数据流的另一种方式:路由模式;
该笔记将记录:通过 IKEv2 + 路由模式 + BGP 方式,实现两个内网(公司与云商)互通的方法,以及相关常见问题的解决办法;
解决方案
补充说明
该笔记仅演示公司侧的路由配置,针对云商网络环境设备,其与 RTA 相反;
网络拓扑信息

Local LAN ====> Local Gateway ==(Internet, ISP)==> Cloud Gateway ====> Cloud Server
(192.168.7.0/24) (172.16.0.0/16)

公司网关与云商网关,两者公网直接互通: 1)建立 IPSec 连接,两者中间没有 NAT 设备,公网直连。如果两者间存在 NAT 设备,需要更多配置,该场景不在此次讨论范围内;
第一步、配置两端网络可达
该配置相较简单,具体细节不再赘述:

[RTA] ip route-static …

第二步、配置 IKE 信息

// ——————————————————– // 增加 Proposal 配置

ike proposal 99

// ——————————————————– // 增加 Peer 配置

ike peer albb-cld-infra v2
// remote-address x.x.x.x # 不需要配置远端地址
ike-proposal 99
pre-shared-key cipher Huawei123[……]

READ MORE

「L2TP」- Layer 2 Tunneling Protocol(二层隧道协议)

解决方案
在计算机网络中,L2TP(第二层隧道协议)是种隧道协议,用于支持 VPN 或作为 ISP 提供服务的组成部分。L2TP 允许创建 VPDN,通过使用共享基础设施(可以是“Internet”或“服务提供商的网络”)将远程客户端连接到其公司网络;
IETF 的开放标准 L2TP 协议结合 L2F 和 PPTP 协议的优点,特别适合组建远程接入方式的 VPN,已经成为事实上的工业标准,是 IETF 有关二层隧道协议的工业标准;
L2TP 是 VPDN 隧道协议的一种,它扩展 PPP 的应用,是种在远程办公场景中为出差员工或企业分支远程访问企业内网资源提供接入服务的 VPN;
在 1999 年,作为提议的标准 RFC 2661 发布,L2TP 主要源于用于点对点通信的两种较旧的隧道协议:思科的第二层转发协议(L2F);微软的点对点隧道协议(PPTP);
在 2005 年,该协议的新版本 L2TPv3 出现,作为提议的标准(RFC 3931)。L2TPv3 提供额外的安全功能,改进封装,以及通过 IP Network 携带 Data Link 的能力(例如帧中继、以太网、ATM 等等),而不仅仅是携带点对点协议(PPP);
原理简述

通常在 L2TP Tunnel 内承载 PPP 会话; 通过 UDP 数据报发送整个 L2TP 数据包(包括有效负载和 L2TP 报头); 通过 UDP 传输的一个优点是它避免“TCP 崩溃问题”;
特性说明
传输安全: 但请注意,L2TP 只是一种隧道协议,既不提供加密也不保证隐私,因此一般与 IPsec 配合使用。它本身不提供任何加密或保密,相反,它依赖于它在隧道内传递的加密协议来提供隐私。IPsec 通常用于通过提供机密性、身份验证、完整性,能够用来保护 L2TP 数据包。这两种协议的组合通常称为 L2TP over IPsec(后面将讨论相关内容);
身份认证:L2TP 本身也不提供强身份验证,仅支持隧道认证,而用户身份认证需要内部的 PPP 协议支持; 多种协议:上层能够承载多种协议; 地址分配:也属于 PPP 的特性 网络计费: 高可靠性:这里指 LNS 支持双机热备; 支持 RADISU Server 认证
应用场景
在远程办公场景中,为出差员工或企业分支远程访问企业内网资源提供接入服务;
企业互联
L2TP 被作为常用的企业互联技术之一,使用 L2TP 需要配合 AAA 服务器,当需要构建 L2VPN 时,L2TP 是非常好的选择;
分支站点之间也可以使用 L2TP 链接,但 L2TP 没有办法传递组播数据,无法在总公司和分公司之间传递路由;
远程用户接入
企业出差员工的地理位置经常发生移[……]

READ MORE

「L2TP」- 概念、术语

基本组件
在 L2TP Tunnel 中,两个端点称为: 1)LAC(L2TP Access Concentrator,L2TP 访问集中器); 2)LNS(L2TP Network Server,L2TP 网络服务器)

LNS 等待新的隧道。当建立隧道后,对等体间的网络流量是双向的。为了对网络有用,然后通过 L2TP Tunnel 来运行更高级别的协议。为了促进这一点,在隧道内,为每个更高级别的协议(例如 PPP)建立 L2TP 会话(或称为“call”)。LAC 或 LNS 可以发起会话。每个会话的流量由 L2TP 隔离,因此可以在单个隧道中设置多个虚拟网络。
在实施 L2TP 服务时,应考虑 MTU 的合理配置;
LAC(L2TP Access Concentrator)
LAC 是网络上具有 PPP 和 L2TP 协议处理能力的设备;
LAC 负责和 LNS 建立 L2TP 隧道连接。LAC 可以发起建立多条 L2TP 隧道使数据流之间相互隔离;
在不同的组网环境中,LAC 可以是不同的设备,可以是一台网关设备,也可以是一台终端设备:

User <—(PPPoE)–> LAC <—(L2TP)—> LNS

LNS(L2TP Network Server)
LNS 是 LAC 的对端设备,即 LAC 和 LNS 建立了 L2TP 隧道;LNS 位于企业总部私网与公网边界,通常是企业总部的网关设备;
组网架构

NAS
NAS 网络接入服务器(Network Access Server)主要由 ISP 维护,连接拨号网络,是距离 PPP 终端地理位置最近的接入点。NAS 用于传统的拨号网络中,ISP 在 NAS 上部署 LAC,可为远程拨号用户提供 L2TP 服务,和企业总部建立隧道连接;
LAC
L2TP 访问集中器 LAC 是交换网络上具有 PPP 和 L2TP 协议处理能力的设备。LAC 根据 PPP 报文中所携带的用户名或者域名信息,和 LNS 建立 L2TP 隧道连接,将 PPP 协商延展到 LNS;
在不同的组网环境中,LAC 可以是不同的设备:
NAS-Initiated 场景:在传统的拨号网络中,ISP 在 NAS 上部署 LAC,或在企业分支的以太网络中,为 PPP 终端配备网关设备,网关作为 PPPoE 服务器,同时部署为 LAC;
L2TP Client-Initiated 场景:企业分支在网关设备配置可以主动向 LNS 发起 L2TP 隧道连接请求的 L2TP Client,不需要远端系统拨号触发,L2TP Client 为 LAC;[……]

READ MORE

「L2TP」- 报文格式

AVP(Attribute-Value Pair)
UDP Port 1701
报文封装
仅在 LAC 与 LNS 间的报文才会进行 L2TP 封装;

消息类型
在 LAC 和 LNS 间(即 L2TP Tunnel 内)交换的数据包被分类为: 1)控制包(Control Data):用于 Tunnel 和 Session 的建立、维护、拆除; 2)数据包(Traffic Data):用于封装 PPP 数据帧并在隧道上传输;
控制消息

1)在控制消息的传输过程中,使用消息丢失重传和定时检测隧道连通性等机制来保证控制消息传输的可靠性,支持对控制消息的流量控制和拥塞控制; 2)控制消息承载在 L2TP 控制通道上,控制通道实现控制消息的可靠传输,将控制消息封装在 L2TP 报头内,再经过 IP 网络传输;
数据消息

1)不可靠的传输,不重传丢失的数据报文,不支持对数据消息的流量控制和拥塞控制。可靠性必须由隧道的嵌套协议来提供; 2)数据消息携带 PPP 帧承载在不可靠的数据通道上,对 PPP 帧进行 L2TP 封装,再经过 IP Network 传输;
L2TP Header

Flags and Version Info:指示数据 / 控制分组的控制标志、长度、序列、偏移字段的存在
Length(optional):消息的总长度(以字节为单位),仅在设置 length 标志时出现
Tunnel ID:「控制连接」的「标识符」
Session ID:「隧道内会话」的「标识符」;
Ns (optional):该「数据包」或「控制包」的序列号,从零开始,对于发送的每个消息递增 1(模数 216)。仅在sequence标志设置时出现;
Nr (optional):要接收的预期消息的序列号。Nr 被设置为接收的上一个有序消息的 Ns 加一(模 216)。在「数据包」中,Nr 是保留的,如果存在(如 S 位所示),必须在接收时被忽略,因为 Nr 主要用于「控制包」;
Offset Size (optional):指定「有效负载数据」在「L2TP 标头」之后的位置。如果存在偏移字段,则「L2TP 标头」在偏移填充的最后一个字节之后结束。如果设置了offset标志,则该字段存在;
Offset Pad (optional):可变长度,由偏移大小指定。该字段的内容未定义;
Payload data:可变长度(最大有效负载大小 = UDP 数据包的最大大小(65507)- L2TP 报头的大小)
L2TP Control Data
WIP
在 Host Name AVP 中,能够看到 Tunn[……]

READ MORE

「L2TP」- CLI-Initiated(客户端自主拨号)

原理概述

1)用户需要安装 L2TP 的拔号软件(部分操作系统自带L2TP客户端软件);客户需要知道LNS的IP地址; 2)直接由LAC客户(指可在本地支持L2TP协议的用户)发起。LAC客户可直接向 LNS 发起隧道连接请求,无需再经过一个单独的 LAC 设备。 3)在LNS设备上收到了LAC客户的请求之后,根据用户名、密码进行验证,并且给LAC客户分配私有IP地址。

1)移动办公用户与 LNS 建立 L2TP 隧道; 2)移动办公用户与LNS建立L2TP会话:移动办公用户在第3步会与LNS间建立PPP连接,L2TP会话用来记录和管理它们之间的PPP连接状态。因此,在建立3)PPP连接以前,隧道双方需要为PPP连接预先协商出一个L2TP会话。会话中携带了移动办公用户的LCP协商信息和用户认证信息,LNS对收到的信息认证通过后,通知移动办公用户会话建立成功。L2TP会话连接由会话ID进行标识。 4)移动办公用户与LNS建立PPP连接。移动办公用户通过与LNS建立PPP连接获取LNS分配的企业内网IP地址。 5)移动办公用户发送业务报文访问企业总部服务器。
会话建立过程

数据封装过程

特性特征
1)用户上网的方式和地点没有限制,不需ISP介入。 2)L2TP 隧道两端分别驻留在用户侧和 LNS 侧,一个L2TP隧道承载一个L2TP会话。[……]

READ MORE

「L2TP」- Call LNS(LAC 自主拨号)

应用场景
L2TP 能够企业分支与总部的内网互联,实现分支用户与总部用户的互访,而用户对此无感知。

分支路由器充当 LAC 角色,与 LNS 建立永久的 L2TP 隧道,实现分支与总部网络之间的数据通过 L2TP 隧道互通;
交互过程
涉及 L2TP Tunnel, L2TP Session, PPP Session 三条连接:
报文封装[……]

READ MORE

「L2TP」- NAS-Initiated

对接入用户的认证可由 LAC 侧的代理完成,也可两侧都对接人用户做认证。当所有L2TP用户都下线时,隧道自动拆除以节省资源,直至再有用户接入时,重新建立隧道。
原理简述
1)由远程拨号用户发起,远程系统通过 PSTN/ISDN/PPPoE 拨入(连接)到 LAC 设备, 2)再由 LAC 通过网络向 LNS 发起建立隧道连接请求; 3)接入用户地址由 LNS 分配;

会话建立过程

数据封装过程

特性特征
1)用户必须采用 PPP 的方式接入到互联网,也可以是 PPPoE 等协议; 2)运营商的接入设备(主要是BAS设备)需要开通相应的 VPN 服务。用户需要到运营商处申请该业务。 3)L2TP隧道两端分别驻留在LAC侧和LNS侧,且一个L2TP隧道可以承载多个会话。 5)对远程拨号用户的验证与计费既可由 LAC 侧的代理完成,也可在 LNS 完成。 6)用户与 LNS 建立 PPP Session,网络地址也由 LNS 分配;
应用场景
此组网适用于分支机构用户向总部发起连接,且一般用于分支机构的用户不经常访问企业总部的情况。[……]

READ MORE

「L2TP」- 场景及方案

Why PPTP, L2TP, PPPOE are in OSI Layer2? What can L2TP do for your network?
软件实现:Wikipedia/Layer 2 Tunneling Protocol/Implementations Start-Control-Connection-Request (SCCRQ)
Windows Server 2016配置VPN服务器
关于 TCP Meltdown 问题
Why TCP Over TCP Is A Bad Idea Understanding TCP over TCP: effects of TCP tunneling on end-to-end throughput and latency[……]

READ MORE

「L2TP」- 通过 xl2tpd 搭建 L2TP VPN 隧道

问题描述
xl2tpd 是 L2TP 协议(RFC 2661)的软件实现,该项目从 l2tpd 中 fork 出来,由 Xelerance 公司维护。
该笔记将记录:如何配置 xl2tpd 服务,以实现 VPN 功能,以及常见问题解决方案。
解决方案
其用途是:通过隧道在 IP Network 中发送 PPP 帧。它实现 L2TP Network 的 LAC(作为 L2TP Client 连接 L2TP Server)和 LNS(提供 L2TP VPN 服务)设备。
xl2tpd 通过打开 伪 tty 与 pppd 进行通信来工作。它完全在用户空间运行,但支持内核模式 L2TP。

# pstree -a $(pidof xl2tpd)
xl2tpd
└─pppd passive nodetach 192.168.145.1:192.168.145.2 debug file /etc/ppp/options.xl2tpd.k4nz ipparam 189.34.59.128 /dev/pts/0

# pstree -a $(pidof xl2tpd)
xl2tpd -D -c /run/nm-l2tp-xl2tpd-7f15330c-10a0-4880-927f-3a1f815b397b.conf -C /run/nm-l2tp-xl2tpd-control-7f15330c-10a0-4880-927f-3a1f815b397b -p /run/nm-l2tp-xl2tpd-7f15330c-10a0-4880-927f-3a1f815b397b.pid
└─pppd plugin pppol2tp.so pppol2tp 7 passive nodetach : file /run/nm-l2tp-ppp-options-7f15330c-10a0-4880-927f-3a1f815b397b
└─2*[{pppd}]

package -> pppX -> tty -> xl2tpd -> … -> xl2tpd -> tty -> pppX -> package

服务部署(LNS)
附加说明
这里的 L2TP 仅开启 PPP 认证,而未开启隧道认证,原因是 Network Manager L2TP 无法设置隧道认证密钥(或是我们未找到)。
该部署没有使用 IPSec 进行加密,所以该笔记不涉及 IPSec 相关内容。
环境的原因,我们不能保证配置 100% 成功。在我们第一次配置时,根本不懂 L2TP 协议的工作原理,所以并不清楚各个属性的含义。现在我们对 L2TP 的工作原理有了一定程度的了解,[……]

READ MORE

「xl2tpd」- “混合云”中的数据包路由

问题描述
在建立 xl2tpd 隧道时,会添加一条到对端主机的路由(但非到达某个网络的路由),也就是说我们能够通过 LAC 访问 LNS 主机;
在实际情况中,我们可能会将 L2TP LNS 作为路由器,而希望多个 LAC 间能够相互访问,来构建简单的混合云,即实现各网络互联;

LAN-A <–> Router-A <==== (L2TP-Tunnel) ====> L2TP-LNS
||
||
(L2TP-Tunnel)
||
||
vv
Client-01

当 Client-01 连接 L2TP LNS 后,虽然能得到网络地址,但是由于广播域的隔离,它是无法访问 Router A 下属的 LAN-A
解决方案
#1 开启 LNS 转发
首先,开启 LNS 所在主机的数据包转发(net.ipv4.ip_forward=1),即可实现其路由的功能[1],在中间转发来自各个 LAC 的数据包;
#2 设置 LNS 路由
接下来需要在各个 LNS 主机上设置路由。这一点可以通过 ppp 的脚本实现,当连接成功后,执行脚本添加路由;
在 CentOS 中,修改 /etc/ppp/ip-up.local 文件,加上如下内容:

case “$5” in
# 地址 172.18.104.1 是对端的 IP 地址,及 LNS 的 IP 地址
“172.18.104.1”)
ip route add 172.18.104.0/24 via 172.18.104.1
;;
esac

这个脚本用于添加默认路由,它会被传入六个参数[2],其中$5是对端地址。不要忘记给脚本执行权限
在 Debian 中,会有稍微的不同之处,需要在 /etc/ppp/ip-up.d/ 中创建一个可执行文件,然后追加上述脚本;
有关其他的内容可以参考[……]

READ MORE

「VPN」- L2TP over IPSec

问题描述
企业出差用户和总部通信,使用 L2TP 功能建立 VPN 连接,总部部署为 LNS 对接入的用户进行认证;
当企业对数据和网络的安全性要求较高时,要求出差用户需要向总部传输高机密信息,L2TP 无法为报文传输提供足够的保护;
解决方案
将 L2TP 和 IPSec 功能结合使用(L2TP over IPSec),保护传输的数据,有效避免数据被截取或攻击;

在出差用户的 PC 终端上运行拨号软件,将数据报文先进行 L2TP 封装,再进行 IPSec 封装,发往总部。在总部网关,部署 IPSec 策略,最终还原数据。这种方式 IPSec 功能会对所有源地址为 LAC、目的地址为 LNS 的报文进行保护;
原理简述

L2TP over IPsec,在隧道中,当传输报文时,先用 L2TP 封装报文,再用 IPsec 封装;
在 IPsec 封装过程中,增加的 IP 头即源地址为 IPsec 网关应用 IPsec 安全策略的接口 IP 地址,目的地址即 IPsec 对等体中应用 IPsec 安全策略的接口 IP 地址;
IPsec 需要保护的是从 L2TP 的起点到 L2TP 的终点数据流。在 L2TP 封装过程中,增加的 IP 头即源 IP 地址为 L2TP 起点地址,目的 IP 地址为 L2TP 终点的地址。
在分支接入总部组网中,L2TP 起点地址为 LAC 出接口的 IP 地址,L2TP 终点的地址为 LNS 入接口的 IP 地址;
在出差用户远程接入总部网络的组网中,L2TP over IPsec 的协商顺序和报文封装顺序跟分支接入总部网络的组网中的协商顺序和报文封装顺序是一样的。所不同的是出差用户远程接入总部网络的组网中,用户侧的 L2TP 和 IPsec 封装是在客户端上完成的。L2TP 起点的地址为客户端将要获取的内网地址,此地址可以是 LNS 上配置的 IP 地址池中的任意地址。L2TP 终点地址为 LNS 入接口的地址;
Q:推荐采用传输模式 L2TP over IPsec? A:由于 L2TP 封装时已经增加了一个公网 IP 头,而隧道模式跟传输模式相比又多增加了一个公网 IP 头,导致报文长度更长,更容易导致分片。
关于 L2TP 与 IPSec 关系
首先,我们需要明确 IPSec 与 L2TP 间没有必然关系: 1)没有 IPSec 依旧能够实现 L2TP 隧道; 2)没有 L2TP 依旧能够使用 IPSec 来搭建 VPN 隧道;
在 L2TP over IPSec(L2TP/IPSec)中: 1)IPSec,处于传输模式,仅负责认证及网络层数据加密(除了 IP Address 以外,之上的信息都是加密的[……]

READ MORE

「L2TP over IPSec」- 服务搭建(Libreswan + xl2tpd)

问题描述
搭建 L2TP/IPSec 的 VPN 服务时,在网上找了很多的教程都不是很好用,或多或少都存在问题,后来通过自动化脚本 vpnsetup.sh 完成了配置。
而这篇文章是通过分析 vpnsetup.sh 脚本后整理出来的,作为一个通用的配置教程(因为该脚本只支持 Ubuntu 和 Debian 的某些版本)。
解决方案
# 05/10/2022 该笔记创建于很久很久之前(2016?2017?2018?),当初是能够成功运行的,但是现在看来,这篇文章并没有太大价值。
补充说明
注意,不支持 OpenVZ 容器。不知道为什么,我们并未深入研究。
系统环境
Debian GNU/Linux 8.2 (jessie)
xl2tpd ppp
安装依赖的软件包

apt-get -yq install wget dnsutils openssl iptables iproute2 gawk grep sed net-tools

apt-get -yq install libnss3-dev libnspr4-dev pkg-config \
libpam0g-dev libcap-ng-dev libcap-ng-utils libselinux1-dev \
libcurl4-nss-dev flex bison gcc make libnss3-tools \
libevent-dev ppp xl2tpd

安装Libreswan服务

# Create and change to working dir
mkdir -p /opt/src && cd /opt/src

SWAN_VER=3.22
swan_file=”libreswan-$SWAN_VER.tar.gz”
swan_url1=”https://github.com/libreswan/libreswan/archive/v$SWAN_VER.tar.gz”
wget -t 3 -T 30 -nv -O “$swan_file” “$swan_url1”

/bin/rm -rf “/opt/src/libreswan-$SWAN_VER”
tar xzf “$swan_file” && /bin/rm -f “$swan_file”
cd “libreswan-$SWAN_VER”
[ “$SWAN_VER” = “3.22” ] && sed -i ‘/^#define LSWBUF_CANARY/s/-2$/((char) -2)/’ include/lswlog.h
sed -i ‘/docker-targets\.mk/d'[……]

READ MORE

「CRYPTOGRAPHY」- 密码学(计算机科学领域)

解决方案
整理如下内容的原因是:我们想要了解在密码学中涉及的知识内容。
《密码学基础,以色列,Oded Goldreich》
密码学涉及解决安全问题的计算系统的概念化、定义以及构造。密码系统的设计必须基于坚实的基础。
本书对这一基础问题给出了系统而严格的论述:用已有工具来定义密码系统的目标并解决新的密码问题。 本书集中讨论:计算复杂性(单向函数)、伪数以及零知识证明。 本书的重点在于澄清基本概念并论述解决密码问题的可行性,而不侧重于描述某种具体方法。 本书可作为密码学、应用数学、信息安全等专业的教材,也可作为相关专业人员的参考用书。
第1章 绪论 1 1.1 密码学:概述 1 1.2 概率论基础知识 6 1.3 计算模型 9 1.4 严密处理的目的 15 1.5 其他 第2章 计算复杂性 23 2.1 单向函数:动机(单向函数的意义) 24 2.2 单向函数的定义 25 2.3 弱单向函数隐含强单向函数 2.4 单向函数的多样性 2.5 核心断言(Hard-Core Predicates) 49 2.6 单向函数的有效放大 59 2.7 其他 67 第3章 伪发生器 77 3.1 启发性讨论 78 3.2 计算不可分辨性 79 3.3 伪序列发生器定义 85 3.4 基于单向置换的构造 94 3.5 基于单向函数的构造 103 3.6 伪函数 113 3.7 伪置换 124 3.8 其他 128 第4章 零知识证明系统 140 4.1 零知识证明:动机 141 4.2 交互证明系统 145 4.3 零知识证明:定义 4.4 NP零知识证明 169 4.5 否定结果 187 4.6 证据不可分辨性和隐藏性 192 4.7 知识证明 198 4.8 计算合理性证明(参数) 209 4.9 常数轮零知识证明 217 4.10 非交互零知识证明 225 4.11 多证明者零知识证明 234 4.12 其他 241 附录A 计算数论背景 250 附录B 第2卷摘要 256 参考文献
《密码学导引:原理与应用,德尔夫斯 (Delfs H.) 著 》
第1部分 密码学的基本概念 第1章 引言 3 1.1 加密与保密性 3 1.2 研究密码学的目的 4 1.3 攻击 5 1.4 密码协议 7 1.5 可证明安全 8 第2章 对称密钥加密体制 11 2.1 流密码 12 2.2 分组密码 14 2.2.1 DES 14 2.2.2 运行模式 17 习题 20 第3章 公钥密码学 22 3.1 公钥密码学基本概念 22 3.2 模算术 24 3.2.1 整数 24 3.2.2 整数模n 25 3.3 RSA 29 3.3.1 密钥生成与加密 29 3.3.2 数字签名 32 3.3.3 对RSA的攻击 33 3.3.4 RSA加[……]

READ MORE

「CS/CRYPTOGRAPHY」- 密码散列函数

数据认证的主要目的是确认数据是否被篡改,数据认证主要基于 Hash 算法; 数据通过 Hash 算法计算出一个唯一的 Hash 值,Hash 值携带在数据中转发给对端; 对端设备对数据重新进行 Hash,得出 Hash 值。将收到的 Hash 值与计算出的 Hash 值进行比对,一致说明没有被篡改;

散列算法:把任意长度的输入变换成固定长度的输出,h=H(M)
常见散列算法
1)MD5 (Message Digest Algorithm 5),通过输入任意长度的消息,产生 128bit 的消息摘要; 2)SHA (Secure Hash Algorithm),通过输入长度小于 264bit 的消息,产生 160bit 的消息摘要; 3)SM3 (Senlior Middle 3 )
MD5(信息认证代码)是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。将数据(如汉字)运算为另一固定长度值。其作用是让大量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式。除了可以用于数字签名,还可以用于安全访问认证;
SHA(安全哈希算法)主要适用于数字签名标准里面定义的数字签名算法;
SHA-1:安全散列算法 SHA(Secure Hash Algorithm)是由 NIST 开发的。在 1994 年对原始的 HMAC 功能进行了修订,被称为 SHA-1。SHA-1 在 RFC2404 中描述。SHA-1 产生 160 位的消息摘要。SHA-1 比 MD5 要慢,但是更安全。因为它的签名比较长,具有更强大的防攻破功能,并可以更有效的发现共享的密钥;SHA-1 的摘要长于 MD5,因而是更安全的。但是 SHA1 的计算过程比 MD5 更耗费时间和资源;
SHA-2:SHA-2 是 SHA-1 的加强版本,SHA-2 算法相对于 SHA-1 加密数据长度有所上升,安全性能要远远高于 SHA-1。SHA-2 算法包括 SHA2-256、SHA2-384 和 SHA2-512,密钥长度分别为 256 位、384 位和 512 位;
SM3(国密算法)是国家密码管理局编制的商用算法,用于密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求;
以上几种算法各有特点,MD5 算法的计算速度比 SHA-1 算法快,而 SHA-1 算法的安全强度比 MD5 算法高,SHA-2、SM3 算法相对于 SHA-1 来说,加密数据位数的上升增加了破解的难度,使得安全性能要远远高于 SHA-1;
参考文献
Hash function – Wikipedia[……]

READ MORE

「CS/Cryptography」- 加密与解密(Encryption and Decryption)

问题描述
在 Internet 的传输中,基于 TCP/IP 协议栈封装的数据是明文传输的,这样就会存在很多潜在的危险。比如:密码、银行帐户的信息被窃取、入改,用户的身份被冒充,遭受网络恶意攻击等;
解决方案
在网络中应用加解密技术,可对传输的数据进行保护处理,降低信息泄漏的风险;
发展历程
1)Scytale:将纸张缠到木棒上,木棒为密钥,木棒粗细为密钥内容; 加密作为保障信息安全的一种方式,它不是现代才有的,它产生的历史相当久远,可以追溯到人类刚刚出现,并且尝试去学习如何通信的时候。他们不得不去寻找方法确保他们的通信的机密。但是最先有意识地使用一些技术方法来加密信息的可能是公元前五百年的古希腊人。他们使用的是一根叫 scytale 的棍子,送信人先绕棍子卷一张纸条,然后把要加密的信息写在上面,接着打开纸送给收信人。如果不知道棍子的宽度(这里作为密钥)是不可能解密信里面内容的;
2)凯撒密码:按照字母表,以进行字母转换; 大约在公元前 50 年,古罗马的统治者凯撒发明了一种战争时用于传递加密信息的方法,后来称之为“凯撒密码”。它的原理就是:将 26 个字母按自然顺序排列,并且首尾相连,明文中的每个字母都用其后的第三个字母代替,例如 Symantec 通过加密之后就变成 vBPdqwhf。(f(x)=(x+s)%26)
3)双轨算法:将明文中的奇数位和偶数位分别存放,对明文排序混乱,可实现⽆法直接读取明⽂内容。(双轨加密算法 – 百度文库) 近期加密技术主要应用于军事领域,如美国独立战争、美国内战和两次世界大战。在美国独立战争时期,曾经使用过一种“双轨”密码,就是先将明文写成双轨的形式,然后按行顺序书写;
4)密码机:运用密码对信息实施加(解)密处理和认证的专用设备。(密码机(一种在密钥作用下的装置)_百度百科) 在第一次世界大战中,德国人曾依靠字典编写密码,比如:10-4-2,就是某字典第 10 页,第 4 段的第 2 个单词。在二次世界大战中,最广为人知的编码机器是德国人的 Enigma 三转轮密码机,在二次世界大战中德国人利用它加密信息;
原理简述
加密是利用数学方法将明文(需要被隐项的数据)转换为密文(不可读的数据)从而达到保护数据的目的;

信息密码学 1)加密:明文变密文 2)信息明文 + 密钥 — C=En (K, P) –> 信息密文
特性特征
WIP
密钥管理技术
密钥管理技术 1)密钥产生 2)分配保存 4)更换与销毁
一个完整的密钥管理系统应该做到: 1)密钥难以被窃取和复制 2)即使窃取了密钥也没有用,密钥有使用范围和时间的限制 3)密钥的分配和更换过程对用户透明,用户不一定要亲自掌管密钥 4)核心密钥一定要采[……]

READ MORE

「CS/CRYPTOGRAPHY」- 加密技术分类

数据加密可以避免数据转发时被读取。数据加密一般有两种方案: 对称加密:使用同一个密码加密 / 解密,效率很高,但是对称加密在互相交互密钥时存在密钥被截取的风险; 非对称加密:使用公钥加密,私钥解密,安全性很高但是加解密效率很低;
对称密钥(Symmetric Key)
对称密钥技术:对称密钥加密,又称专用密钥加密,加密、解密用同一个密钥,即发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算;

对称加密算法,也叫传统密码算法(秘密密钥算法、单钥算法),加密密钥能从解密密钥中推算出来。发件人和收件人共同拥有同一个密钥,既用于加密也用于解密。对称密钥加密是加密大量数据的一种行之有效的方法。对称密钥加密有许多种算法,但所有这些算法都有一个共同的目的:以可以还原的方式将明文(未加密的数据)转换为暗文。由于对称密钥加密在加密和解密时使用相同的密钥,所以这种加密过程的安全性取决于是否有未经授权的人获得了对称密钥;

甲与乙事先协商好对称密钥,具体加解密过程如下: 1)甲使用对称密钥对明文加密,并将密文发送给乙; 2)乙接收到密文后,使用对称密钥对密文解密,得到最初的明文;
特别注意
希望使用对称密钥加密通信的双方,在交换加密数据之前必须先安全地交换密钥;
优点缺点
优点是: 1)效率高(加解密速度快),算法简单,系统开销小,适合加密大量数据;
缺点是,实现困难,扩展性差: 1)实现困难原因在于密钥分发问题:当进行安全通信前,需要以安全方式进行密钥交换; 2)扩展性差表现在:每对通信用户之间都需要协商密钥,n 个用户的团体就需要协商 n*(n-1)/2 个不同的密钥;
常见的对称加密算法
对称加密算法根据加密的对象不同,主要包括两类:流加密算法(Stream Algorithm);分组加密算法(Block Algorithm);
流加密算法:在算法过程中,连续输入元素,一次产生一个输出元素。典型的流密码算法一次加密一个字节的明文,密钥输入到一个伪随机字节生成器,产生一个表面随机的字节流,称为密钥流。流加密算法一般用在数据通信信道,浏览器或网络链路上;

常见的流加密算法:RC4 是 Ron Rivest 在 1987 年为 RSA Security 公司设计的流加密算法。它是密钥大小可变的流密码,使用面向字节的操作,就是实时的把信息加密成一个整体。该算法的速度可以达到 DES 加密的 10 倍左右;
分组加密算法:分组加密算法的输入为 明文分组 及密钥,明文被分为两半,这两半数据通过 n 轮处理后组合成密文分组,每轮的输入为上轮的输出;同时子密钥也是由密钥产生。典型分组长度是 64 位

分组算法包括以下几种:
1)数据[……]

READ MORE

「Networking」- Macvlan and IPvlan

TODO ! 网卡类型 ip link type
bridge – Ethernet Bridge device bond – Bonding device dummy – Dummy network interface hsr – High-availability Seamless Redundancy device ifb – Intermediate Functional Block device ipoib – IP over Infiniband device macvlan – Virtual interface base on link layer address (MAC) macvtap – Virtual interface based on link layer address (MAC) and TAP. vcan – Virtual Controller Area Network interface vxcan – Virtual Controller Area Network tunnel interface veth – Virtual ethernet interface vlan – 802.1q tagged virtual LAN interface vxlan – Virtual eXtended LAN ip6tnl – Virtual tunnel interface IPv4|IPv6 over IPv6 ipip – Virtual tunnel interface IPv4 over IPv4 sit – Virtual tunnel interface IPv6 over IPv4 gre – Virtual tunnel interface GRE over IPv4 gretap – Virtual L2 tunnel interface GRE over IPv4 erspan – Encapsulated Remote SPAN over GRE and IPv4 ip6gre – Virtual tunnel interface GRE over IPv6 ip6gretap – Virtual L2 tunnel interface GRE over IPv6 ip6erspan – Encapsulated Remote SPAN over GRE and IPv6 vti – Virtual tunnel interface nlmon – Netlink monitoring device ipvlan – Interface for L3 (IPv6/IPv4) based VLANs ipvtap – Interface for L3 (IPv6/IPv4) based VL[……]

READ MORE

「conntrack-tools」

针对于系统管理员的用户空间的命令行程序。允许管理员查看和管理在内核中的连接追踪状态表(the in-kernel connection tracking state table),允许管理员与访问和操作连接追踪系统(Connection Tracking System),连接追踪系统为iptables提供了有状态的数据包检查。
该工具是用户空间的守护进程conntrackd和命令行界面conntrack: 1)用户空间守护进程conntrackd可用于启用基于群集的状态防火墙的高可用性并收集有状态防火墙使用的统计信息(尽管ulogd是日志记录的首选选项)。 2)命令行界面conntrack提供比传统的/proc/net/nf_conntrack更灵活的交互。
安装命令
从仓库中安装

# Kali GNU/Linux Rolling
apt-get install conntrack conntrackd

安装程序文件
conntrack:命令行程序,用于查看和管理连接状态。 conntrackd:守护进程。
参考文献
主页:http://conntrack-tools.netfilter.org dpkg -L conntrack, dpkg -L conntrackd[……]

READ MORE

「Linux」- TMP

自旋锁
在多处理器环境下,用于保护数据。
自旋锁锁住的进程一直旋转,而不是睡眠,因此能够用在中断等禁止睡眠的场景。
示例代码:

spin_lock(shost->host_lock);
shost->host_busy++;
spin_unlock(shost->host_lock);

信号量
类似于自旋锁,也是保护数据。
但是,如果无法获取信号量时,进程将进入睡眠状态 ⇒ 所以不能在中断中使用。
原子变量
原子变量提供 原子的、不可中断的 操作。如下所示:

atomic_t mapped

内核还提供系列源自变量操作函数:

atomic_add()
atomic_sub()
atomic_set()
atomic_read()[……]

READ MORE

「Linux」- 设备驱动(Device Drivers)

找到磁盘与ATA的对应关系

#!/bin/sh

ll /sys/class/ata_port/
ll /dev/disk/by-path

[WIP] Asking for cache data failed
What is a “Asking for cache data failed” warning?

[913914.442594] sd 7:0:0:0: [sdd] Asking for cache data failed
[913914.442597] sd 7:0:0:0: [sdd] Assuming drive cache: write through[……]

READ MORE