「01-port22-detecting.sh」

#!/bin/sh

################################################################################
# 检测 Linux 主机
################################################################################
for i in $(seq 1 255)
do
ip_address=”10.10.50.${i}”
(
nc -z -w 1 $ip_address 22 \
&& echo $ip_address
) &
done

wait[……]

READ MORE

「02-linux-detecting.sh」

#!/bin/sh -e

################################################################################
# 检测 CentOS 主机
################################################################################

for i in $(seq 1 255)
do
ip_address=”10.10.50.${i}”
# ssh-keygen -R $ip_address &>/dev/null
(
nc -z -w 1 $ip_address 22 \
&& ssh -i config/ssh-private-key/id_rsa -oBatchMode=yes \
-o StrictHostKeyChecking=no \
root@$ip_address test -e /etc/redhat-release &>/dev/null \
&& echo $ip_address
) &
done

wait[……]

READ MORE

「zabbix agentd.conf」

ServerActive=10.10.50.188
HostnameItem=system.hostname
HostMetadata=CentOS Linux[……]

READ MORE

「Zabbix」- 宏(Macros)

内容简介
在Zabbix中,支持许多可用于各种情况的宏。所谓“宏”,可以理解为一个变量,宏是以键值形式存在的。
本部分整理了与Zabbix中“宏”(Macros)相关的内容。
宏的类型
全局宏:Adminstrator – General – Macros
模板宏:Configuration – Templates – Macros
主机宏:Configuration – Hosts – Zabix server – Maacros
注意,主机宏的优先级最高,在进行宏解析是,先在主机宏中查找。
宏函数
用户自定义宏
用户自定义宏的语法为:{$MACRO}
例如:net.tcp.service[ssh,,{$SSH_PORT}]
底层自定义发现宏
相关连接
有关支持的宏,可以参考「7 Macros/1 Supported macros」手册。
参考文献
Zabbix Documentation 4.2/7. Configuration/10 Macros[……]

READ MORE

「Zabbix」- 忘记密码重置

内容简介
本文介绍重置Zabbix管理员密码。交接工作一直都做不好,总有点东西每交接。这不是么?把Zabbix的管理员密码忘记了。
操作过程
默认的用户名为Admin,密码为zabbix。如果忘记密码,可以修改数据库的zabbix.users.passwd字段来修改密码,密码是md5存储的。

#!/bin/sh

# 连接数据库
mysql -uroot -p’your-password’

# 重置密码
mysql> update zabbix.users set password = md5(‘zabbix’) where alias=’Admin’;
mysql> update zabbix.users set passwd = md5(‘zabbix’) where alias=’Admin’ # 在Zabbix 4.2中

参考文献
Zabbix Password Recovery[……]

READ MORE

「Zabbix」- 中文字体“乱码”(无中文字体)

问题描述
在 Graph 中,无法显示中文字体(字体变成“方块”或者完全不显示),如下图所示:
问题原因
这并不是“乱码”,而是字体缺失。在 Zabbix 中,使用图片呈现图表数据,而在图片上渲染字体时需要找到对应的字体文件。如果没有正确配置字体(字体不支持中文或者无法找到字体),则无法在图片中渲染字体,此时将显示方块或这完全空白。
解决方案
在代码中搜索 ttf 关键字,然后逐步追查到字体加载路径。
Debian and Zabbix ???

#!/bin/sh

# 安装包含中文字体的字体
apt-get install fonts-wqy-microhei

# update alternative zabbix-frontend-font
update-alternatives –install /usr/share/zabbix/fonts/graphfont.ttf \
zabbix-frontend-font /usr/share/fonts/truetype/wqy/wqy-microhei.ttc 10

# 配置使用wqy-microhei.ttc字体
update-alternatives –config zabbix-frontend-font

CentOS and Zabbix
适用于 CentOS 6.9、CentOS 7.x 发行版:

#!/bin/sh

# 你也可以使用自己喜欢的字体,随便吧,要有中文字体
yum install -y wqy-microhei-fonts.noarch

# CentOS release 6.9 (Final) and Zabbix 4.2
update-alternatives –install /usr/share/zabbix/assets/fonts/graphfont.ttf \
zabbix-web-font /usr/share/fonts/wqy-microhei/wqy-microhei.ttc 10

# CentOS Linux release 7.5.1804 (Core) and Zabbix 4.0.1
update-alternatives –install /usr/share/zabbix/assets/fonts/graphfont.ttf \
zabbix-web-font /usr/share/fonts/wqy-microhei/wqy-microhei.ttc 10

# 配置选择字体
update-alternatives –config zabbix-web-font

附件说明
实际上操作了这一波就是修改了 /u[……]

READ MORE

「Zabbix」- zabbix_agentd.conf

配置文件 zabbix_agentd.conf 用于调整 Zabbix Agent 的行为,配置参数分为以下类别: 1)基本参数 2)被动检查的相关参数 3)主动检查的相关参数 4)高级参数 5)用户定义检测参数 6)模块加载的相关参数 7)TLS相关的参数
注意:在 Windows 下的 zabbix_agentd.con f配置在 Linux 下的配置稍有不同。本文的内容以 Linux 下的 zabbix_agentd.conf 配置为主,除非有特殊说明。
相关链接
Zabbix Documentation 4.2/Appendixes/3 Daemon configuration/3 Zabbix agent (UNIX) Zabbix Documentation 4.2/Appendixes/3 Daemon configuration/3 Zabbix agent (Windows)
基本参数
PidFile PID文件位置。该参数可选。 默认:PidFile=/tmp/zabbix_agentd.pid
SourceIP 发出连接时使用的IP地址。 该参数是可选的 默认值:SourceIP=
EnableRemoteCommands 是否允许Zabbix Server发出的远程命令:

0 – not allowed
1 – allowed
该参数是可选的
默认值:EnableRemoteCommands=0

