Relative Content

K4NZDROID

category

「SNMPv2c」- 协议交互

增加两种动作: 1)GetBulk:单次性请求多个 MIB 信息; 2)当告警时:发送 Inform 信息,并要求对端确认,否则重传。 —- SNMPv1 的 Trap 不具备该特性;[……]

READ MORE

「SNMPv3」- 协议交互

SNMPv3 与 SNMPv1 和 SNMPv2c的工作机制基本一致,但添加: 1)报头数据和安全参数; 2)SNMPv3 报文具有身份验证(用户认证)和加密处理的功能; 3)SNMPv3 适用于各种规模的网络,安全性极高。
访问认证
SNMPv3改进了SNMPv1/v2c中的安全方面的缺陷,在基于用户的安全模型(User-Based Security Model)中,主要提供了认证和加密两种服务。
SNMP用户组通过SNMP组名和安全级别共同确定一个SNMP用户组。
SNMPv3定义了3个安全级别: 1)无认证无加密(noAuthNoPriv) 2)有认证无加密(authNoPriv) 3)有认证有加密(authPriv)[……]

READ MORE

「SNMP」- 常见问题处理

客户端工具
GetIf – Get Interface
免费又好用网络管理工具Getif | 请吃下这记安利 Getif 2.x Network Tool
基于 SNMP(简单网络管理协议)的网络管理软件,
# 11/11/2021 1)Getif version 2.3.1,似乎仅支持 SNMP v1 协议; 2)不能在 Windows 10 下安装,我们在 Windows 7 中安装,然后复制到 Windows 10 中;[……]

READ MORE

「Huawei VRP」- 配置 SNMP Agent 服务

参考华为设备手册,以获得更详细的配置说明及注意事项。
基本配置

# 开启 SNMP 功能
[Huawei] snmp-agent

# 配置 SNMP 版本
[Huawei] snmp-agent sys-info version [v1 | v2c | v3] # 设备与网管两侧版本必须一致

# 创建或者更新 MIB 视图的信息(选择可见的 MIB 数据)
[Huawei] snmp-agent mib-view <view-name> { exclude | include } <subtree-name> [mask mask]

# 增加一个新的SNMP组,将该组用户映射到SNMP视图
# 该命令用于SNMPv3版本中创建SNMP组,指定认证加密方式、只读视图、读写视图、通知视图。
# 是安全性需求较高的网管网络中的必需指令。
[Huawei] snmp-agent group v3 <group-name> { authentication | noauth | privacy } [ read-view view-name | write-view view-name | notify-view view-name ]

# 为一个SNMP组添加一个新用户
[Huawei] snmp-agent usm-user v3 <user-name> group <group-name>

# 配置SNMPv3用户认证密码
[Huawei] snmp-agent usm-user v3 <user-name> authentication-mode { md5 | sha | sha2-256 }

# 配置SNMPv3用户加密密码
[Huawei] snmp-agent usm-user v3 <user-name> privacy-mode { aes128 | des56 }

# 配置设备发送 Trap 报文的参数信息
[Huawei] snmp-agent target-host trap-paramsname <paramsname> v3 securityname <securityname> { authentication | noauthnopriv | privacy }

# 配置 Trap 报文的目的主机
# 并打开设备的发送 Trap 告警的功能,需要同时使用
[Huawei] snmp-agent target-host trap-hostname <hostname> address <ipv4-address> trap-paramsname <paramsna[……]

READ MORE

「Linux」- 安装 SNMP 服务

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

apt-get install snmpd

### 安装客户端
apt-get install snmp snmp-mibs-downloader

第二步、修改配置
修改 /etc/snmp/snmpd.conf 文件,取消如下行注释:

rocommunity public localhost

第三步、启动服务

systemctl start snmpd.service
systemctl restart snmpd.service

# 启用开机启动
systemctl enable snmpd.service

# 禁用开机启动
systemctl disable snmpd.service

第四步、测试服务
修改 /etc/snmp/snmp.conf 文件,注释如下行:

mibs :

下载 MBI 项目

# download-mibs

# snmpwalk -v1 -cpublic 127.0.0.1 # 执行测试

常见问题汇总
Timeout: No Response from localhost
问题描述: 执行 snmpwalk -v1 -cpublic localhost 命令,产生如下错误:

Timeout: No Response from localhost

问题原因: 很多文档与教程,使用 snmpwalk -v1 -cpublic localhost 命令进行测试。但是这只有在 /etc/snmp/snmpd.conf 中配置 agentAddress udp:localhost:161 才可以在命令行中使用 localhost 地址。
由于没有详细阅读文档,因此我们未找到具体原因。
解决办法: 使用命令 snmpwalk -v1 -cpublic 127.0.0.1 进行测试。
参考文献
Debain/Wiki/SNMP Installation and configuration of an SNMP client – Ask Ubuntu How To Install and Configure an SNMP Daemon and Client on Ubuntu 18.04 | DigitalOcean[……]

READ MORE

「SSH」- Secure Shell

解决方案
SSH(Secure Shell,安全外壳协议),在非安全网络上提供了安全的远程登录、安全文件传输、TCP/IP安全隧道,实现其他安全网络服务的协议。
SSH 协议由 IETF 制订,最新版本是 v2.0,而 v1.3、v1.5 版本存在安全隐患,已经逐步被淘汰。
原理简述
合法用户通过客户端登录,完成用户名以及对应的密码验证后,客户端会尝试和服务端建立会话,每个会话是一个独立的逻辑通道,可以提供给不同的上层应用使用。
特性特征
不仅在登陆过程中对密码进行加密传送,而且对登陆后执行的命令的数据也进行加密。
SSH支持服务端和客户端的双向认证,提供保密性和完整性等安全服务。
STelnet和SFTP各自利用了其中的一个逻辑通道,通过SSH对数据进行加密,从而实现数据的安全传输。
应用场景
远程管理
参考文献
Wikipedia/Secure Shell
RFC: https://tools.ietf.org/html/rfc4251.html https://tools.ietf.org/html/rfc4252.html https://tools.ietf.org/html/rfc4253.html https://tools.ietf.org/html/rfc4254.html https://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html[……]

