「LINUX-SERVER-ADMINISTRATION」- Linux | 操作系统维护

该部分章节包含如下内容(更多的是应用层的配置):
1)系统日志:Log Management
2)数据备份:Backup and Recovery
3)账户管理:Managing user accounts
4)服务管理:Systemd Services Start and Stop
桌面环境:在我们的日常运维工作中,其也包含桌面环境的管理,所以相关内容也将归类到该部分中;
排除部分
❌️ 硬件内容:并不涉及「硬件属性」相关的知识,也不会涉及「硬件控制」方面的内容。该部分的内容更偏向于「软件层面」的配置

比如,磁盘分区相关的内容属于该部分,但是磁盘组成、性能、品牌、特性等等内容不属于该部分;

比如,网卡网络、修改 MAC 地址等内容属于该部分,但是网卡的型号、带宽、无线网卡的频段、特征等等内容并不属于该部分;

比如,我们在特定硬件上安装操作系统,并进行特定硬件相关的操作系统配置,则相关笔记不会记录到该部分;

❌️ 系统原理:该部分的内容更偏向于「软件层面」,倾向于“操作系统的某些配置(应用层)”,但是不会涉及原理;
❌️ 服务配置:该部分不包含 HTTP、FTP、NFS、DNS 等等与网络服务相关的内容。它们都属于服务部署与服务管理,因此没有归类到操作系统维护中;
❌️ 存储技术:该部分不包含 LVM、RAID 等与存储有关的内容。这些内容都是某种问题的解决方案,不属于操作系统维护的必备内容;
当然也会包含一些系统相关的东西,这些东西可能与操作系统维护关系不是特别大;
可用文档
在 Linux 中,除了 Man 手册和 Info 手册以外,在/usr/share/doc/中还存放了一些其他的文档。要么就是官方、论坛、社区了。
与 Linux 有关的社区及论坛
Linux 公社
相关链接
强烈安利,Awesome Sysadmin,这群里一个大佬分享的,这里面列出了精选的开源系统管理资源。如果你遇到了什么问题,或者需要某些问题的解决方案,那你完全可以参考这个列表中的资源。
GitHub – konduruvijaykumar/LINUX-GUIDE: composed of different files on Linux flavours like Redhat, Centos, Fedora, Kali , Ubuntu etc for clear view and practise of different linux
Linux and the GNU System
Debian
Debian/latest newsDebian/support
参考文献
Linux System Administration BasicsThe Linux S[……]

READ MORE

「WINDOWS-11」- 桌面环境 | 常用系统设置

修改 Microsoft Store 语言
Change your country or region in Microsoft Store – Microsoft Support
Change your region in Windows
When you make your first purchase in the new locale, you’ll be prompted to update your billing info.
(1) Select Start > Settings > Time & Language > Language & Region.
(2) Under Country or region, select your new region.
(3) You can switch back to your original region at any time.
查看软件版本
Troubleshooting the Phone Link app – Microsoft Support
Settings > Apps > Installed apps > <YOUR-APPLICATION> > … > Advanced options
连接手机与电脑 | Phone Link
How to Fix Phone Link for iOS Not Working in Windows 11Previewing Phone Link for iPhone users on Windows 11 with Windows Insiders | Windows Insider BlogSharing Bluetooth devices with a virtual machine (2005315)Getting started with the Windows Insider Program
通过 Phone Link 程序,能够将手机连接到电脑,在电脑上查看短信、拨号等等。早期(Windows 10),仅能支持部分 Android 手机。在 Windows 11 中,Phone Link 支持 iPhone 手机,所以我们决定进行尝试,实现在 Windows 11 中查看 iMessage 消息。
环境要求:
1)A PC running Windows 10 (with the May 2019 Update or later) or Windows 11.
2)An Android device runningAndroid 7.0 (Nougat) or later.
3)Your ph[……]

READ MORE

「BGP」- BGP SR Policy NLRI

SR Policy 的 NLRI 在 BGP Update 消息中携带。在 BGP 路由表呈现为[distinguisher][policycolor][endpoint]。
NLRI 格式

NLRI Length(1 byte)
该字段为 NLRI 的长度。

Distinguisher(4 byte)
该字段为 policy 在元组中的唯一标示。

Policy Color(4 byte)
该字段为 color 标示。

Endpoint(4 or 16 byte)
该字段为 policy 的尾端。

[PE1]display bgp sr-policy routing-table

RPKI validation codes: V – valid, I – invalid, N – not-found

Total Number of Routes: 3
Network Nexthop MED LocPrf PrefVal Path/Ogn

*>i [22][5][1.0.0.12] 172.21.17.102 4294967286 100 0 ?
*>i [26][3][1.0.0.12] 172.21.17.102 4294967286 100 0 ?
*>i [27][3][1.0.0.12] 172.21.17.102 4294967286 100 0 ?
|<——+——>|
|
+—–+
|
|
[distinguisher][policycolor][endpoint][……]

READ MORE

「Kubernetes」- 部署 cert-manager 组件 | v1.15

我们使用 Certbot 工具向 Let’s Encrypt 免费申请并自动续期证书。在 Kubernetes Cluster 中,我们使用 cert-manager 组件来实现;
该笔记将记录:在 Kubernetes Cluster 中,部署 cert-manager 组件,并用其来申请证书的方法,以及相关问题处理;
环境信息
Kuberntes Cluster v1.21
kubectl 1.20.15
cert-manager v1.8.2
解决方案
参考 cert-manager/Installation 文档,官方提供多种安装方法:
1)官方建议 cmctl 插件来安装,但是我们采用 HELM + CRD 的方式进行部署;
参考 Supported Releases 文档,查看不同版本对集群的支持情况:
1)cert-manger 1.8,该版本支持 Kuberntes Cluster v1.21 集群
第一步、安装 cert-manager 组件
服务部署

helm repo add jetstack https://charts.jetstack.io
helm repo update

helm pull jetstack/cert-manager –version x.x.x

helm show values ./cert-manager-x.x.x.tgz > cert-manager-x.x.x.helm-values.yaml
# crds.enabled: true

helm upgrade –install –namespace cert-manager –create-namespace \
cert-manager ./cert-manager-v1.15.2.tgz -f cert-manager-v1.15.2.tgz.helm-values.yaml

颁证测试
检查服务运行正常(该部分演示手动测试的方法):
1)创建 Issuer 资源;
2)创建 Certificate 资源;
演示创建自签证书的步骤:

# cat <<EOF > test-resources.yaml
apiVersion: v1
kind: Namespace
metadata:
name: cert-manager-test

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: test-selfsigned
namespace: cert-manager-test
spec:
selfSigned: {}

apiVersio[……]

READ MORE

「cloud-init」- 网络配置(NoCloud)

问题描述
网络无法在 user-data 中直接配置。
该笔记将记录:在 cloud-init 中,配置网络的方法。
解决方案
方案一、官方方法

cat > user-data <<EOF
#cloud-config

EOF

cat > network-config-v2.yaml <<EOF
version: 2
renderer: networkd
ethernets:
enp1s0:
addresses:
– 172.31.253.50/24
gateway4: 172.31.253.1
nameservers:
addresses: [223.6.6.6, 223.5.5.5]
EOF