调整日志信息
LogType 日志要写入的位置,该参数使可选的,默认值为file:

system – 写入。yslog
file – LogFile参数指定的位置。
console – 标准输出,即直接打印到控制台。

LogFile 为LogType=file的参数指定日志文件的位置。 可选的参数。 配置文件中默认LogFile=/tmp/zabbix_agentd.log
LogFileSize 日志文件的最大大小。以MB为单位。 该选项是可选的。范围:0-1024 默认值:1
DebugLevel 指定调试等级:

0 – basic information about starting and stopping of Zabbix processes
1 – critical information
2 – error information
3 – warnings
4 – for debugging (produces lots of information)
5 – extended debugging (p[……]

READ MORE

「Zabbix」- zabbix server.conf

通用参数
ListenPort
该参数是可选的 取值范围:1024-32767 默认值:ListenPort=10051
SourceIP 发起连接时使用的IP地址。
该参数是可选的 默认值:SourceIP=127.0.1.1
LogType 日志要写入的位置,该参数使可选的,默认值为file:

system – 写入。yslog
file – LogFile参数指定的位置。
console – 标准输出,即直接打印到控制台。

该参数是可选的 默认值:LogType=file
LogFile 为LogType=file的参数指定日志文件的位置。
该参数是可选的 默认值:LogFile= 配置文件中的默认值:LogFile=/tmp/zabbix_server.log
LogFileSize 日志文件的最大大小。以MB为单位。
该参数是可选的 取值范围:0-1024。0:表示禁用日志轮转。 默认值:LogFileSize=1
DebugLevel 指定Debug的等级:

0 – basic information about starting and stopping of Zabbix processes
1 – critical information
2 – error information
3 – warnings
4 – for debugging (produces lots of information)
5 – extended debugging (produces even more information)

该参数是可选的 取值范围:0-5 默认值:DebugLevel=3
PidFile PID文件名。
该参数是可选的 默认值:PidFile=/tmp/zabbix_server.pid
DBHost 数据主机名。对于MySQL,如果值为localhost,则会使用socket。对于PostgreSQL,如果设置为空字符串时,会使用socket。 If set to empty string, socket is used for PostgreSQL
该参数是可选的 默认值:DBHost=127.0.0.1
DBName 数据库名。对于SQLite3,需要指出数据库文件的路径,并且会忽略DBUser和DBPassword。
该参数是必填参数 默认值:DBName= 配置文件默认值:DBName=zabbix
DBSchema Schema名。用于IBM DB2和PostgreS[……]

READ MORE

「Zabbix」- 数据可视化

内容简介
本部分整理了Zabbix数据可视化相关的内容。
章节列表
本部分的章节列表参照了官方「Visualisation」部分的列表。

1 Graphs
2 Network maps
3 Screens
4 Slide shows
5 Host screens

图(Graphs)
Zabbix Documentation 4.2/7. Configuration/6 Visualisation/1 Graphs
随着大量数据流入到Zabbix中,如果以图形的形式,来查看正在发生的事情,而不仅仅是数字,则对用户来说将变得更加容易,更加直观。
本部分整理了在Zabbix中的与“图”(Graphs)相关的内容。
不同类型的图
目前支持四种类型的图:Normal、Stacked、Pie、Exploded:

Normal
普通图,值是以线型显示的

Stacked
与普通图类似,但是进行了填充

Pie
饼图

Exploded
也是饼图的一种,只不过各个部分已经分离显示[……]

READ MORE

「Route Policy」- ACL in Route Policy

问题描述
通过 ACL 能够对路由条目进行匹配,然后在策略工具中使用该 ACL 以影响路由。
该笔记将记录:在 Route Policy 中,ACL 的行为及使用方法(不涉及 ACL 语法)。
解决方案
通常 ACL 用于数据过滤,但是也能用于 IP Route 的匹配。
语法格式
参考 Huawei VRP, ACL 笔记,以获取关于 ACL 语法说明。
匹配机制
ACL 技术总是与其他技术结合使用,当所结合的技术不同时,则“允许 (permit)”及“拒绝 (deny)”的实际作用也会不同。例如,当 ACL 与 Route Policy 技术结合使用时,permit 就是“匹配该条路由条目”的意思,deny就是“不匹配该条路由条目”的意思。

默认规则
在 Route Policy 中,ACL 的默认规则是 Deny(在 Traffic Filter 中,默认规则 Permit),即如果路由条目没有很任何 Rule 匹配,则结果为不匹配。
局限缺点
匹配前缀
ACL 仅能匹配路由条目的 Prefix(网络前缀)信息,无法用于匹配 Mask(前缀长度)。 鉴于此,我们很少使用 ACL 来匹配路由规则,转而使用 IP Prefix 来匹配路由条目。
示例如下,对于如下 ACL 规则,能够匹配诸多路由条目,而无法精确匹配某个特定条目:

10.1.1.0/24 – 10.1.1.0/24-32
||
vv
rule 15 permit source 10.1.1.0 0.0.0.255
||
vv
10.1.1.0/24
10.1.1.0/25
10.1.1.0/26
…[……]

READ MORE

「NAT」- 双向 NAT 技术、Bidirectional NAT

域内双向(同个局域网)
场景:解决内网访问 NAT Server 连接被重置的问题。
问题描述

在该实验拓扑中: 1)Client 2 请求 10.1.12.1:80 能够得到正常的响应; 2)但 Client 1 请求 10.1.12.1:80 会出现 TCP 连接被重置(RST)的问题;
补充说明
Q:然而,针对上面的实验拓扑,Client 1 请求 10.1.12.1:80 并不会出现 TCP 连接被重置(RST)的问题,而是 AR1 无任何响应。 A:我们猜路由器特性(这并非核心问题,这里我们仅记录该行为)。
为了问题能够被复现,我们在 AR1.AR1.GE0/0/1 增加与 AR1.AR1.GE0/0/0 相同的 NAT Server 配置(图中未标注)。
注意事项: 1)防火墙和路由器的实现不同,路由器 NAT Server 是接口的,而防火墙 NAT Server 是全局的,所以防火墙无需额外配置。 2)因此,该实验最好使用防火墙设备进行测试。
原因分析
1)Client1[192.168.1.1] 建立 TCP 连接 AR1[10.1.12.1:80],经过 NAT Server 处理, 2)报文变为 Client1[192.168.1.1] 连接 HTTP[192.168.1.100], 3)然后 HTTP[192.168.1.100] 进行 SYN ACK 响应,报文为 HTTP[192.168.1.100] 到 Client1[192.168.1.1] 地址, 4)此时,Client1 发现自己并没有主动发起到 HTTP[192.168.1.100] 连接,因此 TCP 建立失败并响应 HTTP[192.168.1.100] 链接重置;
解决方案
在 AR1.GE0/0/1 中,增加 nat outbount 配置,将流出的报文的源地址转为 AR1.GE0/0/1 接口地址,即可。
细节说明: 1)Client1[192.168.1.1] 建立 TCP 连接 AR1[10.1.12.1:80],经过 NAT Server 处理,报文变为 Client1[192.168.1.1] 连接 HTTP[192.168.1.100], 2)当报文流出 AR1.GE0/0/1 接口时,又被 nat outbount 配置处理成 AR1[192.168.1.254] 连接 HTTP[192.168.1.100], 3)然后 HTTP[192.168.1.100] 进行 SYN ACK 响应,报文为 HTTP[192.168.1.100] 到 Client1[192.168.1.254] 地址,AR1 收到该报文, 4)AR1 根据 NAT Session 把报文转[……]

