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 link
  • UP — 网卡已启用
  • 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.yaml
network:
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]
  version: 2
netplan apply
# CentOS/RHEL — 编辑网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
systemctl 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 eth1
  • default — 默认路由(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 框架,用户空间工具有三代:

工具内核机制适用场景
iptablesNetfilter (iptables)传统,兼容性最好
nftablesNetfilter (nftables)新一代,替代 iptables
firewalld封装 nftables/iptablesRHEL/CentOS 默认,zone 模型
ufw封装 iptablesUbuntu 默认,更简洁

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 save

NAT 配置

# 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:80

firewalld(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' --permanent

ufw(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

小结

场景命令
查看网卡 IPip 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

网络配置就三个问题:数据包从哪来、往哪走、能不能过。想清楚这三点,路由、防火墙、网卡的配置就都通了。

标签: none

添加新评论