READ MORE

「SSH」- 常见问题处理

SSH Over USB
Dropbear
Homepage: https://matt.ucc.asn.au/dropbear/dropbear.html 用SSH连接你的android手机: http://blog.chinaunix.net/uid-22915173-id-301168.html
PSSH – Parallel SSH
Homepage: https://code.google.com/archive/p/parallel-ssh[……]

READ MORE

「Huawei VRP」- 通过 SSH 登录

问题描述
通过 telnet 登录设备,对帐号密码的输入不够友好(无法自动登录,需要使用 except 工具配合),也不够安全。
好在华为设备支持 SSH(STelnet)登录,这样我们便能通过本地工具,并使用密钥等安全方式登录设备。
该笔记将记录:如何配置 Huawei 路由交换设备,以实现通过 SSH 登录,以及相关问题解决方法。
解决方案
参考 设备文档/配置通过STelnet登录设备 文档,以获取配置 SSH 登录设备的细节说明。
实验示例

注意事项:模拟器环境仅演示部分基础操作,实际环境操作建议参照设备手册(两者命令存在出入);
密码登录

// 配置 VTY 认证方式
user-interface vty 0 4
authentication-mode aaa
protocol inbound all # SSH + Telnet

// 配置用户的服务类型
aaa
local-user client001 password cipher Huawei@123
local-user client001 privilege level 3
local-user client001 service-type ssh # 注意保留原始用户服务类型

// 进行用户相关配置
ssh user client001 authentication-type password

// 开启 SSH 服务
stelnet server enable

客户端密码登录测试:

[AR1]ssh client first-time enable
[AR1]stelnet 10.0.0.3

<AR3>

密钥登录
在 AR2 中,创建密钥对:

[AR2]rsa local-key-pair create

[AR2]display rsa local-key-pair public
… # 注意,公钥为 Key name: Host 部分

在 AR3 中,添加公钥:

[AR3]rsa peer-public-key AR2
[AR3-rsa-public-key]public-key-code begin
[AR3-rsa-key-code]3047

[AR3-rsa-key-code] 010001
[AR3-rsa-key-code]public-key-code end
[AR3-rsa-public-key]peer-public-key end

在 AR3 中,配置认证方式:

// 配置[……]

READ MORE

「OpenSSH」- 在 Kubernetes 中,部署 OpenSSH 服务

问题描述
某个网络是隔离的(出于安全原因),所以其中的主机、服务(MySQL Redis)都是对外隔离的,无法直接访问。
通过 SSH Server 来作为跳板机,通过 SSH Tunnel 来访问,所以我们才会在 Kubernetes 中部署 SSH 服务。
该笔记将记录:在 Kubernetes 中,如何部署 OpenSSH 服务,以及相关问题的解决方法。
解决方案
通过 OpenSSH Server 镜像
镜像:linuxserver/openssh-server – Docker Image | Docker Hub
通过 Helm 部署
ssh-bastion 1.0.0 · helm/t3n helm-charts/ssh-bastion at master · t3n/helm-charts bash – Openssh Private Key to RSA Private Key – Stack Overflow
但为了简便,我们通过 Helm 进行部署:ssh-bastion 1.0.0 · helm/t3n

ssh-keygen -p -N “” -m pem -f /path/to/host-key # 生成 Host Key(RSA PRIVATE KEY)

# users.dummy:指定 SSH 公钥
# host.keys:用于创建 Host Key
helm install ssh-bastion t3n/ssh-bastion \
–set users.dummy=”$(cat /home/k4nz/.ssh/id_rsa.pub)” \
–set host.keys=”$(cat /path/to/host-key)”[……]

READ MORE

「OpenSSH」- 在远程服务器中执行命令

问题描述
为了维护服务器,我们通常使用 SSH 连接到服务器,然后开始敲入命令,回车执行。
但是,有的时候,我们需要在多台远程主机中,执行多条命令。此时,我们总不能 SSH 登录每台机器,然后人工输入执行吧。
该笔记将记录:在远程主机中,如何使用 OpenSSH 非交互式的执行命令的方法,以及常见问题处理。
解决方案
在远程主机中,执行单条命令
执行如下命令,将在远程服务上创建 /tmp/foo 目录:

ssh -n root@remote-ip-address ‘mkdir -pv /tmp/foo’

为什么需要使用 -n 选项?参考 常见问题处理 部分。
在远程主机中,执行多条命令
如果需要执行多行命令,可以使用如下形式:

ssh root@remote-ip-address << EOF
# cmd1
# cmd2
# cmd3
EOF

常见问题处理
关闭 MOTD 消息
linux – Stop ssh login from printing motd from the client? – Server Fault Disable motd news or (parts of) the dynamic motd on Ubuntu – Raymii.org
MOTD,message of the day,每次登录服务器的时候,都会显示很多行消息,那就是 MOTD 消息。但是,我们从来都不看,也不知道有多少人认真看这些消息。
现在的问题是:通过 SSH 远程执行命令时,每次都会显示这些消息,导致命令的日志输出混乱。我们希望可以抑制这些消息。
有以下解决方法: 1)在远程服务器中,创建 ~/.hushlogin 文件(不需要写入任何内容)。该方法仅是禁用登录用户的消息,其他用户依旧会提示 MOTD 消息。 2)如果要禁用所有用户的 MOTD 消息,需要修改 SSH 服务配置。在我们的环境中,我们没有采用这种方式(因为没有必要)。这里仅做记录:

// 修改 /etc/ssh/sshd_config 文件,进行如下配置

PrintMotd no
PrintLastLog no

// 修改 /etc/pam.d/ssh 文件,注释如下配置行

# session optional pam_motd.so

在 Ubuntu 中,通过 vim /etc/default/motd-news: ENABLED=0 来禁用;
命令 while read ssh 仅循环一次(-n)
如下脚本,将执行三次,并输出信息:

ser[……]

READ MORE

「SSH」- 找出登录服务器所使用的公钥

问题描述
在~/.ssh/authorized_keys中放了一堆公钥
那怎么知道某个用户登录时使用了哪个公钥呢?
解决办法
第一步、查看日志,找到密钥指纹
查看SSH的日志(两种方式皆可):

# journalctl -f -u ssh.service
# grep RSA /var/log/auth.log

在日志中你可以看到如下信息:

Accepted publickey for root from 1.2.3.4 port 5678 ssh2: RSA 73:ce:74:a3:13:8f:75:e6:f9:77:7b:17:8b:c5:b7:a2

后面的73:ce:74:a3:13:8f:75:e6:f9:77:7b:17:8b:c5:b7:a2就是指纹,公钥的指纹。
第二步、打印所有公钥的指纹
执行如下命令:

#!/bin/sh

p=”$(mktemp)”

cat ~/.ssh/authorized_keys | \
while IFS=”$(printf ‘\n’)” read key
do

echo $key > $p
ssh-keygen -lf $p

done

rm -f $p

第三步、肉眼对比
差不多得了,用眼看看吧。实在不行就GREP过滤一下。
参考文献
Is it possible to get OpenSSH to log the public key that was used in authentication? Can I find out which ssh key was used to access an account? Log key fingerprints used to login via SSH[……]

READ MORE

「OpenSSH」- 保持SSH在线(不掉线、不断开)

问题描述
在使用SSH远程服务器时,如果在一段时间内未进行任何操作,则连接会断开(或者挂起,无响应)。
本文将介绍如何配置SSH客户端,以解决该问题。
问题原因
该问题的原因由很多: 1)可能是当前使用的NAT防火墙自动关闭会话; 2)可能是远程服务器操作系统自动关闭空闲会话(当前TCP连接长时间没有数据流动)
这些都会导致连接被释放(断开)。
解决办法
可以定期向服务器发送报文,以暗示服务器该连接是使用中,请不要释放。
在SSH中,有两个ServerAliveCountMax与ServerAliveInterval选项,可以实现该功能。
修改/etc/ssh/ssh_config(系统级别)或~/.ssh/config(用户级别):

Host *
ServerAliveInterval 300
ServerAliveCountMax 5

上述配置表示,如果超过300秒(ServerAliveInterval)没有收到服务端发送的报文,则客户端发送一个消息,并要求服务器返回。如果服务器没有返回,则再次重试,最多5次(ServerAliveCountMax),如果一直没有收到服务端的响应,则断开连接。
超时自动断开的使用
虽然自动断开连接不好的,但是它也有其他的用途。比如在远程使用ssh执行命令时,我们希望超时自动断开:

ssh -o ServerAliveInterval=2 -o ServerAliveCountMax=2 root@ip-address “doing some stuff”

在执行以上命令后,如果服务器断开连接(比如修改网络配置),在四秒钟后,客户端将断开连接。
附加说明
# 在服务端配置
上述解决方案,只是针对客户端的配置。实际上,还可以就是SSH服务端/etc/ssh/sshd_config配置:

ClientAliveInterval 300
ClientAliveCountMax 2

参数含义是类似的,但是该配置会作用于每一个连接。
当大量用户反馈SSH掉线频繁时,可以考虑修改SSH服务端的配置文件。在日常中,可能修改SSH客户端配置才是更常见的做法。
# 存活报文
有客户端发送的存活报文类型为80,而服务端相应的报文类型为82,这一点可以通过ssh -vvv进行查看。并且报文是通过加密信道发送的,不同于TCPKeepAlive,因为TCPKeepAlive是可以欺骗的。
# 其他客户端
本文针对SSH客户端,即ssh(1)命令。对于PuTTY、SecureCRT、XShell等等客户端都是类似的,这些软件的设[……]

READ MORE

「OpenSSH」- 端口转发

问题描述
本地转发,将本地连接转发到远程服务器;远程转发,将本地服务映射到远程主机的端口上;动态转发,类似于 SOCKS 代理功能。
该笔记将记录:与 SSH 端口转发有关的内容。
动态转发(SSH -D)
功能介绍
该功能实际上使用SOCKS协议,因此经常被用来科学上网。使用动态转发,只要是远程主机可以访问的站点,客户端也可以访问(所以说是科学上网嘛)。
如何配置
执行如下命令即可,然后配置应用程序,使用SOCKS协议即可。

ssh -D 8888 user@remoteserver

使用场景
1)网络加速。当时由SSH提供的SOCKS协议具有某些特征,容易被长城牌子的防火墙识别,因此作用也不是很大。
本地转发(SSH -L)
功能介绍
该功能在本地监听一个端口,该端口的连接被转发到远程主机的特定端口。相当于把远程端口映射到本地,即“将远程端口放在本地”。
如何配置
如下命令,监听本地的 9999 端口,任何访问 9999 的客户端,都相当于访问远程主机 xample.com 的80端口,但是流量是通过 remoteserver 的,并且所有流量都被加密:

ssh -L 0.0.0.0:9999:example.com:80 user@remote.server

# 上述命令涉及到三台主机:
# 本地主机:0.0.0.0
# 目标主机:example.com,这是我们要访问的主机
# 代理主机:remote.server,也是我们的跳板机

还有一种变体:目标主机与代理主机可以是同一台主机,即将remote.server服务映射到本地:

ssh -L 0.0.0.0:9999:127.0.0.1:6379 user@remote.server

出于安全考虑,在远程主机中的某个服务只监听了6379端口,但是另一台主机想访问该服务。此时,我们便可以将服务通过SSH映射到该主机上。
使用场景
1)流量加密。比如,你在远程主机上搭建HTTP代理,但是,如果你直接使用它,容易被发现(比如被防火墙屏蔽),这时可以加一层SSH转发,将远程的HTTP端口映射到本地。现在(09/21/2019)SOCKS协议已经可以被检测到,所以不要直接访问SOCKS主机,可以将流量通过SSH进行代理。
2)服务安全。比如,上面的“变体”,明白人已经看出来6379是REDIS服务了,由于REDIS的安全性较弱,可以通过该方法提高安全性(这只是一个主意,还有很多细节需要测试,比如性能、可用性、稳定性等等)。
远程转发(SSH -R)
功能介绍
与“本地转发”正好相反,该功能在远程监听一个端口,该端口的[……]

READ MORE

「OpenSSH」- 常见问题整理

常见问题的常规排查方法
当 OpenSSH 服务无法连接时,或者行为与预期不符时,有以下两种方法(通用且极其有效的方法): 1)执行 ssh 时,添加-v 选项(或者更多-v 选项),以进入调试模式; 2)手动启动 sshd 服务,添加-d 选项(或者更多-d 选型),以进入调试模式;
这么多年,它已经非常成熟,我们遇到的问题通常可以通过日志提示进行解决;
Too many authentication failures
How to Fix “SSH Too Many Authentication Failures” Error

# ssh -o IdentitiesOnly=yes “<hostname>”

OpenSSH Slow: Hanging at SSH2_MSG_SERVICE_ACCEPT received
[FIXED] OpenSSH Slow: Hanging at SSH2_MSG_SERVICE_ACCEPT received
问题描述: 在用户密码输入提示出现之前,总要等待一段时间,在一会之后密码提示符才会才会显示出来;
问题原因: 修改 SSHD 的LogLevel DEBUG3后,日志中显示 SSHD 服务尝试解析客户端的 IP 地址;
Could not open a connection to your authentication agent.
git – Could not open a connection to your authentication agent – Stack Overflow
当执行 ssh-add 命令时,产生如下错误:

# ssh-add /path/to/id_ras
Could not open a connection to your authentication agent.

问题原因
在环境变量中,相关参数未设置,导致程序无法找到 ssh-agent 服务。需要设置的变量如下:

# ssh-agent -s
SSH_AUTH_SOCK=/tmp/ssh-SUEIyA5guxOn/agent.3917; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3918; export SSH_AGENT_PID;
echo Agent pid 3918;

解决方案

# source <(ssh-agent -s) >/dev/null

UseDNS – 指定 sshd(8)是否应查找远程 SSH 客户端主机名,并检查”通过远程客户端 IP 地址的解析到的主机名“是否映[……]

READ MORE

「Telnet」- TELetype NETwork

解决方案
虽然现在(08/02/2021)Telnet 几近淘汰,但是在网络设备管理中,我们依旧需要 Telnet 远程连接到设备上(而无需直连物理设备),进行集中管理。
此外,命令 telnet 也经常被用作端口连通性测试。
原理简述

特性特征
WIP
应用场景
网络设备管理、端口连通性测试
概念术语
默认端口
23
认证方式
在网络设备中:AAA,需要使用使用用户名、密码认证;Password,仅需要密码认证;
报文格式
WIP
协议细节
WIP
配置使用
Huawei VRP (Telnet)
参考文献
Telnet – Wikipedia[……]

READ MORE

「Huawei VRP」- Telnet

解决方案
应用场景
为方便通过命令行管理设备,可以使用 Telnet 协议对设备进行管理;
Telnet 协议与使用 Console 接口管理设备不同,无需专用线缆直连设备的 Console 接口,只要 IP 地址可达、能够和设备的 TCP 23 端口通信即可;
支持通过 Telnet 协议进行管理的设备被称为 Telnet 服务器端,而对应的终端则被称为 Telnet 客户端。很多网络设备同时支持作为 Telnet 服务器端、Telnet 客户端;
概念术语
VTY(Virtual Type Terminal,虚拟类型终端)
当用户使用 Console 接口、Telnet 等方式登录设备的时候,系统会分配一个用户界面(user-interface)来管理、监控设备与用户间的当前会话,每个用户界面视图可以配置一系列参数用于指定用户的认证方式、登录后的权限级别,当用户登录设备后将会受这些参数限制;
Telnet 所对应的用户界面类型为 VTY(Virtual Type Terminal,虚拟类型终端);
配置使用
配置示例
针对 eNSP 环境:

[Huawei] telnet server enable

[Huawei] aaa
[Huawei-aaa] local-user huawei password irreversible-cipher Huawei@123
[Huawei-aaa] local-user huawei privilege level 15
[Huawei-aaa] local-user huawei service-type telnet

[Huawei] user-interface vty 0 4
[Huawei-ui-vty0-4] authentication-mode aaa
[Huawei-ui-vty0-4] protocol inbound { all | telnet } # 缺省情况下,VTY 用户界面支持的协议是 SSH 和 Telnet

补充说明: 1)在物理设备上操作时,操作过程存在细微差异,需要参考设备手册,以获取配置方法;
命令说明

# 开启 Telnet 服务器端功能
# 使能设备的 Telnet 服务器端功能;
# 缺省情况下,设备的 Telnet 服务器端功能处于去使能状态,undo telnet server enable 即可重新关闭 Telnet 服务器端功能;
[Huawei] telnet server enable

