「NETWORK」- 网络的生命周期

解决方案
Administration represents creating plans and actions to achieve the objectives of the company. Management is the process of implementing these plans to achieve the final goal.
大致包括:网络规划、网络设计、网络实施、网络维护
网络规划
网络规划是一个项目的起点,完善细致的规划工作将为后续的项目具体工作打下坚实的基础。
具体的工作内容如下: 在项目规划阶段需要调查掌握项目的背景。为项目实施提供良好的外部条件,保证项目的顺利推进; 在项目规划阶段需要明确网络项目的实施工作范围; 需要根据项目目标,工程范围,工作内容等各方面的内容制订项目的预算; 在项目规划阶段需要明确网络设计的指导思想,为后续的网络设计提供指导和依据;
网络设计
网络设计阶段负责把网络规划阶段获得的客户需求运用技术手段予以规范化体现。
在网络设计过程中,设计的网络方案需要把握以下要点: 1)高性能:需要与经济性取得平衡。网络的性能常用可用带宽,延迟,抖动,误码率,利用效率等进行描述; 2)经济性:首先需要遵从客户的预算,在预算范围内提供匹配的解决方案; 3)可靠性:使用平均故障间隔时间 MTBF(Mean Time Between Failures)和平均修复时间 MTTR(Mean Time to Repair)这两个技术指标来评价系统的可靠性;MTBF 是指一个系统无故障运行的平均时间,通常以小时为单位。MTBF 越多,可靠性也就越高。MTTR 是指一个系统从故障发生到恢复所需的平均时间; 4)扩展性:指网络适应未来发展的能力; 5)安全性:网络设计中需要考虑安全性,以提高网络的持续服务能力,防止承载信息的泄密; 6)可管理性:网络管理包括设备管理,配置管理,故障管理,计费管理等多个方面;
网络实施
网络实施是工程师交付项目的具体操作环节;
网络维护
网络管理、日常巡检、网络割接[……]

READ MORE

「NETWORK-ADMINISTRATION」- 管理,运维

问题描述
随着人工智能、大数据、云计算等新技术快速发展,未来各行业将面临数字化转型,企业业务随着数字化转型也变得丰富多样,使网络管理成为网络管理员面临的最具挑战的问题之一。我们无法仅依赖人手工来完成整个的网络管理的工作,迫切的需要一种自动化和智能化的工具协助我们管理网络中的设备和资源。因此,数字化带来网络模型的变化,传统的网络管理模式已经不能适应数字化业务带来的新需求。传统网络的建设、管理和运维手段已无法满足数字化带来的新的网络需求;
当前网络的发展现状
呈现出 网络规模日益扩大、设备种类日益繁多、网络维护日益复杂、维护人员要求更高 趋势;
传统网管面临的挑战
网络规模大、业务开通慢、排障效率低
故障损失:每小时停机损失百万美元,在不同行业,网络故障也带来不同程度的损失; 业务开通慢:>70% 的网络通过 CLI 方式管理网络,响应速度比较慢; 故障定位难:一个故障定位平均耗时 76min;
该笔记将记录:网络管理相关内容,形成网络管理整体认识,以及在网络管理中使用到的各种技术方案。该部分笔记偏向于技术手段、实践方案、概念理念,并不包含过多的网络协议、通信技术;
解决方案
维护又有“运维”、“运营”、“操作与维护”等不同的说法,但表达的是同个概念;
网络管理,简单地说是对网络的管理,是一个网络的基本诉求。当前,用户能够通过各种协议、工具、应用或设备来实现对网络的管理,其管理对象包括网络中的硬件及软件。通过对网络中设备的管理,保证设备工作正常,使通信网络正常地运行,以提供高效、可靠和安全的通信服务,是通信网络的重要组成部分;
网络管理的目标:实现对网络软硬件的监控、测试、配置、分析、评价及控制等,确保网络运行正常;
网络管理的典型架构
通常情况下,网络管理系统具有相同的基本体系结构;
该体系结构包含两个关键元素: 1)管理设备,也被称为网络管理站; 2)被管设备,也被称为代理设备;