cloud-localds -v –network-config=network-config-v2.yaml user-data.iso user-data

方案二、变通方法
通过 write_files 与 runcmd 结合:
1)kvm virtualization – how to add network configuration to cloud init image to run a kvm image – Server Fault
补充说明
通过挂载,我们能看到其中的组织方式:

# mount user-data.iso /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.

# ls /mnt/
. .. meta-data network-config user-data

# cat /mnt/network-config
version: 2
renderer: networkd
ethernets:
enp1s0:
addresses:
– 172.31.253.50/24
gateway4: 172.31.253.1
nameservers:
addresses: [223.6.6.6, 223.5.5.5]

常见问题
Top level network key in network-config but missing ‘config’ or ‘version’
Bug #1906187 “Version tag is not respected when put last” : Bugs : netplan.io package : Ubuntucloud-init/DataSourceNoCloud.py at main · ca[……]

READ MORE

「cloud-init」- 常见问题处理

普通镜像 ⇒ 通过 cloud-init 配置
CentOS
针对 CentOS 7.7 版本,我们未找到与之对应的 Cloud Image 镜像。当前已存在很多制作 Cloud Image 的方法,我们决定参考这些文章进行 Cloud Image 的制作;
但是,我们的根本需求并非制作 Cloud Image 镜像,而是克隆虚拟机模板并快速完成初始化配置。我们不希望像以往那样:克隆模板,并登录虚拟机,再进行配置;
所以,这是我们的解决方法:
1)像往常一样,安装 CentOS 7.7 发行版。该系统以后将作为模板,所以可选地安装服务和工具;
2)然后,登录该主机,安装 cloud-init 服务:yum install -y cloud-*
在后续的使用中,我们仅需要克隆该虚拟机,并修改数据源的配置即可。当主机启动时,将由 cloud-init 自动加载数据源的配置;
Ubuntu
Installing and configuring cloud-init on Ubuntu – IBM Documentation
apt-get install cloud-init
systemctl enable cloud-init-local.service
systemctl enable cloud-init.service
systemctl enable cloud-config.service
systemctl enable cloud-final.service
cloud-init clean –logs
reboot
关闭自动升级功能
server – Disable auto update at end of autoinstall/cloud-init – Ask Ubuntu20.04 – how to disable unattended-upgrades during autoinstall (user-data, cloud-config) – Ask Ubuntu
重新执行 Cloud Init 初始化
openstack – How to re-run cloud-init without reboot – Stack Overflow
cloud-init clean –logs # 建议,当执行该命令后,重启主机。
执行如下命令来手动初始化并非最佳实践

cloud-init init –local

cloud-init init

cloud-init modules –mode=config

cloud-init modules –mode=final[……]

READ MORE

「kubectl」- 安装命令

版本选择
根据官网文档,“kubelet 命令的次版本号”与“集群的次版本号”最大仅能差一。比如 kubectl v1.2 能够正常操作版本 Kubernetes v1.1、v1.2、v1.3 的集群,以防止出现某些意料之外的情况;
服务安装
Install Tools/kubectl | https://kubernetes.io/docs/tasks/tools/#kubectl
第一步、安装 kubectl 命令
Install and Set Up kubectl
在部署时安装
注意事项,通常在集群部署时我们会完成 kubectl 命令的安装,因此很少独立安装。除非需要应对某些场景,比如远程管理集群;
通过仓库安装
但是它是 GOOGLE 源无法访问,我们使用阿里云镜像仓库:

# —————————————————————————– # Debian/Ubuntu

# 尽管下载 apt-key.gpg 存在困难,但是应该尽量从官方站点下载(请勿随意使用第三方密钥)
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add –
apt-key adv –keyserver keyserver.ubuntu.com –recv-keys FEEA9169307EA071 8B57C5C2836F4BEB B53DC80D13EDEF05

cat > /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

apt-get update && apt-cache madison kubectl

apt-get install kubectl=1.22.15-00

# —————————————————————————– # CentOS 7.4

cat > /etc/yum.repos.d/kubernetes-ali.repo <<EOF
[kubernetes-ali]
name=Kubernetes ALi
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1[……]

READ MORE

「Kubernetes」- 部署测试集群(kubeadm、单节点、集群、测试)

该笔记将记录:在 Ubuntu 20.04.4 LTS 中,如何搭建 Kubernetes 1.20.15 集群(供测试使用),以及相关问题处理;
环境配置(每个节点上都要执行)
安装 Docker 环境:Installing Docker on Ubuntu
修改 Docker 配置:

cat > /etc/docker/daemon.json <<EOF
{
“live-restore”: true,
“exec-opts”: [“native.cgroupdriver=systemd”],
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”
}
EOF

systemctl start docker
systemctl enable docker
systemctl reload docker
systemctl restart docker

安装程序:

# 首先,安装依赖工具
apt-get update \
&& apt-get install -y apt-transport-https ca-certificates curl

# 然后,导入仓库密钥
# 尽管下载 apt-key.gpg 存在困难,但是应该尽量从官方站点下载(请勿随意使用第三方密钥)
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add –
apt-key adv –keyserver keyserver.ubuntu.com –recv-keys FEEA9169307EA071 8B57C5C2836F4BEB B53DC80D13EDEF05

cat > /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

apt-get update

# 最后,安装工具
apt-get install -y kubelet=1.22.17-00 kubeadm=1.22.17-00 kubectl=1.22.17-00
apt-mark hold kubelet kubeadm kubectl # 禁止更新

集群初始化(在主节点上初始化集群)

# 初始化 Master 节点
# 该命令最终会输出一条指令,需要在各个节点上执行[……]

READ MORE

「SEGMENT-ROUTING」- SR MPLS TE Policy | SR MPLS Policy

认识
问题描述
早期的 SR-MPLS TE 沿用 RSVP-TE 的“隧道接口”概念,通过隧道接口实现 SR 技术;

[R1] interface tunnel1
[R1-Tunnel1] ip address unnumbered interface LoopBack0
[R1-Tunnel1] tunnel-protocol mpls te
[R1-Tunnel1] destination 3.3.3.3
[R1-Tunnel1] mpls te tunnel-id 1
[R1-Tunnel1] mpls te signal-protocol segment-routing

隧道接口方式实现 SR 简单且易于理解,但有以下不足:

隧道接口和流量导入独立实现,造成引流方式复杂和性能不高;
隧道需要预先配置部署,在无法明确隧道终点场景下有明显限制;
基于隧道接口实现的 ECMP 使用场景受限;

解决方案
SR-MPLS TE Policy,简称 SR-MPLS Policy,是当前最主流的实现 SR-MPLS 的方式之一;
基于 MPLS 和 IPv6 两种转发技术,SR Policy 可分为 SR MPLS Policy 和 SRv6 Policy 两种,我们主要学习 SR MPLS Policy 技术;
组成
控制平面
控制器基于代表业务 SLA 的 Color 属性计算路径,并将结果下发转发器构成 SR-MPLS Policy 隧道。
网络头端结点,将通过业务路由的 Color 团体属性和下一跳信息匹配到对应的 SR-MPLS Policy 隧道进行业务转发;
如图所示,转发器上隧道信息不同于 SR-TE 隧道:

<PE1> display tunnel-info all
Tunnel ID Type Destination Status
—————————————————————————————-
0x0000000001004c4c04 ldp 1.0.0.12 UP
0x000000002900000004 srbe-lsp 1.0.0.12 UP
0x000000000300002001 sr-te 1.0.0.12[……]

READ MORE

「cert-manager」- 常见问题处理

[Sol.] … is forbidden … cannot create resource “alidns” in API group … at the cluster scope
问题描述:

alidns.acme.example.com is forbidden: User “system:serviceaccount:cert-manager:cert-manager”
cannot create resource “alidns” in API group “acme.example.com” at the cluster scope

原因分析:./03-letsencrypt-clusterissuer.yaml 的 groupName: 未与 ./01-bundle.yaml 的 group: 要保持一致
解决方案:保持 groupName: 与 group: 一致。
[Sol.] Error presenting challenge: the server could not find the requested resource
Error presenting challenge: the server could not find the requested resource (post dnspod.acme.XXX.com) · Issue #1
问题描述:

# kubectl describe challenges.acme.cert-manager.io

Events:
Type Reason Age From Message
—- —— —- —- ——-
Normal Started 31s cert-manager Challenge scheduled for processing
Warning PresentError 4s (x4 over 29s) cert-manager Error presenting challenge: the server could not find the requested resource

环境信息:
kubernetes v1.22.10-aliyun.1 / cert-manager 1.5.3
解决方案:
当 cert-manager 1.5.3 升级 cert-manager 1.7.3 后,问题得以解决;
[WIP] … failed to perform s[……]

READ MORE

「HUAWEI-DATACOM-CERTIFICATION」- 考试

HCIE-Datacom V1.0 考试覆盖数据通信领域路由交换高阶技术、企业网络架构全景、园区网络典型架构与技术、华为 CloudCampus 解决方案设计与部署、广域互联网络典型架构与技术、华为 SD-WAN 解决方案设计与部署、广域承载网络典型架构与技术、华为 CloudWAN 解决方案设计与部署、网络自动化技术与实践等知识技能;
笔试考试
考试说明
考试科目 HCIE-Datacom(笔试)
考试代码 H12-891
考试语言中 / 英
试题类型判断题、单选题、多选题、填空题、拖拽题
考试费用 300 USD
考试时长 90 min
通过分数 / 总分 600/1000
考试内容
知识模块笔试占比
高级路由交换技术 7%
园区网络规划与部署 23%
广域互联网络规划与部署 8%
广域承载网络规划与部署 15%
网络自动化 17%
时间分配
笔试考试时间充裕
备考流程

或,根据培训机构的安排来准备考试即可,其通常会提供常考知识点及联系试题。提供的题库覆盖面广且针对性强,通过前期的基础学习,大部分题目都能够迎刃而解。经过半个月的学习,顺利地完成了题库中的所有内容,也能为后续的实验考试打下了良好的理论基础。
或,根据教材的描述,来准备考试即可。

实验考试
考试说明
考试科目 HCIE-Datacom(实验)
考试代码 H12-892
考试语言中 / 英
试题类型操作题、论述题
考试费用 8000CNY
考试时长 480 min(8h)
通过分数 / 总分 80/100
考试内容
知识模块实验占比
高级路由交换技术 40%
园区网络规划与部署 20%
广域互联网络规划与部署 5%
广域承载网络规划与部署 25%
网络自动化 10%
传统园区改造升级-总分 40 分
a)可靠性;b)基础配置 VLAN、IP 等;c)网络隔离;d)WLAN 配置;e)出口安全配置;f)论述;
云管园区 Campus 及 SDWAN-总分 25 分
a)出口设备开局;b)内网设备纳管自动化配置;c)内网 Fabric 自动化配置一网多用;d)业务随行准入控制;e)SD WAN overlay 组网;f)论述;
广域承载网络-总分 25 分
a)IGP 配置;特性配置;b)MPLS 配置、特性配置;c)MPLS VPN 配置论述;
编程自动化-总分 10 分

通过 python 编程脚本实现设备各个状态监测;

时间分配

Part 1, 1.5h
Part 2, 2h (企业网络)
Part 3, 40min-1h
Part 4, 30m[……]

READ MORE

「SYSLINUX」

问题描述
SYSLINUX 项目是一套五种不同的引导加载程序,用于在计算机上启动 Linux 发行版,它主要由 H. Peter Anvin 开发。
该笔记将记录:与 SYSLINUX 有关的内容,以及相关问题的处理方法。
解决方案
SYSLINUX
通常用于引导或救援软盘,Live USB或者其他轻量级的引导系统。
ISOLINUX
通常用于Live CD或者可引导的安装CD,用于从CD-ROM ISO 9660文件系统中引导。
这一点可以通过挂载Ubuntu安装镜像(mount -o loop ./ubuntu-18.04-desktop-amd64.iso ./ubuntu/)进行查看。
参考文献
Wikipedia/SYSLINUX[……]

READ MORE

「HUAWEI-ENSP」- 实验学习:L3VPN over SR MPLS BE | 跨域

实验拓扑

该拓扑底层网络配置已完成;
且,域内已通过 OSPF 互通(仅宣告必要端口);
且,域内已部署 SR MPLS BE 环境;

实验需求

实现 PC1 与 PC2 互通;

实验过程
配置思路:

通过 BGP Labeled Unicast 技术,实现两端 PE 设备互通;
在 PE 设备互通的基础上,部署 VPNv4 技术来进行路由通告;

配置过程

# —————————————————————————– # BGP Labeled Unicast

# ————————————————- # CX1 and CX3