# 进入用户视图
# 配置 VTY 用户界面支持的协议
[Huawei] user-interface vty first-ui-number [ las[……]

READ MORE

「NETWORK-AUTOMATION」- 网络自动化

问题描述
从计算机网络产生的第一天起,网络变得越来越复杂且难以管理,这体现在: 1)网络设备多种多样:网络设备越来越多种多样,例如路由器、交换机、防火墙、IDS 等; 2)设备管理方式不同:厂家的设备管理方式不同,甚至同厂家不同型号设备管理方式也不同;设备管理方式多种多样,例如 SNMP/CLI/IPFIX/Web-UI 等。 3)设备特性繁多:设备复杂导致网络管理复杂。 4)多种管理平台:各厂家都具有各自的管理平台,导致需要运行多套网络管理系统; 5)网络管理复杂:各个网络环境配置实现复杂多样,在管理的过程中,要保证不破坏当前环境;

随着网络规模的增大、复杂性的增加,以上传统的方式已经不能满足配置管理的需求。同时 CLI 方式与设备交互存在效率较低、机器不容易理解命令等问题。
解决方案
现代网络管理
2002 年 IAB(Internet Architecture Board,因特网体系委员会)网络管理大会上提出 14 项网络管理本质诉求,具体如下: 01)易用 02)区分配置数据和状态数据 03)能够分别获取配置数据和状态数据,并且可以跨设备的比较 04)网络级的业务配置能力(未实现) 05)支持网络级配置事务(未实现) 06)设备解决内部的配置次序,避免不必要的变化 07)支持配置备份和恢复 08)支持配置校验,包括网络级的配置校验(已实现) 09)要有标准的数据模型,统一数据格式 10)基于文本的配置(已实现) 11)基于角色的访问控制和最小授权 12)可以跨设备对访问控制列表进行一致性检查 13)支持多个配置集,区分配置和激活 14)支持面向数据的和面向任务的访问控制
IETF 逐步落实 IAB 会议结论。为了解决这样的问题,基于可扩展标记语言 XML 的 NETCONF 协议应运而生。IETF 为了解决设备配置管理复杂的问题,先后成立工作组,不同的工作组逐步完善14大诉求。
网络产业发展的方向是让网络变得更加开放、灵活、简单,同时用户也希望能够构建意图驱动的智简网络环境。所以,网络开放可编程,是智简网络的必由之路。同时,人工智能正在使能千行百业,人工智能和网络结合,其也是大势所趋。
Huawei,网络人工智能引擎 iMaster NAIE 产品; Cisco DevNet,将编程融入网络,通过程序来管理网络。[……]

READ MORE

「NETWORK-AUTOMATION」- 网络自动化的概述(概念)

网络架构的变革
SDN(Software Defined Networking,软件定义网络)带来了网络架构的变革。它引入网络控制器,通过全局视角集中控制,实现业务快速部署、流量调优、网络业务开放等目标。简单说,遵照标准与规范的要求,通过中心化的控制器,来管理所有网络设备。
初级网络自动化
网络自动化,即通过工具实现网络自动化部署和运维,逐步减少对“人”的依赖。
业界有很多实现网络自动化的开源工具,例如 Ansible、SaltStack、Puppet、Chef 等。这些工具通过 SSH 连接到设备实现批量化的操作和管理,实现初级的网络自动化。
网络自动化关键词:Ansible、Chef、网管工具、Python、SaltStack、自动化脚本、Shell
网络自动化的发展
初级网络自动化基于CLI方式管理网络,其痛点在于网络设备返回的是非结构化数据(文本回显),不利于计算机处理。
网络自动化发展的基础需求是设备提供结构化的数据,这可以极大地推进网络自动化的进程。设备开放 NETCONF/RESTCONF 接口,提供 XML 或 JSON 格式的数据类型。
结构化的数据 vs 非结构化数据:

// 结构化数据:
// 机器易于理解和处理
// NETCONF、RESTCONF

{
“Interfaces”: {
“GigabitEthernet0/0/0”: { “InUti”: “10”, “OutUti”: “20”, “inErrors”: “0”, “outErrors”: “0” },
“GigabitEthernet0/0/1″: { “InUti”: “20”, “OutUti”: “30″, “inErrors”: “0”, “outErrors”: “0” }
}
}

// 非结构化数据:
// 人易于理解,但机器很难处理,不利于自动化;
// 通常来自 CLI/SSH、SNMP 的输出;

Interface InUti OutUti inErrors outErrors
GigabitEthernet0/0/0 10% 20% 0 0
GigabitEthernet0/0/1 20% 30% 0 0

网络开放与可编程简介
网络开放与可编程,即:在开放网络的前提下,使用编程的手段实现自动化的网络。 在 SDN 商用初期及未来更长的时间,传统网络和SDN会大规模的并存。网络的开放体现在两个层面:设备的开放 和 SDN 平[……]

READ MORE

「NETWORK-AUTOMATION」- 网络自动化:工程师(岗位)

网络工程师:是在网络工程领域,掌握专业的网络技术,具备一定的职业技能及职业素养,具有一定项目实施经验,能够在项目现场与客户或者其他项目干系人充分沟通,根据客户的需求及环境因素制定实施方案及项目计划(得到项目干系人认可),并充分调动各方资源保证项目按时、保质保量落地,以及在项目实施后对干系人进行培训及工程文档交付的职业。
网络自动化开发工程师:在网络工程领域,掌握专业的网络和开发技术,具备一定的职业技能及职业素养,具有一定项目实施和开发经验,满足企业网络自动化部署、开发和运维需求的职业。
综合能力模型
和网络工程师综合能力模型对比,网络自动化开发工程师具备相同的基本素质和职业技能,但在专业知识上有不同技能要求。