READ MORE

「Huawei VRP」- 配置 NAT 转换

1)NAT 实在 Interface 上配置的,需要切换到 Interface View 进行操作;
Static NAT

[RTA] interface GigabitEthernet 0/0/1
[RTA-GigabitEthernet0/0/1] ip address 192.168.1.254 24

[RTA] interface Serial1/0/0
[RTA-Serial1/0/0] ip address 200.10.10.2 24

[RTA-Serial1/0/0] nat static global 200.10.10.1 inside 192.168.1.1
[RTA-Serial1/0/0] nat static global 200.10.10.2 inside 192.168.1.2

// 方式一、接口视图下配置静态 NAT
// global:用于配置外部公有地址
// inside:用于配置内部私有地址;
[Huawei-GigabitEthernet0/0/0] nat static global { global-address} inside {host-address }

// 方式二、系统视图下配置静态 NAT
[Huawei] nat static global { global-address} inside {host-address }
[Huawei-GigabitEthernet0/0/0] nat static enable # 再在具体的接口下开启静态 NAT

查看 Static NAT 配置:

[RTA] display nat static

补充说明
1)虽然没有绑定 IP 地址,但是做完 NAT 之后,global-address 能够从对端 RT ping 通;
Dynamic NAT

[RTA] nat address-group 1 200.10.10.1 200.10.10.200
[RTA] acl 2000
[RTA-acl-basic-2000] rule 5 permit source 192.168.1.0 0.0.0.255

[RTA-Serial1/0/0] nat outbound 2000 address-group 1 no-pat # no-pat: without port translation

对于动态 NAT 技术,eNSP 模拟器会为每个 ping 包分配不同的 IP 地址,而导致地址被分配完全,此时会出现 ping timeout 问题; 使用 display nat session all 来查看地址分配;
NAPT,PAT[……]

READ MORE

「NAT」- 内网穿透,NAT 穿透,NAT Traversal

问题描述
NAT 技术虽然能使私网访问公网,但是 NAT 技术也有一定缺陷: NAT 对于私网访问公网的流量会生成 NAT 映射表项,这些表项有老化时间,如果两端会话长期静默,则连接会中断; NAT 由于隐藏了私网 IP 地址,对于一些服务器来说,为了防止 DOS 攻击,会限制同一 IP 的访问频率。部分应用也没法有效溯源原始 I 设备,导致网络管理定位困难;
该笔记将记录:进行内网穿透的工具及方法,以及相关问题的解决方法;
解决方案
为了解决 IP 端到端应用在 NAT 环境下遇到的问题,产生了多种 NAT 穿越技术:
目前NAT穿越的方法很多,主要包括以下几种: UPnP(Universal Plug and Play) ALG(Application Layer Gatewqy) MIDCOM(Middlebox Communications) Full Proxy STUN(Simple Traversal of UDP Through Network Address Translators) TURN(Traversal Using Relay NAT) ICE(Interactive Connectivity Establish) STUNT
如果是网络工程师,我们能够直接在路由设备上完成内网穿透工作,我们主要学习 ALG、STUN 技术;
原理简述

使用 FRP(FAST REVERSE PROXY)工具
fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
首先,需要有公网服务器,才能进行后续操作
Access your computer in LAN by SSH
第一步、在服务端运行:

cat > /etc/frp/frp-server.ini <<EOF
# frps.ini
[common]
bind_port = 7000
EOF

./frps -c ./frp-server.ini

第二步、在客户端运行:

cat > /etc/frp/frp-client.ini <<EOF
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
EOF

./frpc -c ./frp-client.in[……]

READ MORE

「NAT」- ALG,Application Level Gateway,应用层网关

问题描述
应用层服务虽然使用应用层协议,但是在其应用层载荷中包含下层协议的信息。当数据包通过网关设备时,数据包的底层协议的信息发生变化,而应用层所包含的信息未发生变化,导致应用层协议依旧使用原始信息,而无法正常工作;
现网提供各类服务(比如 HTTP,DNS,FTP 等)的服务器一般部署在私网,因此需要在 NAT 上部署 NAT Server 功能使得外网用户能够访问这些服务。但是部分服务用到的协议是多通道协议,比如 FTP、DNS、SIP 等,部署 NAT Server 不能使外网用户访问这些服务;
多通道协议对于 NAT 的挑战(FTP)