企业网的管理结构:
网络管理的四大模型
OSI Network Management Model 由四个主要的模型组成:
1)组织结构模型(Organization Model):描述网络管理系统组件的功能和基础架构; 该模型定义 管理者、代理、被管理对象。它描述网络管理系统的 组件、组件的功能、基础架构;
2)信息模型(Information Model):描述被管理对象及其关系的信息库; 该模型与信息结构和存储有关。它指定用于描述被管理对象及其关系的信息库; 管理信息结构(SMI)定义存储在管理信息库(MIB)中的管理信息的语法和语义。代理进程和管理器进程都使用 MIB 进行管理信息交换和存储;
3)通信模型(Communi[……]

READ MORE

「NETWORK-ADMINISTRATION」- 设备:配置、管理

设备数据的分类
数据是信息的载体。运行设备上可获取的信息被分为两类: 1)配置数据,是类可写(writable)的数据。它可以改变系统的状态,例如从初始状态变为当前状态。 2)状态数据,是系统上的只读(read-only)的非配置数据。例如 表示状态信息、统计信息 等等;
设备数据的管理(常见网管方式)
更改设备数据有多种方法,既可以基于命令行(人工),也可以基于特定协议(自动)。
配置数据:能够通过 CLI NETCONF RESTCONF 进行操作; 状态数据:能够通过 SNMP Telemetry CLI 进行操作;CLI 和 SNMP 是最经典的获取设备数据的方法。
传统网管:Traditional Network Management 现代网管:NETWORK-AUTOMATION-DEVELOPMENT

章节列表
「YANG」- Yet Another Next Generation 「SSH」- 找出登录服务器所使用的公钥 「RESTCONF」- RESTful in NETCONF 「Linux」- 安装 SNMP 服务 「NETWORK-ADMINISTRATION」- 通过 CLI 、Web 网管(传统网络管理)[……]

READ MORE

「NETWORK-ADMINISTRATION」- 通过 CLI 、Web 网管(传统网络管理)

网络管理方式
对于设备的配置管理,工程师更习惯使用 CLI 命令行的方式与设备交互。该方式简单直接,便于理解。

对于网络管理员
CLI(Command-Line Interface,命令行界面):在图形用户界面得到普及前,其是使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,设备接收到指令后,予以执行。既可以支持网络配置管理,也可以支持网络监控管理。例如 Telnet、SSH、Console 等等;
Web 网管方式:通过 Web 图形化界面,以完成对网络设备的简单管理工作;
通过网络管理站
基于 SNMP 集中管理:其 Set 功能可以支持网络配置管理,其 Trap 功能可以支持网络监控管理。
网络管理工具
Telnet和SSH是两种远程管理设备的方式,其中SSH连接方式较Telnet更为安全,因此目前网络都会要求部署SSH。
Telnet 是电信(Telecommunications)和网络(Networks)的联合缩写: 1)Telnet使用专用的TCP端口号23,它不是一种安全通信协议,通过网络/互联网传输明文格式的数据,包括密码。 2)Telnet中没有使用任何验证策略及数据加密方法。
SSH(Secure Shell,安全外壳) 1)SSH使用专用的TCP端口号22,它是一种非常安全的协议,通过网络/互联网传输加密格式的数据,一旦经过加密就极难解压和读取该数据。 2)SSH还使用公钥用于对访问者的用户身份验证,这种方式提供了更高的安全性。

设备配置流程
1)命令行是人类与设备的交互语言。工程师查询产品文档,使用命令行方式配置设备。 2)命令行采用了嵌套的方式实现设备配置。

特性及优势

当网络规模较小时,CLI 和 Web 方式是常见的网络管理方式: 1)网络管理员通过HTTPS、Telnet、Console等方式登录设备后,对设备逐一进行管理。 2)这种管理方式不需要在网络中安装任何程序或部署服务器,成本较低。 3)网络管理员自身需要熟练掌握网络理论知识、各设备厂商网络配置命令。
缺陷与不足
网络管理员可以采用CLI对设备进行配置和网络监控,操作简单便捷。但是一旦进行大规模部署,就必须借助于自动化工具来进行批量配置。
通过 CLI、Web 管理网络,存在如下问题: 1)需要人工接入,否则无法及时发现问题; 2)数据展示比较简单,比如无法查看长期数据; 3)各厂商定义的CLI各不相同,运营商和企业需要针对各厂商分别学习和开发适配脚本。 4)配置脚本有非结构化、不可预测、容易变化等特性,导致解析复杂,CLI脚本维护困难,很难实现自动化解析。 5)当网络规模较大,网络拓扑较为复杂时,这种方式[……]

READ MORE

「SNMP」- 简单网络管理协议(Simple Network Management Protocol)