专业知识技能
网络自动化开发工程师专业技能上需要具备网络工程师、系统工程师和开发工程师的融合能力,包括但不限于: 1)源代码管理:源代码控制可以帮助开发人员管理和存储代码。 2)编程语言:掌握至少一种编程语言。 3)操作系统:了解操作系统的基本原理和机制。 4)网络技术:掌握基本的网络协议原理和网络工程技术。 5)开放网络结构:掌握开放网络的数据结构和资源结构。 6)其他专业知识:其他相关专业知识,例如数据库等。
注:由于具体工作内容和场景的不同,网络自动化开发者可能需要具备更多的专业知识,例如数据库、算法、密码学、软件开发生命周期管理、开发框架、大数据、云计算、人工智能等知识。[……]

READ MORE

「NETWORK-AUTOMATION」- 网络自动化编程的分类(根据位置的分类)

设备开放可编程(通过编程来管理设备)
设备开放可编程定位于指导工程师根据设备开放能力进行编程从而实现网络自动化。
华为网络设备的开放能力
如下图所示:
最后的「上传.py文件」,是指在网络设备中执行 Python 代码的能力;
NCE 北向开放(通过编程来管理控制器)
控制器开放可编程定位于指导工程师根据SDN控制器开放能力进行编程从而实现网络自动化。
华为 iMaster NCE 提供北向开放 RESTful API

华为 iMaster NCE 业务开放可编程
iMaster NCE 业务开放可编程是 iMaster NCE 产品的一个子系统,提供端到端的开放可编程能力,包括网元层功能和网络业务功能的开放。

网元驱动包
网元驱动包(Specific NE Driver,SND),以设备 YANG 模型抽象设备能力。用户根据设备 YANG 文件和少量编写的 Python 代码生成网元驱动包。将此驱动包上传 iMaster NCE 后即可实现设备管理和设备业务发放。
SND 的类型包括: 1)NETCONF SND:提供 YANG 到 NETCONF 转换能力; 2)CLI SND:提供 YANG 到 CLI 的转换能力; 3)Customized SND:提供 YANG 到其它协议的转换能力,例如 RESTCONF 等等;
业务包
业务包(Specific Service Plugin,SSP),支持用户自定义网络业务(APP),例如快速开通L3 VPN业务。此类型业务或应用涉及多设备、多协议配合,以业务包形式呈现。业务包的编写需要编写业务YANG文件、业务映射的Python脚本(业务回调逻辑)、jinja2模板。
基本原理
整体的工作其基本原理是(从北到南): 1)业务模型自动生成北向接口或者UI,被外部调用发起业务请求。 2)业务请求被用户编写的业务逻辑处理。处理包括两个部分,Python代码处理和jinja模板处理。 3)Python代码处理实现与厂家无关的业务逻辑。 4)模板处理实现与厂家相关的逻辑。模板就是给设备模型下发的数据,不同厂家有不同的模板。至此实现了自定义的业务模型向设备模型的转换。 5)最后由 SND 处理把设备模型转换为协议报文下发到设备,例如通过 NETCONF 下发到设备。
应用场景
工程师通过编写 SND 和 SSP 实现: 1)用户自定义网络业务 2)异厂家的设备管理 3)基于Web的业务管理 4)自动生成北向 RESTful API 开放[……]

READ MORE

「 NETCONF」- 网络配置协议(Network Configuration Protocol)

问题描述
对于设备的配置管理,工程师更习惯使用CLI命令行的方式与设备交互。该方式简单直接,便于理解。但是在网络自动化领域,CLI 方式与设备交互存在效率较低、机器不容易理解命令等问题。
此外,SNMP 并不是面向配置的协议,随着网络规模的增大、复杂性的增加,SNMP已经不能适应当前复杂网络的管理,特别是不能满足配置管理的需求。
解决方案
IETF 为了解决设备配置管理复杂的问题,先后成立工作组,IETF 同时发布 NETCONF、YANG、RESTCONF 相关标准:

NETCONF(Network Configuration Protocol)网络配置协议,提供一套管理网络设备的机制。用户可以使用这套机制增加、修改、删除网络设备的配置,获取网络设备的配置和状态信息,其替代传统的命令行模式。
补充说明
无论配置自动化技术如何发展,本质仍然是使用 CLI 进行交互,只是代替人工进行操作。
原理简述
通过 NETCONF 协议,来完成对设备的管理:
特性特征
NETCONF,是种基于 XML 来完成网络设备配置管理的协议,消息以 XML 格式呈现,Edit 功能可以支持网路配置管理,Get 功能可以支持网络监控管理; NETCONF 使用 SSH 实现安全传输,使用 RPC(Remote Procedure Call)远程调用的机制实现客户端和服务端的通信;
其提供一套管理网络设备的机制,采用基于数据编码的可扩展标记语言配置数据以及协议信息,提供安装、操作、删除网元配置的机制; 其存在的目的在于用可编程的方式实现网络配置的自动化,从而简化、加速网络服务地部署;

NETCONF的优势: 可扩展性强,数据结构化、协议标准化。 采用分层框架,丰富的协议操作。 支持多个配置库,实现事务机制验证回滚。 能够分别获取配置数据和状态数据,并且可以跨设备的比较。 支持网络级的业务配置能力,支持网络级配置事务。 支持配置备份和恢复。
应用场景
网络自动化:WIP
参考文献
NETCONF – Wikipedia[……]

READ MORE

「NETCONF」- 概念术语

结构模型
NETCONF 有三个对象:NETCONF Client、NETCONF Server、NETCONF Message;

XML and NETCONF
XML 是 NETCONF 协议的编码格式。NETCONF 用文本文件表示复杂的层次化数据。请求 ⇒ 响应,使用 XML 格式。

协议层次(逻辑分层)
在概念上,NETCONF 协议可以划分为 4 层:安全传输层、消息层、操作层、内容层。