FTP 无论使用主动模式还是被动模式都无法解决多通道协议导致外网无法访问 FTP 服务器的问题;
例如 FTP 协议属于应用层协议,但是:在被动模式下,Server 的响应报文包含网络层地址的信息(用于 Client 发起连接)。当 FTP 报文经过 NAT 网关时,网络层和传输层信息会发生变化,而应用层却依旧是原始的信息,导致 Client 连接 Server 失败;
解决方案
NAT ALG,应用层网关,用于处理应用层信息;
原理简述
根据 NAT 配置,将数据包的应用层信息进行处理,转换成其所对应的公网信息;
NAT ALG(Application Level Gateway)可以对报文的载荷字段进行解析,识别并转换其中包含的重要信息(比如 FTP 数据通道目标端口),基于这些重要信息形成 NAT 映射表项,帮助外部主机访问私网服务器;

特性特征
应用层信息转化,使其对外部表现为公网服务(而不是内网信息)
缺点: 由于NAT ALG需要读取协议报文内容,对于新协议需要升级NAT ALG特性,NAT ALG基本不支持私有多通道协议。 现网有大量设备不支持NAT ALG功能,导致部署成本比较高。 NAT ALG主要解决多通道协议在NAT Server场景下的问题,对于私网主机互通无法很好支持。
应用场景
NAT ALG/FTP:通过 NAT ALG 技术,我们便能够在内网使用 FTP 主动模式;
NAT ALG/DNS:DNS Server in LAN 返回的某个 Server 地址,会被 NAT ALG/DNS 转换为其映射到公网的地址; NAT ALG (Application Level Gateway)
配置使用
Huawei VRP (NAT ALG)

[Huawei]display nat alg

NAT Application Level Gateway Information:
———————————-[……]

READ MORE

「NAT」- STUN,Session Traversal Utilities for NAT,

问题描述
NAT 穿越技术除了使用 NAT ALG 之外,还有一种思路是利用 Cone NAT 的特性,通过事先建立 NAT 映射表项在 NAT 设备上“打洞”,通过 NAT 映射表项在私网之间建立连接;
解决方案
STUN,在 RFC3489 中定义,作为一个完整的 NAT 穿透解决方案,英文全称是 Simple Traversal of UDP Through NATs,即简单的用 UDP 穿透 NAT;
在新的 RFC5389 修订中把 STUN 协议定位于为穿透 NAT 提供工具,而不是一个完整的解决方案,英文全称是 Session Traversal Utilities for NAT,即 NAT 会话穿透效用。RFC5389 与 RFC3489 除了名称变化外,最大的区别是支持 TCP 穿透;
原理简述
在讲述 STUN 原理前,需要再次强调:如果外部主机以 NAT 映射表中的公网 IP+Port 为目标发送数据,数据是否会被转发?—— 数据是会被转发的,原因在于 NAT 并不强制检查源地址,即针对源地址的检查是配置的;
STUN(Session Traversal Utilities for NAT)的主要作用是获取 NAT 设备上的“打洞信息”(即私网 IP+端口与 NAT 后的公网 IP+端口的映射关系),NAT 穿越的数据通道需要使用其他方式建立;

STUN 采用客户端 / 服务器通信模式,通过 STUN Client 与 STUN Server 之间的报文交互,可以发现 NAT 设备的存在,并确定 NAT 设备分配的 IP 地址和端口号;

应用场景
SDWAN 场景下,可以通过 STUN 将 NAT 后的设备互联,建立数据通道;
1)STUN Client 向 STUN Server 发送 STUN 绑定请求报文(Binding Request); 2)STUN Server 收到 STUN 绑定请求报文后,获取该报文中的源 IP 地址和源端口;并构建 STUN 绑定响应报文(Binding Response)发送给客户端; 3)STUN Client 收到 STUN 绑定响应报文后,根据该报文获取 IP 地址和端口,与之前发送的 STUN 绑定请求报文中的源 IP 地址和源端口比较,如果不一致,则 STUN Client 前面存在 NAT 设备; 4)STUN Client 之间通过 BGP 学习对端的 NAT 信息(NAT 前的 IP 地址和端口、NAT 后的 IP 地址和端口); 5)STUN Client 使用本端 NAT 前的 IP 地址和端口与对端 NAT 前的 IP 地址和端口,构建 STUN 绑定请求报文发送给对端;同时 ST[……]

READ MORE

「Linux」- 通过 iptables 使用 NAT 功能

iptables 与 NAT
Linux 内核提供的 Netfilter 框架,允许对网络数据包进行修改(比如 NAT)和过滤(比如防火墙)。在这个基础上,iptables、ip6tables、ebtables 等工具,又提供了更易用的命令行接口,以便系统管理员配置和管理 NAT、防火墙的规则。
网络数据包的工作流向

绿色背景的方框,表示表(table),用来管理链,支持 4 种表:filter(用于过滤)、nat(用于 NAT)、mangle(用于修改分组数据)、raw(用于原始数据包)
跟 table 一起的白色背景方框,则表示链(chain),用来管理具体的 iptables 规则。每个表中可以包含多条链,比如: 1)filter 表中,内置 INPUT、OUTPUT 和 FORWARD 链; 2)nat 表中,内置 PREROUTING、POSTROUTING、OUTPUT 等
灰色的 conntrack,表示连接跟踪模块。它通过内核中的连接跟踪表(也就是哈希表),记录网络连接的状态,是 iptables 状态过滤(-m state)和 NAT 的实现基础。
实现 NAT 功能
这需要在 nat 表进行操作。而 nat 表内置了三个链: 1)PREROUTING,用于路由判断前所执行的规则,比如,对接收到的数据包进行 DNAT。 2)POSTROUTING,用于路由判断后所执行的规则,比如,对发送或转发的数据包进行 SNAT 或 MASQUERADE。 3)OUTPUT,类似于 PREROUTING,但只处理从本机发送出去的包。
SNAT,修改源地址,即在数据包发送出去时修改地址:

// 由 Linux 选择默认的出口 IP

# iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE

// 指定具体的 IP 地址配置 SNAT

# iptables -t nat -A POSTROUTING -s 192.168.0.2 -j SNAT –to-source 100.100.100.100

DNAT,修改目的地址,即要在数据包收到时进行修改,以进行路由决策和处理:

// 由 Linux 选择默认的出口 IP

# iptables -t nat -A PREROUTING -d 100.100.100.100 -j DNAT –to-destination 192.168.0.2

// 也可以在OUTPUT链中配置???

双向地址转换,同时添加 SNAT 和 DNAT 规则:

# iptables -t nat -A POSTROUTIN[……]

READ MORE

「Network」- MQC

问题描述
该笔记将记录:使用 MQC(Modular QoS Command-Line Interface,模块化QoS命令行)的方式控制报文的转发路径和进行流量过滤。
解决方案
MQC(Modular QoS Command-Line Interface,模块化 QoS 命令行)是指,通过将具有某类共同特征的数据流划分为一类,并为同一类数据流提供相同的服务,也可以对不同类的数据流提供不同的服务。
原理简述
MQC 是个框架,包含三个要素: 1)流分类(traffic classifier):能基于例如 VLAN Tag、DSCP、ACL 等等技术,来匹配感兴趣数据流, 2)流行为(traffic behavior):将感兴趣报文进行重定向。可以设置重定向的下一跳 IP 地址或出接口。 3)流策略(traffic policy):通过 TC 与 TB 组成 TP,以解决各类流量问题。
特性特征
WIP
应用场景
在 QoS 中,频繁使用 MQC 技术。
MQC 的 TB 支持重定向报文,所以能够通过 MQC 实现 IP 单播策略路由(PBR)。[……]

READ MORE

「MQC」- 概念、术语

流分类(Traffic Classifier,Tfc-Clf)
解释:定义一组流量匹配规则,以对报文进行分类,即用于匹配具有某类特征的数据包;
流分类支持的匹配项如下所示:
流分类中各规则之间的关系分为:and 或 or,缺省情况下的关系为 or; 1)and:当流分类中包含 ACL 规则时,报文必须匹配其中某条 ACL 规则,及所有非 ACL 规则;当流分类中没有 ACL 规则时,报文必须匹配所有非 ACL 规则; 2)or:报文只要匹配流分类中的某条规则,设备就认为报文匹配中该流分类;
流行为(Traffic Behavior,Tfc-Beh)
解释:用来定义执行的动作,支持报文过滤、重标记优先级、重定向、流量统计等动作,即用于修改数据包;
比如:过滤报文、流量统计、报文 VLAN Tag 添加、重新标记报文优先级、对报文执行策略路由
流策略(Traffic Policy,Tfc-Pol)
解释:其定义 Tfc-Clf 和 Tfc-Beh 的绑定关系;
Traffic Policy 由 Traffic Classifier 与 Traffic Behavior 组成, 即对分类后的报文执行对应 Traffic Behavior 定义的动作; 同个 Traffic Policy 能够绑定多个 Traffic Classifier 和 Traffic Behavior;
Tfc-Pol 支持在接口上调用,且存在方向(inbound、outbound)的概念: 1)策略中的流行为匹配入、出方向的报文, 2)对匹配中的报文执行相应的流动作;
注意,流策略并不是必须绑定在接口上,其取决于具体场景;

Tfc-Pol 不同于 Huawei/policy-based-route 实现:PBR 只能调用在三层接口,而 Tfc-Pol 支持调用在二层接口;[……]

READ MORE

「MQC」- 3.Problem Solving (how-to)

配置介绍(Huawei)

// 创建流分类
// 缺省情况下,流分类中各规则之间的关系为“或”(or)。流分类中的匹配规则配置可查阅产品手册。
[Huawei] traffic classifier classifier-name [ operator { and | or } ]

// 创建流行为
// 根据实际情况定义流行为中的动作,只要各动作不冲突,都可以在同一流行为中配置。流行为具体配置可查阅产品手册。
[Huawei] traffic behavior behavior-name

// 创建流策略,并绑定流分类与流行为
[Huawei] traffic policy policy-name
[Huawei-trafficpolicy-policyname] classifier classifier-name behavior behavior-name

开启流量统计:

[Traffic Behavior] statistic

[User View] display traffic policy statistic interface <intf> inbound[……]

READ MORE

「PBR」- 策略路由:通过 policy-based-route 实现

策略范围
PBR,分为:本地策略路由(Local-PBR);接口策略路由(Interface-PBR);智能策略路由(Smart-PBR);
Interface PBR

在缺省情况下,设备按照路由表的下一跳进行报文转发。如果配置 Interface-PBR,则设备按照 Interface PBR 指定的下一跳进行转发。
1)Interface-PBR 只对转发(接收)的报文起作用;对本地始发的报文无效; 2)Interface-PBR PBR 调用在接口下,对接口的入方向报文生效;
Local PBR

在缺省情况下,设备按照路由表的出接口进行报文转发。如果配置 Local-PBR,则设备按照 Local PBR 指定的下一跳进行转发。
1)Local-PBR 对本地始发的流量生效,例如本地始发的 ICMP 报文; 2)Local-PBR 在 System View 中调用。
Smart-PBR
WIP
配置简述
1)首先,通过 ACL 匹配特定的报文; 2)然后,针对该 ACL 应用 PBR 策略;
第一步、匹配报文
参考 ACL (Huawei) 笔记,以获取语法相关内容。
当ACL的rule配置为permit时,设备会对匹配该规则的报文执行本地策略路由的动作: 1)本地策略路由中策略点为permit时对满足匹配条件的报文进行策略路由; 2)本地策略路由中策略点为deny时对满足匹配条件的报文不进行策略路由,即根据目的地址查找路由表转发报文。
当ACL配置了rule,如果报文未匹配上任何规则,则根据目的地址查找路由表转发报文。
当ACL的rule配置为deny或ACL未配置规则时,应用该ACL的本地策略路由不生效,即根据目的地址查找路由表转发报文。
第二步、应用策略

