网络管理
-
-
- [1. 网络基础](#1. 网络基础)
-
- [1.1 TCP/IP 协议栈(四层模型)](#1.1 TCP/IP 协议栈(四层模型))
- [1.2 网络设备配置与基础概念](#1.2 网络设备配置与基础概念)
- [1.3 网络接口命名规则](#1.3 网络接口命名规则)
- [1.4 网络配置文件位置](#1.4 网络配置文件位置)
- [2. 常用网络配置命令](#2. 常用网络配置命令)
-
- [2.1 查看网络接口信息](#2.1 查看网络接口信息)
- [2.2 配置 IP 地址](#2.2 配置 IP 地址)
- [2.3 启用/禁用网卡](#2.3 启用/禁用网卡)
- [2.4 修改网卡 MAC 地址](#2.4 修改网卡 MAC 地址)
- [2.5 配置网卡的 MTU(最大传输单元)](#2.5 配置网卡的 MTU(最大传输单元))
- [3. 配置网络服务](#3. 配置网络服务)
-
- [3.1 静态 IP 配置](#3.1 静态 IP 配置)
-
- [Debian 系列](#Debian 系列)
- [RHEL 系列](#RHEL 系列)
- [3.2 动态 IP 配置(DHCP)](#3.2 动态 IP 配置(DHCP))
-
- [Debian 系列](#Debian 系列)
- [RHEL 系列](#RHEL 系列)
- 综合案例
-
- 一、目标与思路
- 二、操作步骤总览
- 三、详细步骤与命令
-
- [1. 配置网络接口(让服务器"有网可上")](#1. 配置网络接口(让服务器“有网可上”))
-
- [Debian / Ubuntu](#Debian / Ubuntu)
- [RHEL / CentOS / Rocky](#RHEL / CentOS / Rocky)
- [2. 配置防火墙(只开 80/443)](#2. 配置防火墙(只开 80/443))
-
- [方案 A:iptables(一次性,重启后需 save)](#方案 A:iptables(一次性,重启后需 save))
- [方案 B:firewalld(持久化)](#方案 B:firewalld(持久化))
- [3. 加固 SSH(换端口 + 禁用 root 密码)](#3. 加固 SSH(换端口 + 禁用 root 密码))
- [4. 连通性测试](#4. 连通性测试)
-
- [4.1 测试上网](#4.1 测试上网)
- [4.2 查看路由路径](#4.2 查看路由路径)
- [5. 配置验证(确保真正生效)](#5. 配置验证(确保真正生效))
- 四、一键脚本
- 五、常见故障排查表
- 常见面试问题及答案
-
- [问题 1:如何查看 Linux 系统中所有网络接口的配置信息?](#问题 1:如何查看 Linux 系统中所有网络接口的配置信息?)
- [问题 2:如何为 Linux 系统中的网络接口配置静态 IP 地址?](#问题 2:如何为 Linux 系统中的网络接口配置静态 IP 地址?)
- [问题 3:如何测试 Linux 系统中网络的连通性?](#问题 3:如何测试 Linux 系统中网络的连通性?)
- [问题 4:如何查看 Linux 系统中网络接口的硬件信息?](#问题 4:如何查看 Linux 系统中网络接口的硬件信息?)
- [问题 5:如何在 Linux 系统中配置防火墙规则?](#问题 5:如何在 Linux 系统中配置防火墙规则?)
- [问题 6:如何在 Linux 系统中配置 SSH 服务?](#问题 6:如何在 Linux 系统中配置 SSH 服务?)
- 网络诊断与监控
-
- [4.1 查看网络连接状态](#4.1 查看网络连接状态)
-
- [① netstat(传统工具,net-tools 包)](#① netstat(传统工具,net-tools 包))
- [② ss(iproute2 套件,比 netstat 快且功能更多)](#② ss(iproute2 套件,比 netstat 快且功能更多))
- [4.2 测试网络连通性](#4.2 测试网络连通性)
-
- [ping(IPv4/IPv6 连通性测试)](#ping(IPv4/IPv6 连通性测试))
- [4.3 跟踪路由](#4.3 跟踪路由)
- [4.4 DNS 查询](#4.4 DNS 查询)
- [4.5 捕获和分析网络流量](#4.5 捕获和分析网络流量)
- [5. VLAN 子接口](#5. VLAN 子接口)
- [6. Bridge(网桥)](#6. Bridge(网桥))
- [7. Bond(链路聚合)](#7. Bond(链路聚合))
- [8. Promiscuous Mode(混杂模式)](#8. Promiscuous Mode(混杂模式))
- [9. 防火墙(iptables)](#9. 防火墙(iptables))
- [10. SSH 服务加固](#10. SSH 服务加固)
- [11. DNS 解析](#11. DNS 解析)
- [12. 网卡硬件信息与性能调优](#12. 网卡硬件信息与性能调优)
- 拓展
-
- [1. 局域网构建+VLAN 划分 + 端口 MAC-IP 绑定 + 静态 DHCP](#1. 局域网构建+VLAN 划分 + 端口 MAC-IP 绑定 + 静态 DHCP)
-
1. 网络基础
1.1 TCP/IP 协议栈(四层模型)
TCP/IP 是互联网通信的基础,分为四层(从下往上):
-
链路层(Link Layer)
- 负责物理设备间的通信(如以太网、Wi-Fi)。
- 关键概念:MAC 地址(设备物理地址)、ARP 协议(通过 IP 找 MAC)。
-
网络层(Internet Layer)
- 负责跨网络的数据传输,核心协议是 IP(如 IPv4/IPv6)。
- 关键概念:IP 地址(逻辑地址)、子网掩码(划分网络范围)、路由(决定数据包路径)。
-
传输层(Transport Layer)
- 提供端到端的通信,主要协议是 TCP (可靠连接)和 UDP(无连接)。
- 关键概念:端口号(区分不同服务,如 HTTP=80,SSH=22)。
-
应用层(Application Layer)
- 用户直接接触的协议,如 HTTP(网页)、FTP(文件传输)、DNS(域名解析)。
1.2 网络设备配置与基础概念
1. 路由器(Router)
- 作用 :连接不同网络,根据 路由表 决定数据包的下一跳。
- 关键配置 :
- 静态路由 :手动指定路径(如
ip route 192.168.2.0 255.255.255.0 10.0.0.1
)。 - 动态路由:通过协议(如 OSPF、RIP)自动学习路径。
- 静态路由 :手动指定路径(如
2. 交换机(Switch)
- 作用 :在局域网(LAN)内根据 MAC 地址 转发数据,避免广播风暴。
- 关键配置 :
- VLAN(虚拟局域网) :将一个物理交换机逻辑划分为多个广播域。
-
示例:将端口 1-10 划入 VLAN 10(财务部),端口 11-20 划入 VLAN 20(技术部)。
-
命令(Cisco 交换机) :
bashvlan 10 name Finance interface range fa0/1-10 switchport mode access switchport access vlan 10
-
- VLAN(虚拟局域网) :将一个物理交换机逻辑划分为多个广播域。
3. 子网划分(Subnetting)
- 作用:将一个大的 IP 网络划分为多个小网络,减少广播流量,提高安全性。
- 关键概念 :
- 子网掩码 :如
255.255.255.0
(/24)表示前 24 位是网络号,后 8 位是主机号。 - 示例 :
- 公司需要 50 台主机,可分配
192.168.1.0/26
(子网掩码255.255.255.192
),可用主机范围:
192.168.1.1 ~ 192.168.1.62
。
- 公司需要 50 台主机,可分配
- 子网掩码 :如
1.3 网络接口命名规则
在 Linux 系统中,网络接口的命名规则如下:
- 传统命名规则 :
eth0
、eth1
等,通常用于较旧的系统。 - 现代命名规则 :
enp0s3
、enp2s0
等,这种命名方式更描述性,便于识别接口的物理位置。
1.4 网络配置文件位置
- Debian 系列 :
/etc/network/interfaces
- RHEL 系列 :
/etc/sysconfig/network-scripts/ifcfg-*
2. 常用网络配置命令
以下是 2. 常用网络配置命令 的参数列表及输出样例:
2.1 查看网络接口信息
ifconfig
-
作用:显示网络接口的配置信息。
-
参数 :
-a
:显示所有网络接口的信息,包括未激活的接口。-s
:显示简要的网络接口信息。
-
示例 :
bashifconfig
输出样例 :
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 ether 00:11:22:33:44:55 txqueuelen 1000 (Ethernet) RX packets 123456 bytes 123456789 (117.7 MiB) TX packets 654321 bytes 987654321 (941.9 MiB) lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 1234 bytes 123456 (120.6 KiB) TX packets 1234 bytes 123456 (120.6 KiB)
-
接口名称和标志
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
eth0
:网络接口名称,表示以太网接口。flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
:UP
:接口已启用。BROADCAST
:支持广播功能。RUNNING
:接口正在运行。MULTICAST
:支持多播功能。
mtu 1500
:最大传输单元(MTU)为 1500 字节。
-
IPv4 配置
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet
:表示 IPv4 地址。192.168.1.100
:接口的 IP 地址。netmask 255.255.255.0
:子网掩码。broadcast 192.168.1.255
:广播地址。
-
MAC 地址和队列长度
ether 00:11:22:33:44:55 txqueuelen 1000 (Ethernet)
ether
:表示以太网接口的 MAC 地址。00:11:22:33:44:55
:接口的 MAC 地址。txqueuelen 1000
:发送队列长度。(Ethernet)
:接口类型为以太网。
-
接收和发送统计
RX packets 123456 bytes 123456789 (117.7 MiB)
RX packets
:接收的数据包数量。bytes
:接收的字节数。(117.7 MiB)
:接收的字节数换算成兆字节。
TX packets 654321 bytes 987654321 (941.9 MiB)
TX packets
:发送的数据包数量。bytes
:发送的字节数。(941.9 MiB)
:发送的字节数换算成兆字节。
-
环回接口
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
lo
:环回接口(loopback)。flags=73<UP,LOOPBACK,RUNNING>
:UP
:接口已启用。LOOPBACK
:环回接口。RUNNING
:接口正在运行。
mtu 65536
:环回接口的 MTU 为 65536 字节。
inet 127.0.0.1 netmask 255.0.0.0
inet
:环回接口的 IPv4 地址。127.0.0.1
:环回地址。netmask 255.0.0.0
:子网掩码。
ip
-
作用:显示和操作路由、网络设备、接口等网络信息。
-
参数 :
addr
或a
:显示或操作 IP 地址。link
或l
:显示或操作网络设备。route
或r
:显示或操作路由表。
-
示例 :
baship addr show
输出样例 :
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0 valid_lft 86399sec preferred_lft 86399sec
-
接口索引和名称
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
1:
:接口索引号。lo
:接口名称,表示环回接口。<LOOPBACK,UP,LOWER_UP>
:LOOPBACK
:环回接口。UP
:接口已启用。LOWER_UP
:接口处于低层活动状态。
mtu 65536
:环回接口的 MTU 为 65536 字节。qdisc noqueue
:队列调度器类型为noqueue
。state UNKNOWN
:接口状态未知。group default
:接口属于默认组。qlen 1000
:队列长度。
-
环回接口的链路信息
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
link/loopback
:环回接口的链路类型。00:00:00:00:00:00
:环回接口的 MAC 地址。brd 00:00:00:00:00:00
:广播地址。
-
环回接口的 IPv4 配置
inet 127.0.0.1/8 scope host lo
inet
:表示 IPv4 地址。127.0.0.1/8
:环回接口的 IP 地址和子网掩码(CIDR 表示法)。scope host
:地址作用范围为本地主机。lo
:所属接口名称。
valid_lft forever preferred_lft forever
valid_lft
:地址的有效生命周期。preferred_lft
:地址的优先使用生命周期。
-
以太网接口
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
2:
:接口索引号。eth0
:接口名称,表示以太网接口。<BROADCAST,MULTICAST,UP,LOWER_UP>
:BROADCAST
:支持广播功能。MULTICAST
:支持多播功能。UP
:接口已启用。LOWER_UP
:接口处于低层活动状态。
mtu 1500
:接口的 MTU 为 1500 字节。qdisc pfifo_fast
:队列调度器类型为pfifo_fast
。state UP
:接口状态为启用。group default
:接口属于默认组。qlen 1000
:队列长度。
-
以太网接口的链路信息
link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
link/ether
:以太网接口的链路类型。00:11:22:33:44:55
:接口的 MAC 地址。brd ff:ff:ff:ff:ff:ff
:广播地址。
-
以太网接口的 IPv4 配置
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
inet
:表示 IPv4 地址。192.168.1.100/24
:接口的 IP 地址和子网掩码(CIDR 表示法)。brd 192.168.1.255
:广播地址。scope global
:地址作用范围为全局。dynamic
:地址是动态分配的。eth0
:所属接口名称。
valid_lft 86399sec preferred_lft 86399sec
valid_lft
:地址的有效生命周期为 86399 秒。preferred_lft
:地址的优先使用生命周期为 86399 秒。
ifconfig
输出更简洁,适合快速查看网络接口的基本信息。ip addr show
输出更详细,包含更多技术细节(如队列调度器类型、地址生命周期等),适合用于更复杂的网络配置和调试。
2.2 配置 IP 地址
ifconfig
-
作用:配置网络接口的 IP 地址。
-
参数 :
up
:启用网络接口。down
:禁用网络接口。hw ether
:设置网络接口的 MAC 地址。mtu
:设置网络接口的 MTU(最大传输单元)。
-
示例 :
bashsudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
ip
-
作用:配置网络接口的 IP 地址。
-
参数 :
add
:添加 IP 地址。del
:删除 IP 地址。
-
示例 :
bashsudo ip addr add 192.168.1.100/24 dev eth0
2.3 启用/禁用网卡
ifconfig
-
作用:启用或禁用网络接口。
-
参数 :
up
:启用网络接口。down
:禁用网络接口。
-
示例 :
bashsudo ifconfig eth0 up
ip
-
作用:启用或禁用网络接口。
-
参数 :
up
:启用网络接口。down
:禁用网络接口。
-
示例 :
bashsudo ip link set eth0 up
2.4 修改网卡 MAC 地址
ifconfig
-
作用:修改网络接口的 MAC 地址。
-
参数 :
hw ether
:设置网络接口的 MAC 地址。
-
示例 :
bashsudo ifconfig eth0 hw ether 00:11:22:33:44:55
ip
-
作用:修改网络接口的 MAC 地址。
-
参数 :
link set
:设置网络接口的属性。
-
示例 :
bashsudo ip link set eth0 address 00:11:22:33:44:55
2.5 配置网卡的 MTU(最大传输单元)
ifconfig
-
作用:配置网络接口的 MTU。
-
参数 :
mtu
:设置网络接口的 MTU。
-
示例 :
bashsudo ifconfig eth0 mtu 1500
ip
-
作用:配置网络接口的 MTU。
-
参数 :
mtu
:设置网络接口的 MTU。
-
示例 :
bashsudo ip link set eth0 mtu 1500
以下是 ifconfig
和 ip
命令的参数对比表格:
功能/参数 | ifconfig 命令 |
ip 命令 |
---|---|---|
查看网络接口信息 | ifconfig ifconfig -a |
ip addr show ip link show |
启用网络接口 | ifconfig [interface] up |
ip link set [interface] up |
禁用网络接口 | ifconfig [interface] down |
ip link set [interface] down |
配置 IP 地址 | ifconfig [interface] [IP] netmask [MASK] |
ip addr add [IP]/[CIDR] dev [interface] |
删除 IP 地址 | ifconfig [interface] del [IP] |
ip addr del [IP]/[CIDR] dev [interface] |
修改 MAC 地址 | ifconfig [interface] hw ether [MAC] |
ip link set [interface] address [MAC] |
配置 MTU | ifconfig [interface] mtu [MTU] |
ip link set [interface] mtu [MTU] |
支持 IPv6 | 需单独配置 IPv6 地址 | 支持 IPv6 配置 |
高级功能支持 | 不支持 VLAN、隧道、策略路由等 | 支持 VLAN、隧道、策略路由等 |
ifconfig
是较传统的网络配置工具,功能相对简单,主要用于 IPv4 配置。ip
命令功能更强大,支持 IPv4 和 IPv6,适用于现代复杂网络环境。
3. 配置网络服务
3.1 静态 IP 配置
Debian 系列
-
文件位置 :
/etc/network/interfaces
-
示例 :
plaintextauto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4
RHEL 系列
-
文件位置 :
/etc/sysconfig/network-scripts/ifcfg-eth0
-
示例 :
plaintextBOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=8.8.4.4
3.2 动态 IP 配置(DHCP)
Debian 系列
-
文件位置 :
/etc/network/interfaces
-
示例 :
plaintextauto eth0 iface eth0 inet dhcp
RHEL 系列
-
文件位置 :
/etc/sysconfig/network-scripts/ifcfg-eth0
-
示例 :
plaintextBOOTPROTO=dhcp
综合案例
假设您需要为一个 Linux 服务器配置网络,使其能够访问外部网络,并且需要配置防火墙规则以允许 HTTP 和 HTTPS 流量,同时禁用 root 用户的 SSH 登录。
适用系统
• Debian 系列:Ubuntu 18/20/22、Debian 10/11/12
• RHEL 系列:CentOS 7/8、Rocky Linux 8/9、AlmaLinux 8/9
一、目标与思路
目标 | 技术手段 |
---|---|
服务器能上网 | 静态 IP + 网关 + DNS |
对外提供 Web | 防火墙放行 80/TCP、443/TCP |
远程管理安全 | 改 SSH 端口、禁止 root 密码登录 |
配置可验证 | ping、traceroute、ss、tcpdump |
二、操作步骤总览
- 配置网络接口
- 配置防火墙
- 配置 SSH
- 连通性测试
- 配置验证
三、详细步骤与命令
1. 配置网络接口(让服务器"有网可上")
Debian / Ubuntu
bash
sudo vim /etc/network/interfaces
写入:
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
立即生效:
bash
sudo ifdown eth0 && sudo ifup eth0
RHEL / CentOS / Rocky
bash
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
写入:
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
重启网络:
bash
sudo nmcli connection reload && sudo nmcli connection up eth0
2. 配置防火墙(只开 80/443)
方案 A:iptables(一次性,重启后需 save)
bash
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4
方案 B:firewalld(持久化)
bash
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
3. 加固 SSH(换端口 + 禁用 root 密码)
编辑配置文件:
bash
sudo vim /etc/ssh/sshd_config
修改/新增:
Port 12345
PermitRootLogin no
PasswordAuthentication no
重启服务:
bash
sudo systemctl restart sshd
⚠️ 在退出当前会话前,请先另开窗口验证能否密钥登录!
4. 连通性测试
4.1 测试上网
bash
ping -c 4 8.8.8.8
期望输出:
4 packets transmitted, 4 received, 0% packet loss
4.2 查看路由路径
bash
traceroute 8.8.8.8
确认数据包经过的网关及延迟正常。
5. 配置验证(确保真正生效)
检查项 | 命令 | 期望结果 |
---|---|---|
本机监听端口 | sudo ss -tulnp |
80、443、12345 均出现 |
防火墙规则 | sudo iptables -L -n 或 sudo firewall-cmd --list-all |
80/tcp、443/tcp 为 ACCEPT |
实时抓包 | sudo tcpdump -i eth0 host 8.8.8.8 -c 5 |
可见正常 ICMP 或 HTTP 流量 |
四、一键脚本
保存为 setup.sh
,root 执行即可(需自行改接口名):
bash
#!/bin/bash
set -e
# 1. 静态 IP
cat >/etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
EOF
nmcli connection reload && nmcli connection up eth0
# 2. 防火墙
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
# 3. SSH
sed -ri 's/^#?Port .*/Port 12345/' /etc/ssh/sshd_config
sed -ri 's/^#?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -ri 's/^#?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
echo "Done. 请使用密钥登录测试!"
五、常见故障排查表
现象 | 排查思路 |
---|---|
ping 不通外网 | 检查网关/掩码/DNS、路由表 ip r |
80 端口拒绝 | ss -lntp 看 nginx/apache 是否启动;防火墙是否放行 |
SSH 连不上 | 确认端口 telnet IP 12345 ;SELinux、云安全组是否放行新端口 |
DNS 解析慢 | 换 DNS echo nameserver 1.1.1.1 > /etc/resolv.conf |
常见面试问题及答案
问题 1:如何查看 Linux 系统中所有网络接口的配置信息?
-
答案 :
bashifconfig
或
baship addr show
问题 2:如何为 Linux 系统中的网络接口配置静态 IP 地址?
-
答案 :
对于 Debian 系列系统,编辑/etc/network/interfaces
文件:plaintextauto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4
对于 RHEL 系列系统,编辑
/etc/sysconfig/network-scripts/ifcfg-eth0
文件:plaintextBOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=8.8.4.4
问题 3:如何测试 Linux 系统中网络的连通性?
-
答案 :
使用ping
命令:bashping -c 4 192.168.1.1
问题 4:如何查看 Linux 系统中网络接口的硬件信息?
-
答案 :
使用lshw
命令:bashsudo lshw -C network
或使用
ethtool
命令:bashsudo ethtool -i eth0
问题 5:如何在 Linux 系统中配置防火墙规则?
-
答案 :
使用iptables
命令:bashsudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
或使用
firewalld
命令:bashsudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --reload
问题 6:如何在 Linux 系统中配置 SSH 服务?
-
答案 :
编辑/etc/ssh/sshd_config
文件:plaintextPort 12345 PermitRootLogin no PasswordAuthentication no
然后重启 SSH 服务:
bashsudo systemctl restart sshd
网络诊断与监控
4.1 查看网络连接状态
① netstat(传统工具,net-tools 包)
常用组合 | 含义 |
---|---|
-a | 列出所有 socket(监听 + 已连接) |
-n | 不做反向解析,IP 和端口都以数字显示 |
-t | 仅显示 TCP |
-u | 仅显示 UDP |
-p | 把拥有 socket 的进程 PID/名字也打印出来 |
-l | 只看处于 LISTEN 状态的 socket |
示例 1:查看当前所有 TCP 监听端口(带进程名)
bash
sudo netstat -lntp
真实输出
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1058/sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 1821/postgres
tcp6 0 0 :::80 :::* LISTEN 1247/nginx
逐行解读
- Proto:协议,
tcp
或tcp6
。 - Recv-Q:LISTEN 状态下表示已完成三次握手、等待应用 accept 的半连接队列长度。
- Send-Q:LISTEN 状态下表示半连接队列的最大容量。
- Local Address:
0.0.0.0:22
表示本机所有 IPv4 地址都监听 22 端口;127.0.0.1:5432
只监听回环。 - State:
LISTEN
表示正在等待连接。 - PID/Program name:哪个进程占用了该 socket。
② ss(iproute2 套件,比 netstat 快且功能更多)
常用组合 | 含义 |
---|---|
-a | 所有 socket |
-n | 不解析名称 |
-t | TCP |
-u | UDP |
-l | 仅监听 |
-p | 显示进程 |
-s | 打印统计摘要 |
示例 2:查看所有 UDP 监听端口(带进程号)
bash
sudo ss -unlp
真实输出
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=987,fd=6))
UNCONN 0 0 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=680,fd=5))
逐行解读
- State
UNCONN
:UDP 无连接,所以不是 LISTEN,而是"未连接"。 - Local Address:Port
0.0.0.0:68
:本机 68 端口(DHCP 客户端)。 - users:进程 PID + 名字 + 文件描述符。
4.2 测试网络连通性
ping(IPv4/IPv6 连通性测试)
常用参数 | 含义 |
---|---|
-c N | 发送 N 个 ICMP Echo 后退出 |
-i S | 每 S 秒发送一次(默认 1s) |
-s SIZE | ICMP 数据部分大小(默认 56 字节) |
-W T | 等待响应的超时时间(秒) |
-4 / -6 | 强制 IPv4/IPv6 |
示例 3:向 8.8.8.8 发送 4 个包
bash
ping -c 4 8.8.8.8
真实输出
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=28.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=27.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=28.1 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=117 time=27.8 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 27.809/28.043/28.411/0.233 ms
逐行解读
- 56(84) bytes:ICMP 数据 56 字节 + 8 字节 ICMP 头 + 20 字节 IP 头 = 84。
- icmp_seq:第几个 Echo 请求。
- ttl=117:剩余跳数(从 128 开始,128-117=11 跳)。
- time=28.4 ms:往返时延。
- 最后统计:发送 4 个,收到 4 个,丢包 0%,平均延迟 28.043 ms。
场景 | 推荐命令 |
---|---|
查看本机所有监听端口 | sudo ss -tulnp (或 netstat -tulnp ) |
查某端口被谁占用 | sudo ss -lntp sport = :80 |
测试到外网通不通 | ping -c 4 8.8.8.8 |
查看路由 | ip r (取代 netstat -r ) |
4.3 跟踪路由
traceroute
常用参数 | 含义 |
---|---|
-n | 不做 DNS 反查,直接显示 IP,速度更快 |
-m | max-hops,默认 30,可手动改小改大 |
-I | 用 ICMP Echo 而不是 UDP 数据包(穿透部分防火墙) |
-T | 用 TCP SYN 探测(常用于 80/443) |
示例
bash
sudo traceroute -n -m 5 8.8.8.8
输出
traceroute to 8.8.8.8 (8.8.8.8), 5 hops max, 60 byte packets
1 192.168.1.1 0.504 ms 0.458 ms 0.432 ms
2 10.10.10.1 2.351 ms 2.123 ms 2.089 ms
3 172.16.0.1 5.630 ms 5.487 ms 5.321 ms
4 202.96.199.1 7.125 ms 7.012 ms 6.893 ms
5 * * *
解读
- 第 1 列:跳数编号。
- 第 2 列:该跳的 IP(因
-n
没做 DNS)。 - 后面 3 个时间:traceroute 默认发 3 个包,RTT 分别列出。
* * *
:第 5 跳超时,可能 ICMP 被丢弃或 TTL 已到达目标但目标不回应。
4.4 DNS 查询
nslookup
交互式参数 | 含义 |
---|---|
-type=A / -type=MX / -type=TXT | 指定查询记录类型 |
-debug | 显示整个响应包内容 |
示例
bash
nslookup -type=MX example.com
输出
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
example.com mail exchanger = 10 mail.example.com.
解读
- Server/Address:本机当前使用的 DNS 服务器。
- Non-authoritative:非权威回答,说明来自缓存。
- 10:MX 优先级,数字越小越优先。
- mail.example.com:真正负责收邮件的主机。
dig
常用参数 | 含义 |
---|---|
+short | 仅显示结果,不显示 flags、headers |
+trace | 逐级迭代查询,从根开始 |
+norecurse | 不请求递归,可测权威服务器 |
@8.8.8.8 | 临时指定 DNS 服务器 |
示例 1:A 记录 + 简短输出
bash
dig example.com A +short
输出:
93.184.216.34
示例 2:完整迭代追踪
bash
dig example.com +trace
输出(截取关键行):
. 518400 IN NS a.root-servers.net.
;; Received 525 bytes from 127.0.0.53#53(127.0.0.53)
com. 172800 IN NS a.gtld-servers.net.
;; Received 828 bytes from 198.41.0.4#53(a.root-servers.net)
example.com. 172800 IN NS a.iana-servers.net.
;; Received 700 bytes from 192.5.6.30#53(a.gtld-servers.net)
example.com. 86400 IN A 93.184.216.34
解读
- 每段以
;;
开头的是注释,告诉你"刚才向谁查到了什么"。 - 从上到下,依次是:根 → TLD(.com) → 目标域的权威服务器 → 最终 A 记录。
4.5 捕获和分析网络流量
tcpdump
常用参数 | 含义 |
---|---|
-i any | 监听所有接口 |
-i eth0 | 指定接口 |
-n | 不解析域名和端口名 |
-nn | 连端口号也不解析 |
-v / -vv / -vvv | 逐级增加详细度 |
-w file.pcap | 写入文件供 Wireshark 分析 |
-c 100 | 抓 100 个包后自动停止 |
host 8.8.8.8 | 只抓与 8.8.8.8 相关的流量 |
port 80 | 只抓 80 端口 |
示例
bash
sudo tcpdump -i eth0 -nn -c 3 host 8.8.8.8
输出
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:21:12.123456 IP 192.168.1.100.54321 > 8.8.8.8.53: UDP, length 64
15:21:12.124789 IP 8.8.8.8.53 > 192.168.1.100.54321: UDP, length 80
15:21:12.125012 IP 192.168.1.100.54322 > 8.8.8.8.53: UDP, length 64
3 packets captured
解读
- 时间戳:微秒级。
- 192.168.1.100.54321:源 IP.源端口。
- 8.8.8.8.53:目的 IP.目的端口(53 即 DNS)。
- UDP:协议,length 表示载荷字节数。
步骤/工具 | 目的(一句话完整描述) |
---|---|
4.1 ① netstat | 通过列出所有监听端口、已建立连接及其所属进程信息,帮助管理员快速确认哪些服务正在运行、哪些端口被占用,是传统网络排查的入门级工具。 |
4.1 ② ss | 利用内核 netlink 接口高速输出套接字统计,比 netstat 更快速、更详细地展示 TCP/UDP/RAW 连接状态、队列长度和进程 PID,适用于高并发场景下的端口监控与故障定位。 |
4.2 ping | 发送 ICMP Echo 请求并统计往返时延和丢包率,用于验证本地到目标主机在 IPv4/IPv6 层的可达性以及链路质量,是最简单直观的网络连通性测试手段。 |
4.3 traceroute | 通过递增 TTL 逐跳发送探测包并记录每一跳返回的 ICMP 超时或端口不可达报文,从而绘制出完整的路由路径并发现潜在的高延迟或丢包节点。 |
4.4 nslookup | 以交互或命令行方式向指定 DNS 服务器查询各类记录(A、AAAA、MX、TXT 等),帮助管理员快速判断域名解析是否正确、权威 DNS 是否生效。 |
4.4 dig | 提供丰富的 DNS 诊断选项(+trace、+short、@server),可完整展示从根到权威服务器的迭代查询过程,精确定位解析故障、缓存污染或 TTL 问题。 |
4.5 tcpdump | 在网络接口上实时捕获并解码链路层到应用层的原始数据包,支持灵活过滤表达式,用于深度故障排查、性能分析与安全取证。 |
一个实际案例整合知识
场景:用户投诉无法访问互联网,如何排查?
-
用
ping
测试:bashping 8.8.8.8
- 如果 不通:可能是本地网络、路由器或 ISP 问题。
- 如果 通但域名不通 :可能是 DNS 问题(如
ping www.baidu.com
失败)。
-
用
traceroute
定位:bashtraceroute 8.8.8.8
- 如果卡在 第一跳 (如
192.168.1.1
):检查路由器是否故障。 - 如果卡在 中间某跳:联系 ISP 报障。
- 如果卡在 第一跳 (如
-
用
netstat
检查本机:bashnetstat -rn # 查看路由表,确认是否有默认网关(如 0.0.0.0 -> 192.168.1.1)
总结
- 协议栈:从下往上理解数据如何封装、传输、解封装。
- 工具 :
ping
测连通性、traceroute
追路径、netstat
看连接。 - 设备与概念:路由器跨网络,交换机隔离冲突域,VLAN 隔离广播域,子网划分优化 IP 使用。
5. VLAN 子接口
-
What
在一张物理网卡上虚拟出带 802.1Q tag 的子接口。 -
Why
交换机 trunk 打 tag,服务器需要识别不同 VLAN。 -
When
需要把一台服务器同时放进多个二层网段。 -
How
bash# 1. 基于 eth0 创建 VLAN ID 100 的子接口 eth0.100 sudo ip link add link eth0 name eth0.100 type vlan id 100 # 2. 给子接口配置 IP sudo ip addr add 192.168.100.10/24 dev eth0.100 # 3. 启用接口 sudo ip link set eth0.100 up # 4. 验证 tag 与状态 ip -d link show eth0.100
6. Bridge(网桥)
-
What
把多张网卡变成一台虚拟交换机。 -
Why
让虚拟机/容器直接出现在物理网络,或做简单二层转发。 -
When
KVM、Docker、LXC 需要桥接;或把多端口当交换机用。 -
How
bash# 1. 创建名为 br0 的网桥 sudo ip link add br0 type bridge # 2. 把 eth0 塞进 br0 sudo ip link set eth0 master br0 # 3. 先启物理口再启桥 sudo ip link set eth0 up sudo ip link set br0 up # 4. 验证端口归属与 STP 状态 bridge -d link
7. Bond(链路聚合)
-
What
把 ≥2 张物理网卡聚合成一个逻辑口。 -
Why
冗余(active-backup)或带宽叠加(LACP)。 -
When
交换机支持 LACP/静态聚合;或需要故障秒级切换。 -
How
bash# 1. 创建 mode=1(active-backup) 的 bond0 sudo ip link add bond0 type bond mode active-backup # 2. 先把从接口关掉,避免抖动 sudo ip link set eth0 down sudo ip link set eth1 down # 3. 把从接口加入 bond sudo ip link set eth0 master bond0 sudo ip link set eth1 master bond0 # 4. 依次启接口 sudo ip link set eth0 up sudo ip link set eth1 up sudo ip link set bond0 up # 5. 验证主备状态 cat /proc/net/bonding/bond0
8. Promiscuous Mode(混杂模式)
-
What
网卡不再按 MAC 过滤,全部收包。 -
Why
抓包、IDS、网络虚拟化必备。 -
When
tcpdump、Wireshark、Docker bridge、Open vSwitch。 -
How
bash# 开启混杂 sudo ip link set eth0 promisc on # 验证标志出现 PROMISC ip link show eth0
9. 防火墙(iptables)
-
What
内核包过滤框架,四表五链。 -
Why
最小权限原则:只让必要流量进出。 -
When
任何对外暴露服务的主机;上线前。 -
How
bash# 追加一条规则:放行入向 TCP/22 sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 查看规则并带行号,方便删除 sudo iptables -L INPUT -n --line-number
10. SSH 服务加固
-
What
改端口、禁 root 密码、强制密钥。 -
Why
减少爆破面,符合合规。 -
When
公网云主机、生产跳板机。 -
How
bash# 1. 先备份原配置 sudo cp /etc/ssh/sshd_config{,.bak} # 2. 改端口为 2222(行内注释:-i 就地替换) sudo sed -ri 's/^#?Port.*/Port 2222/' /etc/ssh/sshd_config # 3. 禁止 root 用密码登录 sudo sed -ri 's/^#?PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config # 4. 重启生效 sudo systemctl restart sshd # 5. 验证监听端口 sudo ss -lntp | grep 2222
11. DNS 解析
-
What
把域名解析成 IP。 -
Why
系统需要外部域名;调试 CDN/内部 DNS。 -
When
新装系统、临时科学上网、测试新 DNS。 -
How
bash# 临时把 /etc/resolv.conf 改成 1.1.1.1 echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf # 验证 systemd-resolve --status | grep -A 3 "DNS Servers"
12. 网卡硬件信息与性能调优
-
What
查看驱动/固件/PCI 地址,调 Ring Buffer。 -
Why
定位兼容性、丢包、性能瓶颈。 -
When
千兆跑不满、升级内核后。 -
How
bash# 1. 查看驱动与固件 sudo ethtool -i eth0 # 2. 查看当前 Ring Buffer ethtool -g eth0 # 3. 把 RX/TX 队列都调到 4096(需网卡支持) sudo ethtool -G eth0 rx 4096 tx 4096 # 4. 验证已生效 ethtool -g eth0 | grep -A2 "Current hardware settings"