安全传输层(Secure Transport Layer)
为客户端和服务器之间交互提供通讯路径。
当前华为使用 SSH 协议作为 NETCONF 协议的承载协议,通过 SSH 来实现 NETCONF 安全传输,所以需要创建 SSH user 作为 NETCONF 用户登陆。
消息层(Messages Layer)
使用 RPC(Remote Procedure Call)远程调用的机制实现客户端和服务端的通信。
提供一种简单的不依赖传输协议层的RPC请求和回应机制: Client把RPC请求内容封装在一个<rpc>元素内,发送给Server; Server把请求处理结果封装在一个<rpc-reply>元素内,回应给Client。
其 RPC 的框架与传输层独立,用于表示 NETCONF requests 和response; 1)<rpc>用于封装从客户端到服务端的NETCONF请求。头部定义message-id标示序列。 2)<rpc-reply>用户服务端回复<rpc>的response消息。头部message-id保持一致。<rpc-error>:在<rpc-reply>中被发送。一个<rpc-reply>可以包含多个<rpc-error>;<ok>:在<rpc-reply>中被发送,表示没有错误和没有数据返回;
操作层(Operations Layer)
定义一组基本的操作,作为RPC的调用方法,这些操作组成 NETCONF 基本能力。
操作对象有三个配置库。可以灵活读取和编辑配置库、候选库与运行库,实现整体配置的下发、验证和回滚:
场景分类、操作、功能描述: 1)查询数据:<get-config>,查询配置数据;<get>,查询设备当前运行的配置和状态数据; 2)编辑数据:<edit-config>,修改、创建、删除配置数据; 3)备份恢复:<copy-config>,导出配置,或用一套配置数据整体替换另一套配置数据;<delet[……]

READ MORE

「NETCONF」- 常见问题处理

配置案例(华为)

# NETCONF 使用 SSH 作为承载协议。在使用前必须配置 SSH 访问。

# 进入 NETCONF 视图
[Huawei] netconf

# 配置 NETCONF 服务端口号
# 在 830 端口号上使能 SSH 服务器的 NETCONF 服务;
[Huawei-netconf] protocol inbound ssh port 830

# 使能 NETCONF 功能。
# 在 TCP 22端口号上使能SSH服务器的NETCONF服务。
# snetconf server enable和protocol inbound ssh port 830都可以使能NETCONF功能。
# 如果这两个命令都配置,表示客户端可以使用22端口号或830端口号与服务器建立NETCONF连接。
[Huawei] snetconf server enable[……]

READ MORE

「RESTCONF」- RESTful in NETCONF

解决方案
2017年,IETF发布RFC8040 RESTCONF协议规范。
RESTCONF允许Web应用以一种模块化、可扩展的方式访问网络设备的配置数据、状态数据和事件通知。
原理简述

简单说,多了中管理设备的手段。
特性特征
RESTCONF 使用 HTTP 的方法对设备YANG定义的数据进行操作(CRUD)。 设备 NETCONF 和 RESTCONF 可以共享YANG文件。 数据编码格式支持 XML 或 JSON; NETCONF和RESTCONF支持共存。
RESTCONF接口也是遵循了REST设计风格的接口,和RESTful接口相比,RESTCONF还额外需要遵循IETF定义的RFC8040的协议标准。RFC8040标准定义了RESTCONF接口的定义和设计规范。RESTCONF接口基于HTTP协议,用于访问YANG中定义的数据。它允许Web应用以一种模块化、可扩展的方式访问网络设备的配置数据、状态数据和事件通知等等。[……]

READ MORE

「RESTCONF」- 概念术语

RESTCONF vs. NETCONF
NETCONF,操作设备多个配置库,有事务机制,有回滚。 RESTCONF,使用HTTP的操作,无状态,无事务机制,无回滚。
RESTCONF基于HTTP构建传输层、消息层、操作层; NETCONF使用SSH为传输层、RPC为消息层和NETCONF定义的操作层。

典型的 RESTCONF 交互
完整的 RESTCONF 交互包含请求和响应。

在本例中, 1)客户端通过OPTIONS方法获取设备支持的操作方法。 2)然后,设备回复支持操作有:POST、DELETE、GET、HEAD、PATCH、OPTIONS。
请求报文
如下示例,RESTCONF请求对象地址为192.168.56.100。修改数据配置数据domainName为abc,修改accessLimit值为10。
响应报文
RESTCONF响应报文: 返回状态码201,表示资源创建成功。 头部信息Content-Type和Content-Length,描述Body信息。Body数据类型为XML,内容长度为0。[……]

READ MORE

「YANG」- Yet Another Next Generation

问题描述
虽然 NETCONF 协议标准化,但是却没有对数据内容标准化 —— 也就是说,如果没有统一的数据结构,那么针对不同的厂家,需要使用不同的 NETCONF XML 配置。
数据模型(Data Model)是对数据特征的抽象和表达:
解决方案
YANG(Yet Another Next Generation)是一种数据建模语言,实现 NETCONF 数据内容的标准化。它是通过 NETCONF 所发数据的数据建模语言,可以用来建模网元的配置数据和状态数据。
原理简述
YANG 模型定义了数据的层次化结构(数据的存储内容、配置),可用于基于 NETCONF 的操作。建模对象包括配置、状态数据、远程过程调用和通知。它可以对 NETCONF 客户端和服务器端之间发送的所有数据进行一个完整的描述。

特性特征
1)基于层次化的树状结构建模。 2)数据模型以模块和子模块呈现。 3)可以和基于XML的语法的 YIN(YANG Indepent Notation)模型无损转换。 4)定义内置的数据类型和允许可扩展类型。
YANG模型的最终呈现是.yang为后缀的文件。[……]

READ MORE

「YANG」- 概念术语