[CX1]bgp 100
[CX1-bgp]peer 3.3.3.3 as-number 100
[CX1-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[CX1-bgp]ipv4-family labeled-unicast
[CX1-bgp-af-ipv4-labeled]peer 3.3.3.3 enable

[CX3]bgp 100
[CX3-bgp]peer 1.1.1.1 as-number 100
[CX3-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[CX3-bgp]ipv4-family labeled-unicast
[CX3-bgp-af-ipv4-labeled]peer 1.1.1.1 enable

# ————————————————- # CX4 and CX6

[CX4]bgp 200
[CX4-bgp]peer 6.6.6.6 as-number 200
[CX4-bgp]peer 6.6.6.6 connect-interface LoopBack 0
[CX4-bgp]ipv4-family labeled-unicast
[CX4-bgp-af-ipv4-labeled]peer 6.6.6.6 enable

[CX6]bgp 200
[CX6-bgp]peer 4.4.4.4 as-number 200
[CX6-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[CX6-bgp]ipv4-family labeled-unicast
[CX6-bgp-af-ipv4-labeled]peer 4.4.4.4 enable[……]

READ MORE

「Groovy」- 常用 MAP 操作

该笔记将记录:在 Apache Groovy 中,常用 Map 操作,以及相关问题处理。
基础操作(增删改查)
增 | 创建 Map 类型

def ept = [:]

def map = [name: “Jerry”, age: 42, city: “New York”]

// 使用变量作为 Key

def varA = “abc”
def varB = “xyz”
def map = [(varA):1, (varB):2]

改 | 修改 Map 内容
向 Map 中添加元素

map[‘key’] = “value”
map.key = “value”
map.’key’ = “value”

map.put(‘john’, 41)

// 合并两个 Map 对象
assert [ a: true, b: false ] + [ a: false ] == [ a: false, b: false ]
assert [ a: false ] + [ a: true, b: false ]== [ a: true, b: false ]
assert [ a: true, b: false ] << [ a: false ] == [ a: false, b: false ] // 该写法更直观

删除
删除元素

map.remove(‘key-name’)

查询 | get, find, findAll, …
从 Map 中获取元素
https://blog.mrhaki.com/2009/11/groovy-goodness-get-value-from-map-or.html

map[‘key’]
map.key
map.’key’

// 推荐 get() 方法:当 key 不存在时不会返回错误,还能够指定默认值
map.get(‘key’)
map.get(‘key’, ”) // 指定默认值

遍历 | each
Loop through Map in Groovy?

def map = [
‘iPhone’:’iWebOS’,
‘Android’:’2.3.3′,
‘Nokia’:’Symbian’,
‘Windows’:’WM8′
]

for ( e in map ) {
print “key = ${e.key}, value = ${e.value}”
}

map.each{ k, v -> println “${k}:${v}” }

提取 | keySet(), values(), …
Get key in groovy maps – Stack Overflow[……]

READ MORE

「SR-MPLS-TE」- 原理 | 集中式架构 | 通过控制器管理

在 SR-MPLS TE 隧道创建之前,需要在各转发器之间建立 IS-IS/OSPF 邻居关系,实现网络层互通,完成标签的分配以及网络拓扑信息的收集,并将标签和网络拓扑信息上送给控制器,供控制器进行路径计算。
SR 标签由 IGP 协议发布。控制器使用 BGP-LS 收集网络拓扑、网络带宽、时延、标签等属性;
根据约束条件,控制器计算出符合业务需求的转发路径,然后将算路结果通过 PCEP 或 NETCONF 下发到转发器。也可由工程师手工配置严格转发路径,然后通过 PCEP 将路径托管到控制器。

标签分配

SR-MPLS TE 方案中,由转发器的 IGP 协议分配标签,并通过 BGP-LS 将分配的标签上报给控制器:

SR-MPLS TE 主要使用邻接标签,也可以使用节点标签;
邻接标签是源节点分配的,只在本地有效,并且具有一定的方向性;

标签分配过程示例

在设备上分别使能 IGP SR 能力。对于使能了 SR 能力的 IGP 实例,会对所有使能 IGP 协议的出接口分配 SR 邻接标签;
邻接标签通过 IGP 的 SR 协议扩展,泛洪到整个网络中。以 R4 为例,IGP 分配标签的具体过程如下:

R4 的 IGP 协议为其邻接分配本地动态标签。例如为邻接 R4->R5 分配的邻接标签为 1045;
R4 的 IGP 协议发布邻接标签,泛洪到整个网络;
R4 上生成邻接标签对应的标签转发表;
网络中的其它设备的 IGP 协议学习到 R4 发布的邻接标签,但是不生成标签转发表;

其他设备按照 R4 的方式分配和发布邻接标签,生成标签转发表。BGP-LS 将带有 SR 标签信息的网络拓扑和 TE 信息上报给控制器;
拓扑收集
通过 IGP 协议收集网络拓扑信息

转发器的 IGP 协议收集网络拓扑信息,收集 SR 的邻接标签和节点标签;
对于使能了 SR 能力的 IGP,会为所有使能 IGP 协议的出接口分配 SR 邻接标签。邻接标签通过 IGP 泛洪到整个网络中。
通过 BGP-LS 上报网络拓扑信息

BGP-LS 将带有 SR 标签信息的网络拓扑和 TE 信息上报给控制器;
在华为早期的解决方案中,也可以使用 IGP 收集网络拓扑。由于 IGP 具有域的限制,当前主要采用 BGP-LS;
隧道创建
SR-MPLS TE(Segment Routing-MPLS Traffic Engineering)是指基于 TE 的约束属性,利用 SR 创建的隧道;
如图所示,两条 LSP 分别作为主路径和备份路径。两条 LSP 隧道都对应同个隧道 ID 的 SR-MPLS TE 隧道;

SR-MPLS TE 隧道创建包括:隧道属性配置;隧道建立过程;
隧道[……]

READ MORE

「OSPF」- 报文格式

IP.PROTOCOL=89
报文格式

OSPF Header
Version number:OSPF v2 for IPv4:2;OSPF v3 for IPv6;Router ID:表示生成此报文的路由器的 Router ID;Area ID:表示此报文需要被通告到的区域;Type:类型字段。即 Data 部分的类型,即不同的 OSPF 报文类型;Packet length:表示整个OSPF报文的长度,单位是字节;Checksum:校验字段,其校验的范围是整个 OSPF 报文,包括 OSPF 报文头部;Auth Type:0,表示不认证;1,表示简单的明文密码认证;2,表示加密(MD5)认证;Authentication:认证所需的信息。该字段的内容随AuType的值不同而不同;
OSPF Payload
LSR, Link State Request

解释:OSPF_Header.Type = 3,向对方请求所需要的 LSA 数据(只有当 DD 报文交换成功后,才会向双方发送 LSR 报文)

LSAck, Link State Acknowledgment

解释:OSPF_Header.Type = 5,确认已经收到对方的 LSA 报文。

报文示例
IP.OSPFHeader.Type == 1 | Hello

Frame 125: 82 bytes on wire (656 bits), 82 bytes captured (656 bits) on interface -, id 0
Ethernet II, Src: 38:39:cc:02:01:00 (38:39:cc:02:01:00), Dst: IPv4mcast_05 (01:00:5e:00:00:05)
Internet Protocol Version 4, Src: 10.0.12.2, Dst: 224.0.0.5
Open Shortest Path First
OSPF Header
Version: 2
Message Type: Hello Packet (1)
Packet Length: 48
Source OSPF Router: 2.2.2.2
Area ID: 0.0.0.0 (Backbone)
Checksum: 0xca91 [correct]
Auth Type: Null (0)
Auth Data (none): 0000000000000000
OSPF Hello Packet
Network Mask: 255.255.25[……]

READ MORE

「ZIM」- 概念 | 术语 | Terms | Fundamentals | 模块交互

问题描述
在学习及工作中,我们通过 Zim 记录笔记、梳理知识,我们对 Zim 的依赖性比较强。在使用的过程中,我们也发现部分问题(Bug),我们也像社区提交 Issus 来反馈问题;
但是,Zim 终究是个开源项目,贡献者们都有自己的工作,大家维护项目的精力也是有限的。所以,为了能尽早的解决问题,我们决定参与到该项目中,来修复使用过程中遇到的问题;
该笔记将记录:我们研究 Zim 项目源码的过程(学习方法、架构设计、问题排查、调试技巧),并尝试解决相关使用问题(以获得更好的使用体验,这也是我们参与项目的动力);
解决方案
1)学习 Python 编程:该项目由 Python 语言开发,所以需要学会使用 Python 语言编程;
2)学习 Python 项目调试方法:

Address already in use / Listener did not start
问题描述

INFO: This is zim 0.65
WARNING: Could not find all icon sizes for the application icon
Exception in thread Thread-1:
Traceback (most recent call last):
File “/usr/lib/python2.7/threading.py”, line 801, in __bootstrap_inner
self.run()
……
File “/usr/lib/python2.7/socket.py”, line 228, in meth
return getattr(self._sock,name)(*args)
error: [Errno 98] Address already in use
大学英语(一) pdf
ERROR: Exception in main()
Traceback (most recent call last):
File “/usr/local/lib/python2.7/dist-packages/zim/main/init.py”, line 741, in main
ZIM_APPLICATION.run(*argv[1:])
……
File “/usr/local/lib/python2.7/dist-packages/zim/main/ipc.py”, line 97, in start_listening
raise AssertionError, ‘Listener did not start’
AssertionError: Listener did not start

问题原因
强制结束 Zim 进程;
解决方法
删除[……]

READ MORE

「ZIM-DESKTOP-WIKI」- Code Block

相关依赖
ValueError: Namespace GtkSource not available for version 3.0 #368
apt-get install libgtksourceview-*
语言选择
Text view freeze with a page including a sourceview objectCode Block using Syntax Default crash Zim
WIP Zim, 代码块,选择 Defaults 语言,崩溃问题
https://github.com/zim-desktop-wiki/zim-desktop-wiki/issues/1921https://github.com/zim-desktop-wiki/zim-desktop-wiki/issues/451

<?xml version=”1.0″ encoding=”UTF-8″?>

<language id=”text” _name=”plaintext” version=”2.0″ _section=”Other”>
<metadata>
<property name=”mimetypes”>text/plain</property>
<property name=”globs”>*.txt</property>
</metadata>

<definitions>
</definitions>
</language>

share/gtksourceview-3.0/language-specs
快速插入
通过 Insert Code Block 方式,来插入代码块是比较麻烦的,我们希望能够快速插入代码块
# 11/07/2023 (1)通过快捷键,直接插入代码块;(2)且允许设置默认格式,并根据需求进行调整;
修改字体
在 Code Block 中,默认为 Monospace 字体。如果要修改,可以使用系统中 Fontcofig 中来配置 Monospace 字体;
# 10/27/2017 目前,貌似没有提供直接配置字体的方法;[……]

READ MORE

「VPN」- SRv6 Policy:Native IPv6 Over SRv6 Policy

普通 IPv6 数据也能被 SRv6 承载;
注,该拓扑并非 L3VPN 拓扑,仅是通过 SRv6 Policy 转发 IPv6 报文,而 SRv6 Policy 负责选路(TE)。

路由传递流程
PE 配置 SRv6 和 SRv6 VPN,中间节点设备需要支持 IPv6 或 SRv6;
PE2 发布 SRv6 Locator 路由给 PE1;
CE 到 PE 的路由信息交换:CE2 把本站点的路由发布给 PE2。CE 与 PE 之间可以使用静态路由、RIP、OSPFv3、IS-IS 或 BGP;
PE 之间路由发布:在设备 PE2 上配置 BGP 出口策略(也可以在设备 PE1 上配置 BGP 入口策略),为路由设置扩展团体属性 Color,路由下一跳是 PE2。然后路由通过 BGP 邻居发送给设备 PE1;
PE1 接收 IPv6 路由:PE1 收到 IPv6 路由后,在下一跳可达并且通过 BGP 的入口策略的情况下,路由迭代 SRv6 路径、路由优选等动作;
PE 到 CE 的路由信息交换:CE1 有多种方式可以从 PE1 学习 IPv6 路由,包括静态路由、RIP、OSPFv3、IS-IS 和 BGP,与 CE2 到 PE2 的路由信息交换相同;
报文转发流程
头端 PE1 接收到 CE1 发送的单播 IPv6 报文后,查找 IPv6 路由表,该路由的出接口是 SRv6 Policy。PE1 为报文插入 SRH 信息,封装 SRv6 Policy 的 SID List,然后封装 IPv6 报文头信息。完成之后,PE1 将报文对 P1 转发;
中间 P1 节点根据 SRH 信息逐跳转发;
报文到达尾节点 PE2 之后,PE2 使用报文的 IPv6 目的地址 FC03::3 查找 My Local SID 表,命中到 End SID,所以 PE2 将报文 SL 减 1,IPv6 DA 更新为 END SID Net2;
PE2 使用 END SID Net2 查找 My Local SID 表,命中到 End SID,PE2 解封装报文,去掉 SRH 信息和 IPv6 报文头,然后将报文转发给 CE2;[……]

READ MORE

「VPN」- SRv6 Policy / 通过BGP-LS收集信息

在华为 SRv6 Policy 解决方案架构中,BGP-LS 的主要功能有两个:
1)通过 BGP-LS 路由,将 IS-IS/OSPFv3 收集的拓扑信息,前缀信息,SRv6 Locator 和 SID 信息通告给 iMaster NCE-IP;
2)通过 BGP-LS 路由,来通告 SRv6 Policy 的状态;