PBR 与 Route-Policy 类似,由多个 Node 组成,每个 Node 由匹配条件(条件语句)和执行动作(执行语句)组成。
每个节点内可包含多个条件语句。
节点的多个条件语句间,关系为“与”:即匹配所有条件语句才会执行本节点内的动作。
节点间,关系为“或”:PBR根据节点编号从小到大顺序执行,匹配当前节点将不会继续向下匹配。

policy-based-route PBR permit node 10
if-match acl 2000
apply ip-address next-hop ip-address1

PBR 的节点匹配模式,即是否需要进行 PBR 处理: 1)permit,表示对满足匹配条件的报文进行策略路由 2)deny,表示对满足匹配条件的报文不进行策略路由
配[……]

READ MORE

「Huawei-VRP」- 配置 IPSec VPN 服务:IKE;隧道模式;客户端为动态地址;

问题描述
在广域互联场景中,总部与分支,总部为固定地址,分支为动态地址(例如 PPPoE 拨号);
此时,总部的 IPSec VPN 就无法配置 IKE Peer remote-address 为分支的公网地址;
解决方案
通过 IKEv1 协商
如果需要使用 IKEv1 协议,那么需要使用野蛮模式,才能处理客户端地址为动态地址的场景;
当配置华为网络设备时,在 IKE Peer 中: 1)通过 exchange-mode 使用野蛮模式; 2)并且该配置用于对方地址无法确定的场景,要向取消对该 Peer 的引用);
但是,在实际实践中,我们很少使用野蛮模式,所以这里不再叙述相关细节;
通过 IKEv2 协商

// ——————————————————– // IKE

// 配置 IKE 提议

ike proposal 10

// 配置 IKE Peer 信息

ike peer rmt-employee v1
ike-proposal 10
pre-shared-key cipher Huawei123
# nat traversal

// ——————————————————– // IPSec

// 配置 IPSec Proposal 信息

ipsec proposal rmt-employee
encapsulation-mode transport

// 配置 IPSec 策略

ipsec policy-template rmt-employee 10
ike-peer rmt-employee
proposal rmt-employee

ipsec policy rmt-employee_P 10 isakmp template rmt-employee

// ——————————————————– // 引用安全策略

interface GigabitEthernet 0/0/9
ipsec policy rmt-employee_P[……]

READ MORE

「L2TP」- 报文交换过程

概述工作过程
L2TP 能够传输数据,工作过程基本需要 3 个主要节点:

建立 L2TP 隧道(6)
LAC 收到远程用户的 PPP 协商请求时,LAC 向 LNS 发起 L2TP 隧道请求。LAC 和 LNS 之间通过 L2TP 的控制消息,协商隧道 ID、隧道认证等内容,协商成功后则建立起一条 L2TP 隧道,由隧道 ID 进行标识;
建立 L2TP 会话(7)
如果 L2TP 隧道已存在,则在 LAC 和 LNS 之间通过 L2TP 的控制消息,协商会话 ID 等内容,否则先建立 L2TP 隧道连接。会话中携带了 LAC 的 LCP 协商信息和用户认证信息,LNS 对收到的信息认证通过后,则通知 LAC 会话建立成功。L2TP 会话连接由会话 ID 进行标识;
传输 PPP 报文(8)
L2TP 会话建立成功后,PPP 终端将数据报文发送至 LAC,LAC 根据 L2TP 隧道和会话 ID 等信息,进行 L2TP 报文封装,并发送到 LNS,LNS 进行 L2TP 解封装处理,根据路由转发表发送至目的主机,完成报文的传输;
数据报文交换
在建立 L2TP 连接时,在「服务器」和「客户端」间交换许多「控制包」,以为每个方向建立「隧道」和「会话」。「一个对等体」请求「另一个对等体」通过这些「控制包」分配特定的「隧道」和「会话 ID」,然后使用此「隧道」和「会话 ID」,「数据包」同「压缩的 PPP 帧」作为有效负载进行交换;
「LAC」和「LNS」间交换的 L2TP「控制包」列表,用于握手(在「自愿隧道」方法中建立「隧道」和「会话」之前):

Start-Control-Connection-Request (SCCRQ)
通过 Wireshark 进行抓包,其交互过程如下:

708 38.269742497 172.31.252.20 1701 60.176.11.162 1701 L2TP 156 Control Message – SCCRQ (tunnel id=0, session id=0)
709 38.271743904 60.176.11.162 1701 172.31.252.20 1701 L2TP 119 Control Message – SCCRP (tunnel id=57980, session id=0)
710 38.271820108 172.31.252.20 1701 60.176.11.162 1701 L2TP 62 Control Message – SCCCN (tunnel id=2, session id=0)
711 38.272129481 172.31.252.20 1701 60.176[……]

READ MORE

「Huawei VRP」- 配置 L2TP 服务、连接 L2TP 服务

问题描述
L2TP 具有多种应用方式,我们的场景是: 1)在两个出口网络设备上,配置 L2TP 服务(LNS、LAC)以实现两个网络互联; 2)而两个内部网络内的用户对此并无感知,用户无需进行任何操作;

该笔记将记录:在 Huawei 中,如何配置网络设备来提供 L2TP 服务(LNS),并用华为设备来连接 LNS,以及相关问题解决办法;
解决方案
该笔记内容参考自官方文档,目的是熟悉配置过程(实验目的),了解相关的常见问题;
建议参考华为设备手册(配置 L2TP Client 发起 L2TP 连接),以获取更加详细的说明;
网络拓扑概述