认识 YANG 文件
Module
一个YANG文件通常可以定义为一个模块(module)或者子模块(submodule)。模块和子模块都可以引用其他的模块模型文件,通过该引用能够使用其他模块定义的数据类型和结构。
模块包含多个申明,包括: YANG的版本信息,1.0或1.1 YANG的命名空间,IETF YANG或Openconfig YANG 机构信息 联系人 文件描述 修订信息

module example-system {
yang-version 1.1;
namespace “urn:example:system”;
prefix “sys”;

organization “Example Inc.”;
contact “joe@example.com”;
description
“The module for entities implementing the Example system.”;

revision 2007-06-09 {
description “Initial revision.”;
}

container system {
leaf host-name {…}
contrainer login{…}
}
container X {…}
}

Leaf Node
Leaf Node 用于定义一个简单指定类型的变量,使用“leaf”关键字申明。

leaf host-name {
type string;
description
“Hostname for this system.”;
}

在 Leaf Node 中,仅有子声明和值,没有子节点。对应 XML 格式为:

<host-name>my.example.com</host-name>

本例中“host-name”内有两个子声明: 1)“type”含义为取值的类型,本例为“string”字符串。 2)“description”含义为描述。
Leaf List
Leaf List用于定义一个数组类型变量,使用“leaf-list”关键字申明。

leaf-list domain-search {
type string;
description
“List of domain na[……]

READ MORE

「NETWORK-AUTOMATION」- 网络人工智能概述

通用目的技术(General Purpose Technology,GPT)是推进经济社会转型的主要动力。从农业社会到工业社会,从工业社会到信息社会,人类社会的生产方式、生活方式和管理方式发生了巨大的变革,经历了前所未有的经济社会转型。长期以来,人们一直在思索和探寻经济社会发展与转型的动因。从蒸汽机为代表的第一次产业技术革命到以电力技术为代表的第二次产业技术革命。纵观300年来的产业技术革命,可以看出,科学技术是推进经济持续增长的重要源泉。AI已成为新的通用目的技术。当前AI热门技术进入落地阶段,广泛地使能千行百业。
AI 是种新的通用目的技术

AI 引入网络成为产业共识

AI 落地面临着诸多的挑战

从技术上来看,AI用例训练过程需要跨专业(数据、算法专家、专家经验)联合开发,模型优化需要不断迭代训练,有以下难点: 1)AI项目的成功需要业务专家与AI专家的配合 2)业务专家转型AI专家困难重重 3)数据问题,数据来源少,数据需要治理(劳动密集) 4)算法工程化问题(从paper转换到代码,开源算法的效率) 5)算力难获取,算力是峰值使用的(英伟达禁止使用G系列显卡用于数据中心)
AI本质上会带来的是组织转型,从人力走向人机共存的AI Ops阶段。
网络人工智能引擎 —— iMaster NAIE
网络人工智能引擎iMaster NAIE是华为将AI技术引入到电信网络中的一站式AI应用开发云平台。基于公有云模式,提供数据服务,模型训练服务、模型生成服务和通信模型服务,涵盖了网络AI应用开发业务中最复杂部分的工作,如数据准备,数据特征探索,模型调优等,便于开发者快速获取到NAIE能力。
应用场景:智能流量分拣
需求描述
数据中心网络中同时承载着多种业务,常见有大数据业务、分布式存储业务、高性能计算业务、GPU集群等。流量分拣就是数据中心交换机实现对流量报文进行识别分类,确定每个数据流或者数据报文属于哪种业务。
解决方案
基于华为AI Fabric交换机嵌入式AI平台API(兼容Tensorflow和Caffe),实现一个流量分类的AI算法。
智能流量分拣模型训练:智能流量分拣实现需要的数据集、算法模型和训练环境均可由iMaster NAIE提供。

实验最终的目的是将训练好的模型部署到真实的环境中,因此我们希望训练好的模型能够在真实的数据上得到好的预测效果,即希望模型在真实数据上预测的结果和真实结果误差越小越好。最好的方式就是将真实数据区分为训练数据集和测试数据集。我们可以使用训练集的数据来训练模型,然后用测试集上的误差作为最终模型在应对现实场景中的误差。有了测试集,我们想要验证模型的最终效果,只需将训练好的模型在测试集上计算误差。误差越[……]

READ MORE

「NETWORKING」- 网络割接(Network migration)

问题描述
随着企业业务的不断发展,企业网络为了适应业务的需求不断的改造和优化,例如:IPv4网络升级为IPv6网络、IS-IS Level修改、VPN架构整改。
解决方案
无论是硬件的扩容、软件的升级、配置的变更,凡是影响现网运行业务的操作(如造成业务的中断),企业都会根据业务的安全等级要求,制定严格的操作流程和风险规避措施,并将其定义为割接项目。
概念术语
割接项目
如果对网络执行的技术迁移动作会影响现网运行业务,则在技术迁移项目实施时需严格地遵循预先设定的操作流程和风险控制措施,一般将此类项目定义为割接项目。
割接场景
网络扩容:随着业务流量的增加,对网络进行扩容,增加网络设备、添加链路。 网络改造:涉及对网络结构的调整,包括物理结构、逻辑结构。 设备替换:将原有老旧设备升级替换为新设备,或者更换为其他厂家设备,或者使用其他类型设备代替。 配置变更:在不改变物理拓扑结构的情况下,对设备配置进行变更,对正在运行的业务可能会产生影响。
割接流程
前期准备阶段: 1)项目调研 2)项目分析 3)风险评估 4)输出割接方案 5)方案验证、评审 7)割接准备
中期实施阶段: 1)割接前快照 2)割接执行 3)割接回退 4)割接测试、检查
后期收尾阶段: 1)守局 2)割接验收
案例实践
# 05/26/2022 我们的网络规模极小,没有实际的割接经验,在进行割接操作前,将进行简单的评估与通知;[……]

READ MORE