Linux 网络三剑客:路由、防火墙与网卡管理实战
AI摘要
本文详细介绍了Linux网络管理的三个核心部分:网卡管理、路由管理和防火墙管理。文章从查看状态到实际配置,提供了详细的命令和配置示例,包括如何查看和配置网卡信息、管理路由表、设置IP转发、使用iptables和firewalld进行防火墙管理等。最后,文章还提供了一个实战案例,展示了如何搭建一个NAT网关,以及一些常用的网络诊断命令。
掌控你的 Linux 网络:路由、防火墙与网卡深度实战
配一台新服务器,大概率要碰这三件事:网卡没 IP、路由不通、端口被防火墙挡住。本文把这三块集中梳理一遍,从查看状态到实际配置,顺带捎上诊断思路。
一、网卡管理
查看网卡信息
# 查看所有网卡(包含详细信息)
ip addr show
# 简写
ip a
# 查看特定网卡
ip addr show eth0
# 传统命令(部分发行版已不预装)
ifconfig
ifconfig eth0输出示例解读:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
inet6 fe80::5054:ff:feab:cdef/64 scope linkUP— 网卡已启用mtu 1500— 最大传输单元,超出会分片inet— IPv4 地址及子网掩码link/ether— MAC 地址
启用 / 禁用网卡
# 启用
ip link set eth0 up
# 禁用
ip link set eth0 down配置 IP 地址
# 临时添加 IP(重启失效)
ip addr add 192.168.1.200/24 dev eth0
# 删除 IP
ip addr del 192.168.1.200/24 dev eth0持久化配置因发行版而异:
# Ubuntu/Debian — 编辑 Netplan 配置
vim /etc/netplan/00-installer-config.yamlnetwork:
ethernets:
eth0:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
version: 2netplan apply# CentOS/RHEL — 编辑网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8systemctl restart NetworkManager网卡统计信息
# 查看收发包数量、错误、丢包
ip -s link show eth0
# 实时监控网卡流量
watch -n 1 cat /proc/net/dev
# 使用 sar(需安装 sysstat)
sar -n DEV 1 5网卡绑定(Bonding)
多网卡绑定可实现链路冗余或带宽聚合:
# 加载 bonding 模块
modprobe bonding
# 查看绑定状态
cat /proc/net/bonding/bond0二、路由管理
路由原理
路由表决定数据包从哪个接口出去、下一跳是谁。匹配规则是最长前缀匹配——子网掩码越长越优先。
查看路由表
# 现代方式
ip route show
# 简写
ip r
# 传统方式
route -n
netstat -rn输出示例:
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
10.0.0.0/8 via 10.0.0.1 dev eth1default— 默认路由(0.0.0.0/0),找不到匹配时走这里via— 下一跳网关dev— 出口网卡metric— 路由优先级,值越小优先级越高
添加 / 删除路由
# 添加静态路由
ip route add 10.10.0.0/16 via 192.168.1.254 dev eth0
# 添加默认路由
ip route add default via 192.168.1.1
# 删除路由
ip route del 10.10.0.0/16
# 修改路由(先删后加,或用 replace)
ip route replace 10.10.0.0/16 via 192.168.1.1策略路由(多路由表)
服务器有多块网卡、需要按来源地址选不同出口时,用策略路由。
# 查看路由规则
ip rule show
# 创建自定义路由表(编辑 /etc/iproute2/rt_tables 添加 200 custom)
echo "200 custom" >> /etc/iproute2/rt_tables
# 在自定义表中添加路由
ip route add default via 10.0.0.1 table custom
# 添加策略:来自 10.0.0.0/24 的包走 custom 表
ip rule add from 10.0.0.0/24 table custom priority 100开启 IP 转发
Linux 默认不转发数据包。让它当路由器,需要手动开启 IP 转发:
# 临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward
# 或
sysctl -w net.ipv4.ip_forward=1
# 持久化(重启生效)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p路由追踪诊断
# 经典 traceroute
traceroute 8.8.8.8
# 更现代,同时测试 ICMP/UDP/TCP
mtr 8.8.8.8
# 查看数据包到目标会走哪条路由
ip route get 8.8.8.8三、防火墙管理
Linux 防火墙的底层是内核的 Netfilter 框架,用户空间工具有三代:
| 工具 | 内核机制 | 适用场景 |
|---|---|---|
iptables | Netfilter (iptables) | 传统,兼容性最好 |
nftables | Netfilter (nftables) | 新一代,替代 iptables |
firewalld | 封装 nftables/iptables | RHEL/CentOS 默认,zone 模型 |
ufw | 封装 iptables | Ubuntu 默认,更简洁 |
iptables
基本概念
- Table(表):filter(默认)、nat、mangle、raw
- Chain(链):INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
- Rule(规则):匹配条件 + 动作(ACCEPT/DROP/REJECT/LOG)
数据包流向:
入站:网卡 → PREROUTING → 路由判断 → INPUT → 本地进程
转发:网卡 → PREROUTING → 路由判断 → FORWARD → POSTROUTING → 出口网卡
出站:本地进程 → OUTPUT → POSTROUTING → 网卡常用命令
# 查看规则(-n 不解析域名,-v 显示计数,--line-numbers 显示行号)
iptables -L -n -v --line-numbers
# 查看 NAT 表
iptables -t nat -L -n -v
# 允许 SSH(端口 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 丢弃其他所有入站
iptables -A INPUT -j DROP
# 删除规则(按行号)
iptables -D INPUT 3
# 插入规则到指定位置
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
# 清空所有规则
iptables -F
# 保存规则(Debian/Ubuntu)
iptables-save > /etc/iptables/rules.v4
# 保存规则(CentOS)
service iptables saveNAT 配置
# SNAT:内网机器通过服务器访问外网(源地址转换)
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
# DNAT:外网访问内网服务(端口映射)
# 将外网 8080 端口映射到内网 192.168.1.10:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80firewalld(CentOS/RHEL 系)
firewalld 使用 zone(区域)概念管理信任级别:
# 查看状态
firewall-cmd --state
# 查看默认 zone
firewall-cmd --get-default-zone
# 查看所有 zone 配置
firewall-cmd --list-all-zones
# 查看当前 zone 规则
firewall-cmd --list-all
# 开放端口(临时)
firewall-cmd --add-port=8080/tcp
# 开放端口(永久)
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
# 开放服务(预定义服务)
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
# 查看支持的服务列表
firewall-cmd --get-services
# 移除端口
firewall-cmd --remove-port=8080/tcp --permanent
# 端口转发
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
# 允许特定 IP 访问
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' --permanentufw(Ubuntu 系)
# 查看状态
ufw status verbose
# 启用 / 禁用
ufw enable
ufw disable
# 允许端口
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
# 允许应用(预定义)
ufw allow 'Nginx Full'
# 拒绝端口
ufw deny 23/tcp
# 允许来自特定 IP
ufw allow from 192.168.1.0/24
# 允许特定 IP 访问特定端口
ufw allow from 10.0.0.5 to any port 3306
# 删除规则
ufw delete allow 8080/tcp
# 默认策略
ufw default deny incoming
ufw default allow outgoing四、综合实战:搭建 NAT 网关
场景:一台服务器有公网网卡 eth0(1.2.3.4)和内网网卡 eth1(192.168.1.1),让内网机器通过它上网。
# 1. 开启转发
sysctl -w net.ipv4.ip_forward=1
# 2. 配置 MASQUERADE(动态 SNAT)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 3. 允许转发
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# 内网机器配置:
# 网关设为 192.168.1.1
# DNS 设为 8.8.8.8五、常用诊断命令速查
# 查看监听端口与连接
ss -tlnp # TCP 监听端口
ss -tulnp # TCP + UDP 监听端口
ss -s # 连接统计摘要
# 测试连通性
ping -c 4 8.8.8.8
curl -v telnet://192.168.1.1:22
# DNS 查询
dig google.com
nslookup google.com
# 查看 ARP 缓存
ip neigh show
arp -n
# 检查路由
ip route get 8.8.8.8
# 查看当前连接数
ss -s
cat /proc/net/sockstat小结
| 场景 | 命令 |
|---|---|
| 查看网卡 IP | ip addr |
| 查看路由表 | ip route |
| 添加静态路由 | ip route add |
| 开启 IP 转发 | sysctl -w net.ipv4.ip_forward=1 |
| iptables 查看规则 | iptables -L -n -v |
| firewalld 开放端口 | firewall-cmd --add-port --permanent |
| ufw 允许端口 | ufw allow 80/tcp |
| 追踪路由 | mtr / traceroute |
| 查看连接状态 | ss -tulnp |
网络配置就三个问题:数据包从哪来、往哪走、能不能过。想清楚这三点,路由、防火墙、网卡的配置就都通了。