BGP-LS 连接:
1)收集隧道拓扑信息,用于计算 SR Policy 路径;
2)BGP-LS 协议扩展支持收集 SR Policy 状态信息,用于控制器实现隧道状态呈现。https://datatracker.ietf.org/doc/draft-ietf-idr-te-lsp-distribution/
3)BGP-LS 协议扩展支持 SRLB 信息封装和解封装,用于控制器获取 SRLB 信息以分配 BSID(每一条 SR-Policy 隧道的备份路径都对应一个 Binding SID);
4)隧道源节点也需要部署 BGP-LS,主要作用是用于通告 SRv6 Policy 状态;

[~PE1]display bgp link-state unicast routing-table

Total Number of Node Routes: 36
*> Network : [NODE][ISIS-LEVEL-2][IDENTIFIER0][LOCAL[as65001][bgp-ls-identifier1.0.0.1][ospf-area-id0.0.0.0][igp-router-id0010.0000.0001.00]] // 拓扑节点信息

*> Network : [LINK][ISIS-LEVEL-2][IDENTIFIER0][LOCAL[as65001][bgp-ls-identifier1.0.0.1][ospf-area-id0.0.0.0][igp-router-id0010.0000.0001.00]][REMOTE[as65001][bgp-ls-identifier1.0.0.1][ospf-area-id0.0.0.0][igp-router-id0010.0000.0002.00]][LINK[if-address10.0.0.26][peer-address10.0.0.25][if-address::][peer-address::]] // 拓扑链路信息

*> Network : [SRV6-SID][ISIS-LEVEL-2][IDENTIFIER0][LOCAL[as65001][bgp-ls-identifier1.0.0.1][ospf-area-id0.0.0.0][igp[……]

READ MORE

「VPN」- SRv6 Policy Inter-AS(跨域路径建立)

问题描述
SRv6 设备需要获取全网的 SID 信息才能实现端到端的数据转发。在一个 AS 内,设备可以通过扩展的 IGP 协议(扩展 OSPFv3 或扩展 IS-IS)获取 AS 内的 SID 信息;
解决方案
而在跨域场景中需要借助 BGP 帮助传递 SID 信息,这种通过 BGP 传递 SID 的技术叫做 BGP EPE(Egress Peer Engineering);

BGP EPE 可为域间路径分配 BGP Peer SID,Peer SID 可以分为两种:

1)Peer-Node SID 用于指示一个对等体节点。每一个 BGP 会话都会分配 Peer-Node SID。对于基于 Loopback 接口建立的 EBGP 邻居,其对应的物理链路可能有多条,那么针对该邻居的 Peer-Node SID 就会对应多个出接口。Peer-Node SID 是一种 END SID;

2)Peer-Adj SID 用于指示到达对等体的一个邻接。对于基于 Loopback 接口建立的 EBGP 邻居,其对应的物理链路可能有多条,则每个邻接都会分配一个 Peer-Adj SID,转发时只能使用指定的链路(对应指定的出接口)进行转发。Peer-Adj SID 是一种 END.X SID;

