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
协议体系.
逻辑上与真实世界的运输系统类似 (运输基础建设, 快递, 邮政等关系)
两个协议体系的关系为:
通常被称为 7 层模型和 4 层模型.
有待整理
3.2 网络管理命令
简单罗列一下命令:
ping
常用ifconfig
常用route
常用scp
常用rsync
netstat
常用traceroute
telnet
wget
常用
3.2.1 检查网络是否流程与网络速度 ping
ping
命令, 后跟域名或 IP. 常用参数:
默认需要
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
说明:
这个 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
多文件的上传会效率更高.
基本语法:
rsync 源文件 目标位置
其中源文件与目标文件的格式均支持:
[[user@]HOST:]路径
从 ubuntu
向 centos
发送文件:
ubuntu
默认是安装了该软件的.
3.2.6 显示网络连接, 路由表或接口状态 netstat
很常用的工具, 常会结合管道与 more
, tail
, head
等命令一起使用.
常用参数有:
该命令非常常用.
# 显示所有端口, 包含 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
3.2.7 探测至目的地址的路由信息 traceroute
traceroute
跟踪数据包到达的网络主机所经过的路由. 原理: 试图以最小的 TTL 发出探测包来跟踪数据包到达目标主机所经过的网关, 然后监听来自网关 ICMP 的应答.
最小版本未安装该命令. 常用参数:
该命令暂时略
traceroute -n www.baidu.com
3.2.8 测试, 登录或控制远程主机 telnet
telnet
常用于远程登录. 该命令是基于 TELNET 协议的远程登录客户端.
TELNET 协议是 TCP/IP 协议族中的一员. 是 Internet 远程登录服务的标准协议和主要方式.
注意: telnet 采用明文传输, 安全性较差. 常用于确定远程端口状态, 来确定服务是否正常.
最小系统依旧没安装该命令.
3.2.9 下载网络文件 wget
最小系统也为安装该软件. 很常用. 常用参数:
好像每次使用都没有带有参数
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 地址
网卡参数说明
设置完需要重启生效
service network restart
可以利用 <interface>:<number>
的命名方式为网卡提供子接口, 从而使其具有多个 IP 地址.
ifconfig enp0s3:2 192.168.146.152 netmask 255.255.255.0 up
该配置在重启后会恢复, 如果需要保留, 可将脚本置于
/etc/rc.local
文件中.
3.3.3 设置主机名
使用 hostname
命令
hostname dev.jklibs.com
重新登录后即可看到命令提示符前面的主机名已修改. 但是重启后会恢复. 应当修改文件 /etc/hostname
, 或使用 hostnamectl
命令.
3.3.4 设置默认网关
设置好 IP, 若要访问其他子域或网络, 还需要设置路由. 也可以设置默认网关的办法.
Linux 有两种方法来设置默认网关:
- 直接使用
route
命令, 注意这是临时设置. 该方式适用于临时测试. - 修改配置文件
ifcfg-xxx
, 注意重启服务.
# route 语法
route add default gw xxx.xxx.xxx.xxx
3.3.5 设置 DNS 服务器
实际上就是 /etc/resolv.conf
文件.
这里的 nameserver
即 DNS 服务器地址.
文后可以携带:
options rotate # 表示在上面服务器中轮询
options timeout:1 attempts: 2 # 表示每个请求超时 1s(默认 5s), 解析域名尝试 2 次
可以添加多个
nameserver
, 但只有前三个生效.
3.4 防火墙 firewalld
CentOS 7.5 安装了两个防火墙:
firewalld
(默认)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 基本术语
两个基本概念:
- 网络区域
zone
- 服务
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/
目录中.
服务的优势:
- 服务名管理更明晰.
- 由服务组织端口分组效率更高.
如果一个服务使用到多个端口, 则加载服务就表示开放这些端口.
猜测逻辑上与以角色的方式管理权限一样.
- 权限挂载到角色上.
- 用户与角色挂钩.
- 那么用户就具有对应角色的权限.
- 权限与角色是多对多关系.
- 角色与用户也是多对多关系.
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
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 等也是这类工具.
书看不下去. 不知云云.