问题描述
该笔记将记录:SNMP 相关内容,以及常见相关问题的解决办法。
解决方案
SNMP(Simple Network Management Protocol,简单网络管理协议)是广泛用于 TCP/IP 网络的网络管理标准协议,提供一种通过运行网络管理软件的中心计算机(NMS,Network Management Station,网络管理工作站)来管理网元的方法。
原理简述
在 NMS(网络管理站)中,配置 SNMP 管理程序; 在被管理设备端,启用 Agent 代理程序,同时在组网中配置 SNMP 协议。
通过 SNMP 协议: NMS 通过 Agent 获取或变更设备的信息,实现远程监控和管理。 Agent 能够及时地向 NMS 报告设备的状态。

网络管理员可以利用 NMS 在网络上的任意节点完成信息查询、信息修改和故障排查等工作,提升工作效率。屏蔽不同产品之间的差异,以实现不同种类和厂商的网络设备之间的统一管理。
特性特征
通过“利用网络管理网络”的方式,SNMP 实现对网络设备的高效和批量的管理; 简单:SNMP采用轮询机制,提供基本的功能集,适合快速、低价格的场景使用,而且SNMP以UDP报文为承载,因而得到绝大多数设备的支持。 强大:SNMP的目标是保证管理信息在任意两点传送,便于管理员在网络上的任何节点检索信息,进行故障排查。
注意,SNMP 主要还是用于信息采集,而很少用于管理网元设备: 1)SNMP 基于 UDP,对于配置管理来说无状态、无序、不可靠。 2)SNMP 只能对一个对象单独配置,而不是面向一个业务。多个对象同时配置时,如果有些成功有些失败,会对网络造成未知影响。
应用场景
通过 SNMP 完成 配置 与 监控:[……]

READ MORE

「SNMP」- 概念术语

典型架构

在基于 SNMP 进行管理的网络中:

NMS(网络管理站,Network Management Station):向被管理设备发送各种查询报文,以及接收被管理设备发送的告警。是整个网络的网管中心,在它之上运行管理进程。NMS 是一个采用 SNMP 协议对网络设备进行管理/监控的系统,运行在 NMS Server 上。
Device(被管理设备):也就是网络中的各种接受网管的设备,即被 NMS 管理的设备。每个被管理设备需要运行代理进程(Agent),代理进程运行于被管理设备上,用于维护被管理设备的信息数据并响应来自 NMS 的请求,把管理数据汇报给发送请求的 NMS。管理进程和代理进程利用 SNMP 报文进行通信。
Agent(代理):驻留在 Device 上的一个进程。接收、解析来自 NMS 的查询报文。
Agent 的作用如下: 1)根据报文类型对管理变量进行Read或Write操作,并生成响应报文,返回给网管站。 2)根据各协议模块对告警触发条件的定义,当发生某个事件(如端口UP/DOWN,STP拓扑变更、OSPF邻居关系DOWN掉等)的时候,主动触发一个告警,向网管站报告该事件。
信息交互

NMS 和 Device 的信息交互分为两种: 1)拉取:NMS 通过 SNMP 协议,给被管理设备发送修改配置信息请求或查询配置信息请求。被管理设备上运行的代理进程根据NMS的请求消息做出响应。 2)上送:被管理设备可以主动向 NMS 上报告警信息(Trap)以便网络管理员及时发现故障。
管理对象,Managed Object
可以是设备中的某个硬件,也可以是在硬件、软件(如路由选择协议)上配置的参数集合。每一个设备可能包含多个被管理对象。
MIB / OID

MIB(Management Information Base )是个数据库,指明被管理设备所维护的变量(即能够被 Agent 查询和设置的信息)。MIB在数据库中定义了被管理设备的一系列属性:对象的名称、对象的状态、对象的访问权限和对象的数据类型等。
OID(Object IDentifier):MIB 是以树状结构进行存储的,树的节点表示管理对象(Object),对象可以用从根Root开始的一条路径来唯一的识别,这就是OID也即对象标示符
SNMP规定通过 MIB(Management Information Base,管理信息库)去描述可管理实体的一组对象。
MIB在数据库中定义被管理设备的系列属性: 1)对象标识符(Object IDentifier,OID) 2)对象的状态 3)对象的访问权限 4)对象的数据类型等
MIB给出了一个数据结构,[……]

READ MORE

「SNMPv1」- 协议交互

1)使用 UDP 报文 2)当故障时主动发送报文;

访问认证
1)对于 SNMPv1 与 SNMPv2c 协议,本身没有提供直接的认证机制,而采用基于团体名的有限的安全认证机制,团体名明文传输。 2)不推荐在非完全信任的网络使用 SNMPv1/SNMPv2c 版本;[……]

READ MORE

「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」- 报文格式

SNMP: v1, v2c

SNMPv3[……]

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