BGP EPE 只是针对 BGP 邻居节点及相关链路分配 SID,并不能构建一个用于转发的路径,BGP Peer SID 信息还需要与 IGP SID 配合才能形成 E2E 的路径;
BGP EPE 负载分担
https://support.huawei.com/enterprise/zh/doc/EDOC1100279019/be68f9e4
BGP EPE 可为域间路径分配 BGP Peer SID,Peer SID 可以通过 BGP LS 扩展直接传递给网络控制器。而对于没有与控制器建立 BGP LS 邻居的转发器设备,可以先通过 BGP LS 将 Peer SID 信息传递给 BGP 邻居,然后再由 BGP 邻居通过 BGP LS 传递给网络控制器。如图 1-511 所示,BGP EPE 能够针对对等体分配 Peer Node Segment(Peer-Node SID)、Peer Adjacency Segment(Peer-Adj SID)、Peer-Set SID;
Peer-Set SID 用于指示一组邻居。BGP 支持将一组邻居规划为一个 Set,然后基于该组分配 SID,这个 SID 称为 Peer-Set SID,Peer-Set SID 在转发时可以对应多个出接口。当多个链路加入一个 Peer Set,自动负载分担。一个 Peer-Set 由众多 Peer-Node 和 Peer-Adj 组成,那[……]

READ MORE

「SEGMENT-ROURING」- 分段路由 | Segment Routing

认识
已知问题
针对 MPLS 技术,其本质上仅是指导数据转发的隧道技术,有完整的隧道创建、隧道管理、维护机制。该机制都是从网络运营和管理角度驱动的需求,而非由应用(业务)驱动网络需求。

针对如上拓扑环境,已知 MPLS LDP 问题:

LDP 本身并无算路能力,需依赖 IGP 进行路径计算;
控制面需要 IGP 及 LDP 协议,设备间需要发送大量消息来维持邻居关系及路径状态,浪费链路带宽及设备资源;
针对主备切换,不会产生流量丢失。但是,当链路回切时,若 LDP 与 IGP 未同步,在 MPLS VPN 中则可能出现数据转发问题;

针对如上拓扑环境,已知 MPLS RSVP-TE 问题:

RSVP-TE 的配置复杂,不支持负载分担;
为了实现 TE,设备间需要发送大量 RSVP 报文来维持邻居关系及路径状态,浪费链路带宽及设备资源;
RSVP-TE 本质上是分布式架构,每台设备只知道自己的状态,设备之间需要交互信令报文;

解决方案
为解决传统 IP 转发和 MPLS 转发的问题,业界提出了 SR(Segment Routing,分段路由)。Segment Routing,是种技术,其为一种允许在头端节点选路,其不需要依靠逐跳信令交互(LDP/RSVP-TE)。
SDN 概念的提出对网络产业产生巨大影响,业界出现了诸多用于实现 SDN 的协议,例如 OpenFlow、POF(Protocol Oblivious Forwarding,协议无关转发)、P4(Programming Protocol-independent Packet Processors,编程协议无关的包处理)和 Segment Routing。相比于革命性的协议,Segment Routing 同时考虑了对现网的兼容、平滑演进、提供可编程能力,是事实上的 SDN 标准。
组成
核心理念:源路由(Source Routing)
SR 是基于 Source Routing(源路由)理念而设计的在网络上转发数据包的一种技术架构。
源路由机制:
1)在源节点中,R1,选择一条路径,并在报文中压入一个有序的标签栈;
2)然后,在网络中,其他节点将按照报文封装的标签栈进行转发,进而“不再基于”传统的源末地址转发;
简而言之,在传统的 MPLS 网络中,其在各个节点不断的切换标签,而 SR 是提前在报文中存储标签列表。

控制平面:路径计算 | 标签栈的生成方法
整体上,路径计算方式有两大类,其与 SR 的部署方式有关,可分为“有控制器”与“无控制器”区分。
转发器算路,使用 SPF(Shortest Path First, 最短路径优先)算法

原理:基于 IGP(OSPF/IS-IS)的链[……]

READ MORE

「VPN」- SRv6 Policy / 通过BGP IPv6 SR Policy 下发路径

iMaster NCE-IP 可以通过 BGP IPv6 SR Policy 邻居下发 SRv6 Policy 给源节点;
在 BGP Routing Table 中,SRv6 Policy 呈现为 [distinguisher][color][endpoint];

BGP IPv6 SR Policy 连接:
1)控制器向转发器下发 SRv6 Policy 信息,生成 SRv6 Policy;
2)控制器下发 BGP 路由携带 Color 团体属性,并支持此属性传递。隧道头端节点匹配 BGP 路由后基于 Color+Endpoint 方式迭代到 SRv6 Policy;
3)华为 SRv6 policy 方案中需要在控制器根据业务 SLA 要求统一规划各个应用的网络隧道算路约束,并通过不同的 color 来标识。根据{头节点,尾节点,COLOR}来唯一确定一个 SRv6 policy。业务报文迭代隧道时其 BGP 路由需要携带对应的 color 扩展团体属性;

[~PE1]display bgp sr-policy ipv6 routing-table [49][16][FC01::4]

BGP local router ID : 1.0.0.1
Local AS number : 65001
Paths: 2 available, 1 best, 1 select, 0 best-external, 0 add-path
BGP routing table entry information of [49][16][FC01::4]: // [16][FC01::4]
……
Tunnel Encaps Attribute (23):
Tunnel Type: SR Policy (15)
Preference: 10
Binding SID: FC00:1::1:1, s-flag(0), i-flag(0) // Binding SID 的主要作用是用于路径粘连;
Segment List
Weight: 1
Path MTU: 9600
Segment: type:2, SID: FC00:5::1 //
Segment: type:2, SID: FC00:6::1 //
Segment: type:2, SID: FC00:6::1:60 //
Template ID: 4294967278
Not advertised to any peer yet[……]

READ MORE

「VPN」- SRv6 Policy 概念术语

<headend, color, endpoint>
一个 SRv6 Policy 有一个元组标识:<headend, color, endpoint>;
在特定头端中,color 和 endpoint 被用于标识 SRv6 Policy 转发路径;
对于一个指定的源节点,SRv6 Policy 由 <color, endpoint> 标识:
1)头端(headend):SRv6 Policy 生成的节点,一般是全局唯一的 IP 地址;
2)颜色(color):32 比特扩展团体属性,用于标识某一种业务意图(例如低延时);
3)尾端(endpoint):SRv6 Policy 的目的地址,一般是全局唯一的 IPv6 地址;

