jk's notes
  • ch03 运维必备的网络管理技能

ch03 运维必备的网络管理技能

Linux 作为网络上的服务器, 网络配置很重要. 在开始之前需要了解基本原理.

管理多台服务器, 网络配置会很麻烦, 因此有了动态主机配置协议 (DHCP, Dynamic Host Configuration Protocol). 因为服务器众多, IP 不太好使用, 因此诞生了域名系统.

本章主要内容:

  • 网络管理协议
  • 常用网络管理命令
  • 网络配置方法

3.1 网络管理协议介绍 [raw]

常见的协议包括 TCP/IP 协议, UDP 协议, 和 ICMP 协议.

3.1.1 TCP/IP 协议

计算机网络的特点是, 逻辑与物理分离的. 逻辑上是一个完整的拓扑结构, 而物理上可能完全不在一个区域.

计算机网络按照跨域范围可以分为:

  • 局域网 LAN, Local Area Network.
  • 广域网 WAN, Wide Area Network.

而 TCP/IP 实际上就是传输控制协议 (TCP, Transmission Control Protocol) 和网际协议 (IP, Internet Protocol) 的合体.

1. OSI 参考模型

网络协议存在一个严格的分层结构. 常规的划分方法有 TCP/IP 协议体系和 OSI 协议体系.

逻辑上与真实世界的运输系统类似 (运输基础建设, 快递, 邮政等关系)

两个协议体系的关系为:

image-20230727101830691

通常被称为 7 层模型和 4 层模型.


有待整理


3.2 网络管理命令

简单罗列一下命令:

  • ping 常用
  • ifconfig 常用
  • route 常用
  • scp 常用
  • rsync
  • netstat 常用
  • traceroute
  • telnet
  • wget 常用

3.2.1 检查网络是否流程与网络速度 ping

ping 命令, 后跟域名或 IP. 常用参数:

image-20230727104948119

默认需要 ctrl + c 来退出.

3.2.2 配置网络或显示当前网络接口状态 ifconfig

默认不安装. 需要安装 net-tools 包.

ifconfig 可用于查看, 配置, 启动, 或禁用指定网络接口. 语法为:

ifconfig interface [[-net -host] address [parameters]]

其中

  • interface 是网络接口名
  • address 是分配给指定接口的主机名或 IP 地址.
  • -net 和 -host 分别告诉 ifconfig 将这个地址作为网络号, 还是主机地址.

注意, 网络网卡信息的命名规则与早期的不同. lo 表示本地回环地址.

# 查看所有网卡信息
ifconfig

# 查看指定网卡, 如: enp0s3 的信息
ifconfig enp0s3

image-20230727105828574

image-20230727105849636

说明:

image-20230727110516434

这个 RX 与 TX 与 串口通信里面的有些像, T 表示发送, R 表示接收.

如果异常接收与发送数据量较高, 通常表示数据链路层存在问题.

设置 IP 地址可以使用命令:

ifconfig <interface>:<序号> <IP> netmask <子网掩码> up

书中描述的案例是: ifconfig ens33:1 192.168.100.100 netmast 255.255.255.0 up. 其中网卡后跟上冒号数字1, 不甚理解.

其中命令后的 up 表示启用, 与之对应的有 down 即禁用.

在 CentOS 与 RedHat 中, 可以使用下面命令开启关闭网卡:

ifup <interface>    				# 激活网卡
ifdown <interface>  				# 禁用网卡

ifconfig <interface> up 		# 激活网卡
ifconfig <interface> down 	# 禁用网卡

在 Ubuntu 的教程中介绍了 ip 命令的使用, 默认 CentOS 中也可以使用

sudo ip link set <interface> down # 禁用网卡
sudo ip link set <interface> up	  # 激活网卡

设置 Mac 地址, 可以使用:

ifconfig <interface> hw enther <MAC 地址>

设置 IP 与子网掩码也可以使用下面格式:

ifconfig <interface> <IP>/<len> up

注意这里的设置是临时的, 系统重启后会恢复. 如果要设置永久的, 需要进入 /etc/sysconfig/network-scripts 目录下修改与网络接口同名的配置文件.

3.2.3 操作路由表 route

路由表的基本概念是什么??? 似乎后面的章节会介绍. 这里简单整理.

基本语法:

route [-f] [-p] [command] [destination] [mask netmask] [gateway] [metric] [[dev] if]

说明:

  • command 表示需要进行的操作: add, change, delete, print.
  • destination 指定该路由的网络目标.
  • mask natmask 指定与网络目标相关的子网掩码.
  • gateway 网关.
  • metric 为路由指定一个整数成本指标, 当路由表的多个路由进行选择时使用 [暂时不明].
  • dev if 为可访问目标网络接口指定接口索引 [暂时不明].

细节可以使用 route --help 或 man route 查看.

用法举例:

# 显示所有路由表
route -n

# 添加一条路由: 发往 192.168.60.0 网段的全部要经过网关 192.168.19.1
route add -net 192.168.60.0 netmask 255.255.255.0 gw 192.168.19.1

# 删除一条路由. 删除不需要网关
route delete -net 192.168.60.0 netmask 255.255.255.0

3.2.4 复制文件至其他系统 scp

跨机器复制, 相当于 cp 命令的网络版.

基本用法:

scp [-P <远程端口>] <本地文件> <user>@<SSH地址>:<目录路径>

然后会提示输入密码. 如果是文件夹, 可以带上 -r 参数表示递归处理目录下的文件.

该名可以从本地将文件发送到远程服务器, 反之亦然.

在 Win Powershell 中也可以使用该命令.

scp [-P <远程端口>] <user>@<SSH地址>:<目录路径>/<文件> <本地目录>

看起来还可以控制在远程的不同机器上进行拷贝. 待测试.

3.2.5 复制文件至其他系统 rsync

该命令常用于数据镜像备份. 用于在不同机器之间同步文件. 其特点:

  • 可以同步文件或目录
  • 可以增量同步, 并保存原有文件的属性 (时间戳, 权限等)
  • 同步过程是加密的

最小安装似乎没有该命令, 可以使用 yum install rsync -y 来安装

用法相对复杂, 用法可以使用 rsync --help 或 man rsync 来查看.

相比较与 scp , 使用 rsync 多文件的上传会效率更高.

image-20230801091054541

基本语法:

rsync 源文件 目标位置

其中源文件与目标文件的格式均支持:

[[user@]HOST:]路径

从 ubuntu 向 centos 发送文件:

image-20230801091451859

ubuntu 默认是安装了该软件的.

3.2.6 显示网络连接, 路由表或接口状态 netstat

很常用的工具, 常会结合管道与 more, tail, head 等命令一起使用.

常用参数有:

image-20230727140812468

该命令非常常用.

# 显示所有端口, 包含 UDP, TCP
netstat -a | more

# 显示所有 TCP 端口
netstat -at | more

# 显示所有 UDP 端口
netstat -au

# 显示所有处于监听状态的端口, 并以数字方式显示而非服务名
netstat -ln | more

# 显示所有 TCP 端口, 并显示对应的进程名称或进程号
netstat -plnt | more

# 显示核心路由信息
netstat -t

# 显示网络接口列表
netstat -i

一个综合案例, 统计各个 TCP 连接的各个状态对用的数量

netstat -plnta | sed '1,2d' | awk '{print $6}' | sort | uniq -c

image-20230727142507774

3.2.7 探测至目的地址的路由信息 traceroute

traceroute 跟踪数据包到达的网络主机所经过的路由. 原理: 试图以最小的 TTL 发出探测包来跟踪数据包到达目标主机所经过的网关, 然后监听来自网关 ICMP 的应答.

最小版本未安装该命令. 常用参数:

image-20230727143236005

该命令暂时略

traceroute -n www.baidu.com

3.2.8 测试, 登录或控制远程主机 telnet

telnet 常用于远程登录. 该命令是基于 TELNET 协议的远程登录客户端.

TELNET 协议是 TCP/IP 协议族中的一员. 是 Internet 远程登录服务的标准协议和主要方式.

注意: telnet 采用明文传输, 安全性较差. 常用于确定远程端口状态, 来确定服务是否正常.

最小系统依旧没安装该命令.

image-20230727145038690

3.2.9 下载网络文件 wget

最小系统也为安装该软件. 很常用. 常用参数:

image-20230727145525199

好像每次使用都没有带有参数

3.3 Linux 网络配置

3.3.1 相关配置文件

涉及到的文件:

  • /etc/hostname 用于修改主机名.
  • /etc/hosts 修改 IP 与主机名的映射关系. 通过设置 /etc/nsswitch.conf 可设置本地或 DNS 优先.
  • /etc/sysconfig/network-scripts/ifcfg-xxx 用于配置网卡. 例如 IP 等.
  • /etc/resolve.conf 设置 DNS 信息.
  • /etc/nsswitch.conf (name service switch configuration, 名字服务切换配置) 配置通过哪些途径, 按照什么顺序来查找特定类型的信息.

3.3.2 配置 Linux 系统的 IP 地址

网卡参数说明

image-20230727150814165

设置完需要重启生效

service network restart

可以利用 <interface>:<number> 的命名方式为网卡提供子接口, 从而使其具有多个 IP 地址.

ifconfig enp0s3:2 192.168.146.152 netmask 255.255.255.0 up

该配置在重启后会恢复, 如果需要保留, 可将脚本置于 /etc/rc.local 文件中.

image-20230727151628448

3.3.3 设置主机名

使用 hostname 命令

image-20230727152327034

hostname dev.jklibs.com

重新登录后即可看到命令提示符前面的主机名已修改. 但是重启后会恢复. 应当修改文件 /etc/hostname, 或使用 hostnamectl 命令.

3.3.4 设置默认网关

设置好 IP, 若要访问其他子域或网络, 还需要设置路由. 也可以设置默认网关的办法.

Linux 有两种方法来设置默认网关:

  1. 直接使用 route 命令, 注意这是临时设置. 该方式适用于临时测试.
  2. 修改配置文件 ifcfg-xxx, 注意重启服务.
# route 语法
route add default gw xxx.xxx.xxx.xxx

3.3.5 设置 DNS 服务器

实际上就是 /etc/resolv.conf 文件.

image-20230727160057175

这里的 nameserver 即 DNS 服务器地址.

文后可以携带:

options rotate   # 表示在上面服务器中轮询
options timeout:1 attempts: 2 # 表示每个请求超时 1s(默认 5s), 解析域名尝试 2 次

可以添加多个 nameserver, 但只有前三个生效.

3.4 防火墙 firewalld

CentOS 7.5 安装了两个防火墙:

  1. firewalld (默认)
  2. iptables

3.4.1 firewalld 特性

1. firewalld 与 iptables 的关系

firewalld 仅仅替代了 iptables 部分, 底层还是使用 iptables.

看起来与 Ubuntu 的 ufw 类似.

firewalld 使用 python 编写, 有 daemon 和 service, 也有命令行界面和图形界面.

简单总结是将常用功能抽取出来的简化版工具.

2. 静态防火墙与动态防火墙

  • 一般 iptables 被称为静态防火墙, 即但凡做出修改, 需要将所有的配置全部加载一遍.
  • firewalld 为动态防火墙. 即修改什么就加载什么. 如此不会在加载生效的瞬时影响到整个系统.

类比于静态语言, 修改任何内容都需要重新编译, 静态编译. 而动态语言则不需要.

3. 采用 XML 作为配置文件

历史问题, filewalld 使用 xml 作为配置文件.