配置 LNS 服务

[AR2]aaa
[AR2-aaa]local-user huawei password cipher Huawei@123
[AR2-aaa]local-user huawei service-type ppp

[AR2]l2tp enable

[AR2]ip pool l2tp-srv-pool
[AR2-ip-pool-l2tp-srv-pool]network 192.168.10.1 mask 24
[AR2-ip-pool-l2tp-srv-pool]gateway-list 192.168.10.254

[AR2]interface Virtual-Template 0
[AR2-Virtual-Template0]ip address 192.168.10.254 24 # L2TP 网关地址
[AR2-Virtual-Template0]remote address pool l2tp-srv-pool
[AR2-Virtual-Template0]ppp authentication-mode chap

[AR2]l2tp-group 2
[AR2-l2tp2]tunnel password cipher Huawei@123
[AR2-l2tp2]tunnel name AR2 # 根据我们对文档的理解,LNS 的 Tunnel Name 并不参与验证,仅是标识
[AR2-l2tp2]allow l2tp virtual-template 0 remote AR1-to-AR2 # 仅允许特定隧道名来发起连接(非 l2tp group 1 必须指定 remote 参数)

配置 LAC 服务

[AR1]l2tp enable

[AR1]interface Virtual-Template 0
[AR1-Virtual-Template0]ip address ppp-negotiate
[AR[……]

READ MORE

「Linux」- 通过 NetworkManager 连接 L2TP over IPSec 服务

问题描述
该笔记将记录:在 Linux 中,如何使用 Network Manager 连接 L2TP/IPSec VPN 服务;
解决方案
补充说明: 1)本文中的“NetworkManager”实际上指的是使用 NetworkManger 的前端程序; 2)操作系统:Ubuntu 16.04 TLS
通过 nmcli(1) 命令(CLI)
nmcli connection add type vpn con-name k4nz00 ifname ppp0 vpn-type l2tp
通过 nm-applet 程序(GUI)
在 GNOME 中,系统托盘的网络设置功能便是 nm-applet 提供的。这里使用 nm-applet(1) 来实现 VPN 配置,它常用是 Network Manager 的 GUI 程序;
配置过程按照如下步骤进行:
第一步、安装 NetworkManage 及相关的软件包
实际上,大多数桌面发行版中已经预先安装了 NetworkManage 软件,不需要我们自己手动安装。而需要我们手动安装的是 NetworkManager 的 L2TP 模块。有了该模块之后,NetworkManager 才能连接 L2TP/IPSec 服务。下面是安装 L2TP 模块的教程:

#!/bin/sh

################################################################################
# 安装相关依赖;
################################################################################
apt install intltool libtool network-manager-dev libnm-util-dev \
libnm-glib-dev libnm-glib-vpn-dev libnm-gtk-dev libnm-dev \
libnma-dev ppp-dev libdbus-glib-1-dev libsecret-1-dev \
libgtk-3-dev libglib2.0-dev xl2tpd strongswan

################################################################################
# 下载、编译、安装 network-manager-l2tp 模块
#####################################################################[……]

READ MORE

「L2TP over IPSec」- 服务搭建(华为网络设备)

问题描述
我们需要配置 L2TP over IPSec 服务,以使出差员工能够远程接入办公网络环境;配置环境为华为网络设备(AR1220);
该笔记将记录:在华为路由器中,配置 L2TP over IPSec VPN 以实现远程办公接入的方法,以及相关问题的解决办法;
解决方案
网络拓扑:

|<—– User Network ——->| |<—– Enterrise Network —–>|
Client ====> Router (with NAT) <====(WAN, Internet)====> Gateway(L2TP over IPSec) ====> LAN

实现 L2TP over IPSec 服务,配置分为两个阶段: 1)第一阶段:通过 L2TP 服务,实现二层隧道; 2)第二阶段:通过 IPSec 服务,以其加密模式来保护数据;
Default encryption settings for the Microsoft L2TP/IPSec VPN Client
Default encryption settings for the Microsoft L2TP/IPSec VPN client – Windows Client Troubleshoot L2TP/IPSec VPN client connection – Windows Client | Microsoft Learn
Data Encryption Standard: 3DES Secure Hash Algorithm: SHA1 Diffie-Hellman Medium: Group 2 Transport mode: Transport mode; Tunnel mode (not supported); IPSec Security Protocols: ESP; AH (not supported);
第一阶段、实现 L2TP 服务
在 L2TP over IPSec 中,常规 L2TP 配置,并无较大差异,能实现两端互通即可;
参考 Huawei/L2TP/LNS 笔记,具体细节不再赘述;
第二阶段、实现 IPSec 服务
第一步、网络路由可达
FIXME !!! Huawei !!! 部署 L2TP over IPSec VPN 服务,摆脱客户端;
参考文献[……]

READ MORE

「NTP」- Network Time Protocol

问题描述
随着网络拓扑的日益复杂,整个网络内设备的时钟同步将变得十分重要。如果依靠管理员手工修改系统时钟,不仅工作量巨大,而且时钟的准确性也无法得到保证;
当今企业园区网络中很多场景都需要所有设备保持时钟一致: 1)网络管理:对从不同路由器采集来的日志信息、调试信息进行分析时,需要以时间作为参照依据; 2)计费系统:要求所有设备的时钟保持一致; 3)多个系统协同处理同一个复杂事件:为保证正确的执行顺序,多个系统必须参考同一时钟; 4)备份服务器和客户机之间进行增量备份:要求备份服务器和所有客户机之间的时钟同步; 5)系统时间:某些应用程序需要知道用户登录系统的时间以及文件修改的时间;
解决方案
NTP 的出现就是为了解决网络内设备系统时钟的同步问题。为此可以使用 NTP(Network Time Protocol) 技术来同步设备的时钟;
网络时间协议 NTP(Network Time Protocol)是 TCP/IP 协议族里面的一个应用层协议。NTP 用于在一系列分布式时间服务器与客户端之间同步时钟。NTP 的实现基于 IP 和 UDP。NTP 报文通过 UDP 传输,端口号是 123;
通过网络进行时间同步的网络协议。通过分组交换、可变延迟数据网络在计算机系统之间进行时钟同步。自 1985 年以来,NTP 就是目前使用最早的互联网协议之一;
NTP 是由特拉华大学的 David L. Mills 设计的。NTP 旨在在协调世界时(UTC)的几毫秒内同步所有参与的计算机。它使用「交集算法」(Marzullo 算法的修改版本)来选择用于准确的时间服务器,并且旨在减轻可变网络延迟的影响。NTP 通常可以在公共互联网上维持几十毫秒的时间,在理想情况下可以达到局域网内一毫秒以上的精度。不对称路由和网络拥塞可能导致 100ms 或更多的错误;
原理简述