endpoint vs. endpoint node
SRv6 Policy 中的 endpoint 与 SRv6 中的 endpoint node 是不同的概念;
1)SRv6 中的 endpoint node 指的是设备类型,该类型设备会处理 SRH 头部;
2)SRv6 Policy 中的 endpoint 指的是隧道的尾端节点,endpoint 一般使用 IPv6 地址表示;
SRv6 Policy 路径模型

候选路径(Candidate Path):
一个 SRv6 Policy 可以包含多个候选路径。
一个候选路径就是 SRv6 Policy 通过 静态配置 或 BGP IPv6 SR Policy 向头端发送的基础单元;
主路径、备份路径:
候选路径携带优先级属性(Preference)。
优先级最高的有效候选路径为 SRv6 Policy 的主路径
优先级次高的有效路径为 SRv6 Policy 的备份路径;
Segment List 附带权重(Weight)来控制 SRv6 路径的负载分担;

SR policy P1 <headend, color, endpoint>
Candidate-path CP1 <protocol, origin, discriminator>
Preference 200
Weight W1, SID-List1 <SID11…SID1i>
Weight W2, SID-List2 <SID21…SID2j>
Candidate-path CP2 <protocol, origin, discriminator>
Preference 100
Weight W3, SID-List3 <SID31…SID3i>
We[……]

READ MORE

「SR-MPLS」- 防环技术

问题描述
IGP 协议的链路状态数据库各节点独立计算,导致其在无序收敛时可能会产生环路。这种环路会在转发路径上所有设备都完成收敛之后消失,此类暂态的环路被称为微环(Micro Loop);
解决方案
目的:防止主路径更新时候的临时环路
触发条件:主路径信息更新,将出发防微环保护。

TI-LFA 功能正常情况如图,P1 感知到 P2 节点发生故障后进入 TI-LFA FRR 切换流程。在发送数据时,P1 将向报文中插入 Repair List <16005,16057> 来指导 P3 进行数据转发,通过 16005 转发到 16006;
注,此类技术使用类似的思路:针对提前收敛的设备,其通过向报文中添加 Segment List,来指导其他设备转发数据;
SR 本地正切防微环
原因:设备的收敛时间不同导致微环

例如:P1 路由收敛后不再携带 Repair List。此时查询到达 16006 路由下一跳节点为 P3。如果 P3 此时未完成收敛,其指向 16006 的下一跳依然为 P1,产生本地正切环路;
方案:启用防微环后 P1 启动定时器 T1,期间 P1 发送的报文依旧按照 TI-LFA 策略 <16005, 16057> 转发,等待其他节点收敛。此时,标签将指导 P3 转发数据;

[P1] isis 1
[P1-isis-1] avoid-microloop frr-protected

SR 本地回切防微环
原因:在故障恢复后路径回切时也可能出现微环;

例如:此时 P2 故障恢复,如果 P1 未完成收敛将流量转发给 P3,但是 P3 已完成收敛会将流量转发回 P1,形成本地回切微环;
方案:启用防微环,P3 完成收敛后计算出防微环 Segment List 为<16002, 16024>。PE1 将报文转发 P1,此时由于 P1 未完成收敛将报文转发给 P3。P3 将插入此防微环 Segment List,从 P1 转发给 P2 最后到 PE2;

[P3] isis 1
[P3-isis-1] avoid-microloop frr-protected

注,P3 生成的此防微环 Segment List 在定时器 T 内生效;
SR 远端防微环
在路径切换过程中,不仅可能导致本地微环,也可能引起远端节点之间形成环路,即远端微环;

例如,如图 PE2 和 PE3 之间链路故障,如果 P2 率先完成收敛而 P1 未完成收敛,报文在 P1-P2 间将形成环路;
使能远端防微环后,P2 收敛后针对访问 PE3 的报文计算防微环 Segment List <16003,16037>。此时即使 P1 为未完成收敛,依然会将流量从 P3[……]

READ MORE

「VPN」- SR Policy

H3C HCL version 5.8
R1 R2 R3
R1 R2 R3
ospfv3

route-id
intf GE

ipv6 address …

ospfv3 1 AR 0
intf Lo

ipv6 address

ospfv3 2 AR 0

seg-rt ipv6

encap src-addr x:x

locator Foo ipv6-prefix A100: 96 static 16

opcode 1 end
ospfv3

segemnt-rt ipv6 locator Foo

dis seg-rt ipv6 local-sid end …
// 到此,已经实现 SRv6 BE,但是受限于模拟器,所以可能无法互通。
SRv6 BE
配置方式与华为类似;
dis
not resoloved // 默认不进行路由迭代,所以需要配置私网路由根据 SID 迭代
bgp

addresfailoy ipv4 unicat

seg-rt ipv6 sid-route-recrsion // 默认,Pe 设备不能将私网路由迭代到 End.DT4 SID 对应的路由表项上,直接查找路由表进行转发。

SRv6 TE
需要基于 BE 进行改造
seg-rt ipv6

traffic-engin

srv6-plc locatoer Foo

seg-list 1

index 10

index 20

policy Foo

// binging-sid

color 100 endpoont ipv6 “<>”

candidate-path

preference 200

explicait segment-list 1

dis seg-rt ipv6 te fowarad
dis seg-rt ipv6 te policy name Foo
// 路由着色
route-policy Foo

apply ext-commn color 00:100 // 旧版本模拟器可能会失败,无法着色
bgp

address-fam vpnv5

peer … route-policy Foo
display bgp vpnv4

// 启用流量工程
bgp

ip vpn-inst ..

address-faimily ipv4 unicast[……]

READ MORE

「SEGMENT-ROURING」- SR MPLS BE | Best Effort

描述
SR-MPLS BE 是指 IGP 使用 SPF 计算得到的最优 SR LSP 路径。其与 MPLS LDP 类似,通过 IGP 最短路径算法计算生成 LSP 来指导数据转发。SR-MPLS BE 是一种替代“LDP+IGP 方案”的新方案。
使用 SID 来指导设备基于最短路径进行数据转发,该工作机制称为 SR-MPLS BE(Best Effort);

例如,在本例中使用 R6 的 Node SID 606 可以指导数据沿着去往 R6 的最短路径来转发数据,该最短路径是基于路由协议计算得出的,并且支持等价路径;
原理
隧道建立过程 | SR-MPLS BE LSP | 转发路径
SR-MPLS BE LSP 是指使用 SR 技术建立的标签转发路径,针对在该路径中的报文,其有且仅有一个 Prefix Segment 或 Node Segment 指导数据包转发。
SR-MPLS BE LSP 的创建过程和数据转发与 LDP LSP 类似。

LSP 创建需要完成以下动作:
1)网络拓扑上报(在基于控制器创建 LSP 时,才需要该过程),以及标签分配;
2)路径计算;
通过 IGP 协议,SR-MPLS 实现拓扑信息、Prefix SID Index(前缀信息)、SRGB、标签信息的通告;
针对 SR-MPLS BE LSP 创建,主要基于前缀标签。
目的节点通过 IGP 协议发布 Prefix SID Index 、SRGB 信息,
转发器解析 Prefix SID Index 信息,并根据 SRGB 计算标签值。
然后,网络中的各节点使用 IGP 协议收集的拓扑信息,根据 SPF 计算标签转发路径,并将计算的下一跳及出标签信息,下发到转发表来指导数据报文转发;
流量导入方法
该类型 LSP 不存在 Tunnel 接口,所以需要其他方法将流量导入到隧道中;
SR-MPLS BE(没有隧道接口)引流方式:

隧道策略:按照隧道的优先级顺序,来选择 SR-BE 隧道;
静态路由:将静态路由的下一跳指定为 SR-BE Tunnel 的目的地址,根据下一跳地址迭代到 SR-BE 隧道;
根据路由下一跳迭代:公网路由(例如 BGP、……)可以根据路由的下一跳迭代到 SR-BE 隧道;

数据转发过程
针对非固定标签:

Push(压入):当报文进入 LSP 时,入节点设备在报文二层首部和 IP 首部之间插入一个标签;或者根据需要,在报文标签栈的栈顶增加一个新的标签;
Swap(置换):当报文在 SR 域内转发时,根据标签转发表,用下一跳分配的标签替换 SR 报文的栈顶标签;
Pop(弹出):当报文在离开 SR 域时,根据栈顶的标签查找转发出接口,然后将 SR 报[……]

READ MORE

「SR-MPLS」- 隧道保护与检测技术

SR-MPLS 故障保护技术概览
TE 隧道故障保护有两种思路局部保护与端到端保护。SR-MPLS TE 沿用此思路,并在此基础上增强;

TI-LFA FRR
TI-LFA (Topology-Independent Loop-free Alternate) FRR 能为 Segment Routing 隧道提供链路及节点的保护。当某处链路或节点故障时,流量会快速切换到备份路径继续转发;
传统 LFA 算法局限
传统 LFA 算法依赖拓扑存在局限。如图所示 SIP 流量通过 R1 转发到达 DIP。此时 R1-R3 链路故障,R1 将流量转发给 R2。但是在 R2 感知到故障前无法形成备份路径;

传统 LFA 无法形成备份路径的本质在于分布式网络架构下,每台设备独立计算路径,在故障瞬间对于最短路径的理解没有共识;
TI-LFA 算法

TI-LFA 借助 SR 源路由规划能力,在每个节点都会计算备份路径保护故障点。当节点检测到故障时,快速切换到备份路径;
目的:为目的地址在本地计算备份路径
触发条件:主路径链路/节点故障
TI-LFA FRR 保护路径计算
TI-LFA FRR 可以同时保护链路故障和节点故障。由于节点故障的保护路径一定可以保护链路故障,所以 TI-LFA 优先计算节点保护;
更多 TI-LFA FRR 原理细节请参考 NE 系列产品文档“TI-LFA FRR”;

TI-LFA FRR 的应用场景与配置
为了实现整体路径的保护,需要在多个节点 IGP 中使能 TI-LFA FRR 局部保护;

Anycast FRR
问题描述
TI-LFA FRR 的局限:对于 SR 隧道中的指定必经节点(首节点、尾节点、路径约束节点)故障,TI-LFA 无法生成保护。如图 SR 转发路径中,对于作为必经节点的 R1、R4 和 R6,TI-LFA 无法生成保护路径;

解决方案
通过 Anycast FRR 可以实现对于指定节点的故障保护;

如图让 R4 和 R5 发布相同的 SID,这个 SID 就是 Anycast SID。此时 Anycast SID 会在 IGP 中发布,其下一跳会指向路径中最近的节点,例如 R4,那么 R4 被称为 Anycast SID 的最优节点,R5 则是备份节点;
Anycast FRR 构造一个虚拟节点发布 SID,然后采用 TI-LFA 算法计算虚拟节点的备份下一跳;
此时如果 R4 节点故障,TI-LFA 根据计算的备份路径,通过 R5 继续转发;

R4 和 R5 指向虚拟节点的链路开销为 0。虚拟节点指向 R4 和 R5 的链路开销为无穷大;
Hot-Standby
SR 的 Hot-Standby 就是通过控制器算出一条与主路径不[……]

READ MORE

「HUAWEI-ENSP」- 实验学习:L3VPN over SR MPLS BE | 域内

实验拓扑

PE1 和 PE2 设备各有一个 CE 属于 VPN 实例 vpna;

实验需求
在骨干网络中,部署 L3VPN 迭代 SR-MPLS BE 隧道,使得 PC1 和 PC2 可以相互通信;
实验过程
配置过程

# —————————————————————————– # SR MPLS BE LSP

[CX1]mpls lsr-id 1.1.1.1
[CX1]mpls
[CX1]segment-routing

[CX1]ospf 1
[CX1-ospf-1]opaque-capability enable
[CX1-ospf-1]segment-routing mpls
[CX1-ospf-1]segment-routing global-block 16000 17000

[CX1]interface LoopBack 0
[CX1-LoopBack0]ospf prefix-sid index 1

…. CX2 CX3 CX3 CX7

[CX5]mpls lsr-id 5.5.5.5
[CX5]mpls
[CX5]segment-routing

[CX5]ospf 1
[CX5-ospf-1]opaque-capability enable
[CX5-ospf-1]segment-routing mpls
[CX5-ospf-1]segment-routing global-block 16000 17000

[CX5]interface LoopBack 0
[CX5-LoopBack0]ospf prefix-sid index 5

# —————————————————————————– # BGP VPNv4

[CX1]bgp 200
[CX1-bgp]peer 5.5.5.5 as-number 200
[CX1-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[CX1-bgp]ipv4-family vpnv4 unicast
[CX1-bgp-af-vpnv4]peer 5.5.5.5 enable

[CX5]bgp 200
[CX5-bgp]peer 1.1.1.1 as-number 200
[CX5-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[CX5-bgp]ipv4-family vpnv4 unicast
[CX5-bgp-af-vpnv4]pee[……]

READ MORE

「VPN」- SRv6 Policy:L3VPN Over SRv6 Policy

IPv4 over IPv6: PE1 = P1 = PE4
PE
seg-rt ipv6

encap src-addr x:x

locator Foo ipv6-prefix x:x 96 static 16

isis

network-entity …

is-lev l2

cost-styel wide

is-name Foo

ipv6 enable tology ipv6 // standard

seg-rt ipv6 locator Foo // 宣告

Interfa GE

isis ipv6 enable
Interf Lo

isis ipv6 enable
display seg-r ipv6 local-sid end forwarding

P
seg-rt ipv6

encap src-addr x:x

locator Foo ipv6-prefix x:x 96 static 16

opcode ::1 end no-flavor // 节点,采用手动指定,防止变化

opcode ::2 end-x Inft Ge nexthop x:x no no-flover // netxtop 为对端地址

// 注意,没有关闭自动分配,所以 dis 还会现实手动分配的

isis

network-entity …

is-lev l2

cost-styel wide

is-name Bar

ipv6 enable tology ipv6 // standard

seg-rt ipv6 locator Foo // 宣告(指定 auto-sid-disable 关闭自动分配)

PE
WIP
VPN
ip vip-inst

rt

rd

intf Lo // 模拟 CE 使用

ip binding

bgp

peer <ipv6>

ipv4-family vpnv4

peer <ipv6> enable

ipv4-family vpn-insst

import

// 配置 SR Policy
seg-rt ipv6

srv6-te-policy locator Foo

segment-list 123

index 10 sid ipv6[……]

READ MORE