而 iptables 使用规则配置文件.

4. 区域模型定义

基于 iptables 的自定义链, firewalld 抽象出一个区域模型的概念. 提升了易用性.

3.4.2 基本术语

两个基本概念:

  1. 网络区域 zone
  2. 服务 service

1. zone

网络区域 zone 定义了网络连接的可信等级. 它是一个一对多的关系.

即网卡可以对应到不同的区域. zone 默认有 9 个: block, dmz, drop, external, home, internal, public, trusted, work.

CentOS 7.5 默认区域被设置为 public.

  • 所有可用 zone 保存在 /usr/lib/firewalld/zones/ 目录中, 为默认配置.
  • 手动配置应放在 /etc/firewalld/zones/ 目录.

2. service

服务 service 是 端口 和/或 协议入口 的组合.

  • 服务配置文件置于 /usr/lib/firewalld/services/ 目录中, 其中已经内置了很多服务.
  • 如果有自定义服务, 应放在 /etc/firewalld/services/ 目录中.

服务的优势:

  1. 服务名管理更明晰.
  2. 由服务组织端口分组效率更高.

如果一个服务使用到多个端口, 则加载服务就表示开放这些端口.

猜测逻辑上与以角色的方式管理权限一样.

  • 权限挂载到角色上.
  • 用户与角色挂钩.
  • 那么用户就具有对应角色的权限.
  • 权限与角色是多对多关系.
  • 角色与用户也是多对多关系.

3.4.3 firewalld 的使用

ubuntu 使用 UFW 防火墙, 逻辑似乎与 CentOS 的 firewalld 一样.

目的是简化操作.

1. 管理 firewalld 服务

# 开机启动服务
systemctl enable firewalld.service
# 开机禁用
systemctl disable firewalld.service

# 开启
systemctl start firewalld.service
# 停止
systemctl stop firewalld.service
# 查看状态
systemctl status firewalld

# 查看版本
firewall-cmd --version
# 查看帮助
firewall-cmd --help
# 查看状态
firewall-cmd --state

重点在于怎么创建 service 文件.

2. zone 管理

# 列出所有支持的 zone
firewall-cmd --get-zones

# 查看当前默认 zone
firewall-cmd --get-default-zone

image-20230801085933582

3. service 管理

# 列出所有支持的 service
firewall-cmd --get-services

# 查看当前 zone 中加载的 service
firewall-cmd --list-services

4. 基本操作

# 查看所有打开的端口
firewall-cmd --zone=public --list-ports

# 更新防火墙规则
firewall-cmd --reload

# 查看区域信息
firewall-cmd --get-active-zones

# 查看指定接口所有区域
firewall-cmd --get-zone-of-interface=<网卡名>

# 拒绝所有包
firewall-cmd --panic-on

# 取消拒绝
firewall-cmd --panic-off

# 查看是否拒绝
firewall-cmd --query-panic

5. 添加端口

# 添加 80 端口 (无 --permanent 参数重启后失效)
firewall-cmd --zone=public --add-port=80/tcp --permanent

# 重新载入 (使生效)
firewall-cmd --reload

# 查看 80 端口
firewall-cmd --zone=public --query-port=80/tcp

# 删除端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent

# 为 public 区添加持久性的 HTTP 和 HTTPS 规则 (何用??)
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent

# 列出所有规则
firewall-cmd --list-all

仅仅列举出了一些示例, 但仅有第 5 部分是有用的, 其他关于 zone, service 等不知所云, 不知如何使用.

3.5 Linux 防火墙 iptables

要理解 iptables 需要条件 TCP/IP 网络基本原理.

3.5.1 Linux 内核防火墙工作原理

内核防火墙功能通过 netfilter 框架实现. 而 iptables 是表现层 (非内核) 的操作工具.

firewall-cmd 等也是这类工具.

书看不下去. 不知云云.

Last Updated:
Contributors: jk