特性特征
能够通过单播、组播、广播完成时间同步;
应用场景
时间同步,NTP 主要应用于网络中所有设备时钟需要保持一致的场合
网络管理:对从不同路由器采集来的日志信息、调试信息进行分析时,需要以时间作为参照依据; 计费系统:要求所有设备的时钟保持一致; 多个系统协同处理同一个复杂事件:为保证正确的执行顺序,多个系统必须参考同一时钟; 备份服务器和客户机之间进行增量备份:要求备份服务器和所有客户机之间的时钟同步; 系统时间:某些应用程序需要知道用户登录系统的时间以及文件修改的时间;
参考文献
Wikipedia/Network Time Protocol: https://en.wikipedia.org/wiki/Network_Time_Protocol Doc:https://www.eecis.ude[……]

READ MORE

「NTP」- 概念、术语

概述介绍

主时间服务器
通过线缆或无线电直接同步到标准参考时钟,标准参考时钟通常是 Radio Clock 或卫星定位系统等;
二级时间服务器
通过网络中的主时间服务器或者其他二级服务器取得同步。二级时间服务器通过 NTP 将时间信息传送到局域网内部的其它主机;
层数(stratum)
层数是对时钟同步情况的一个分级标准,代表了一个时钟的精确度,取值范围 1~15,数值越小,精确度越高;
1:表示时钟精确度最高;15:表示未同步;[……]

READ MORE

「NTP」- 使用客户端来更新时间

可用 NTP 服务器
NTP 授时快速域名服务 官网的 NTP 服务器列表
很少,甚至不敢立“亲测”、“100% 有效”这种 FLAG。但是,本文提供的 NTP 服务器列表以及获取 NTP 服务器地址的方法是很可靠的;
获取有效可用的 NTP 服务器的方法
官网的 NTP 服务器列表:http://www.pool.ntp.org/zone NTP 授时快速域名服务:http://www.ntp.org.cn/pool.php
国内 NTP 服务器列表
这个 NTP 地址来自于腾讯云服务器的定时任务里:

ntpdate ntpupdate.tencentyun.com

下面的地址来自于「NTP 官网中的中国区域」,地址如下:

ntpdate 0.cn.pool.ntp.org
ntpdate 1.cn.pool.ntp.org
ntpdate 2.cn.pool.ntp.org
ntpdate 3.cn.pool.ntp.org

亚洲 NTP 服务器列表
下面的地址来自于「NTP 官网中的亚洲区域」。地址如下:

ntpdate 0.asia.pool.ntp.org
ntpdate 1.asia.pool.ntp.org
ntpdate 2.asia.pool.ntp.org
ntpdate 3.asia.pool.ntp.org

参考文献
How to Install and Configure Linux NTP Server and Client[……]

READ MORE

「Linux」- 使用 chrony 服务

问题描述
是 NTP Server 的另一种实现。适用于经常当关机,经常服务访问网络的系统。
解决方案
第一步、部署 chrony 服务
安装并启动服务

yum install -y chrony

systemctl enable chronyd
systemctl start chronyd

验证服务

chronyc tracking

附加说明
默认情况下 chronyd 对时间的调整是逐步进行的,并不是一次性把时间调整成正确时间。这么做的其中一个原因就是:时间跳跃对某些应用程序是不利的。但是也可以使用 makestep 指令进行时间的快速同步。
实际上 timedatectl 属于 systemd,并不属于 chrony 服务。
参考文献
CentOS / RHEL 7 : Configuring NTP using chrony Chrony client do not change system and hardware date[……]

READ MORE

「Linux」- 搭建 NTP 服务

问题描述
该笔记将记录:在 Linux 中,如何使用 ntpd 搭建 NTP 服务,以及常见问题解决方案。
解决方案
第一步、安装服务

# 系统环境:Ubuntu 14.04.5 LTS
# ntp中包含的是服务端相关的程序文件。
# ntpdate中包含的是客户端相关的程序文件。
apt-get install ntp ntpdate

参考 BLFS7.1.0/ntp-4.2.8p8 文档,以获取源码编译安装的方法。
安装的可执行程序: calc_tickadj,calculates optimal value for tick given ntp drift file. ntp-keygen,generates cryptographic data files used by the NTPv4 authentication and identification schemes. ntp-wait,is useful at boot time, to delay the boot sequence until ntpd has set the time. ntpd,is a ntp daemon that runs in the background and keeps the date and time synchronized based on response from configured ntp servers. It also functions as a ntp server. ntpdate,is a client program that sets the date and time based on the response from an ntp server. This command is deprecated. ntpdc,is used to query the ntp daemon about its current state and to request changes in that state. ntpq,is a utility program used to monitor ntpd operations and determine performance. ntptime,reads and displays time-related kernel variables. ntptrace,traces a chain of ntp servers back to the primary source. sntp,is a Simple Network Time Protocol (SNTP) client. tickadj,reads, and optiona[……]

READ MORE