Linux网络与路由配置完全指南

Linux网络与路由配置完全指南

在Linux系统管理中,网络配置是一项核心技能,无论是服务器维护、嵌入式网络设备管理还是日常运维,都离不开对网络接口、路由和防火墙的配置与调试。本文将详细介绍Linux系统中常用的网络和路由配置命令,包括传统的ifconfig工具和现代的ip命令,以及相关的网络诊断工具。

一、网络接口配置

网络接口是Linux系统与网络连接的物理或虚拟通道,配置网络接口是建立网络连接的第一步。

1. 查看网络接口信息

使用ifconfig命令
bash 复制代码
ifconfig               # 显示所有激活的网络接口信息
ifconfig -a            # 显示所有网络接口(包括未激活的)
ifconfig eth0          # 显示指定接口eth0的详细信息
ifconfig -s            # 显示所有接口的简要统计信息
使用ip命令
bash 复制代码
ip -br addr show       # 简洁显示所有接口状态
ip addr show eth0      # 查看指定接口eth0的详细信息
ip -s link show eth0   # 查看接口的流量统计(收发数据包数、错误数)
ethtool eth0           # 查看网卡硬件信息(速率、双工模式等)

2. 启用/禁用网络接口

使用ifconfig命令
bash 复制代码
ifconfig eth0 up       # 激活eth0接口
ifconfig eth0 down     # 禁用eth0接口
使用ip命令
bash 复制代码
ip link set eth0 up    # 启用eth0接口
ip link set eth0 down  # 禁用eth0接口

3. 配置IP地址和子网掩码

使用ifconfig命令
bash 复制代码
# 临时设置IP地址和子网掩码
ifconfig eth0 192.168.1.100 netmask 255.255.255.0

# 同时设置广播地址
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255

# 清除接口的IP地址配置
ifconfig eth0 0.0.0.0
使用ip命令
bash 复制代码
# 添加IPv4地址
ip addr add 192.168.1.100/24 dev eth0

# 添加IPv6地址
ip -6 addr add 2001:db8::1/64 dev eth0

# 删除IP地址
ip addr del 192.168.1.100/24 dev eth0

4. 为接口配置多个IP地址

使用ifconfig命令
bash 复制代码
# 为eth0配置第二个IP(别名接口)
ifconfig eth0:0 192.168.1.101 netmask 255.255.255.0
ifconfig eth0:1 192.168.1.102 netmask 255.255.255.0

# 删除别名接口
ifconfig eth0:0 down
使用ip命令
bash 复制代码
# 为eth0添加多个IP地址
ip addr add 192.168.1.101/24 dev eth0 label eth0:1
ip addr add 192.168.1.102/24 dev eth0 label eth0:2

# 删除额外的IP地址
ip addr del 192.168.1.101/24 dev eth0

5. 修改MAC地址

使用ifconfig命令
bash 复制代码
# 先禁用接口
ifconfig eth0 down
# 修改MAC地址
ifconfig eth0 hw ether 00:11:22:33:44:55
# 重新启用接口
ifconfig eth0 up
使用ip命令
bash 复制代码
# 先禁用接口
ip link set eth0 down
# 修改MAC地址
ip link set eth0 address 00:11:22:33:44:55
# 重新启用接口
ip link set eth0 up

6. 配置MTU(最大传输单元)

使用ifconfig命令
bash 复制代码
ifconfig eth0 mtu 1500   # 设置MTU值为1500(默认值)
ifconfig eth0 mtu 9000   # 启用巨型帧(适用于局域网大文件传输)
使用ip命令
bash 复制代码
ip link set eth0 mtu 1500   # 设置MTU值为1500
ip link set eth0 mtu 9000   # 启用巨型帧

7. 启用/禁用混杂模式

bash 复制代码
# 使用ip命令
ip link set eth0 promisc on
ip link set eth0 promisc off

8. 持久化配置(重启生效)

不同Linux发行版的配置文件有所不同:

Debian/Ubuntu(旧版):/etc/network/interfaces
bash 复制代码
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 114.114.114.114

生效命令:sudo ifdown eth0 && sudo ifup eth0

Ubuntu 18.04+ / 新版Debian:/etc/netplan/*.yaml
yaml 复制代码
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]

生效命令:sudo netplan apply

CentOS/RHEL:/etc/sysconfig/network-scripts/ifcfg-eth0
bash 复制代码
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=114.114.114.114

生效命令:sudo systemctl restart network

二、路由配置

路由决定了网络数据包的传输路径,正确配置路由是实现网络互通的关键。

1. 查看路由表

使用route命令
bash 复制代码
route -n           # 显示路由表(数字形式显示IP)
使用ip命令
bash 复制代码
ip route show      # 显示路由表
ip route show table all  # 查看所有路由表
ip route show table 100  # 查看指定ID为100的路由表

2. 添加静态路由

使用route命令
bash 复制代码
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
route add default gw 192.168.1.1 dev eth0  # 添加默认路由
使用ip命令
bash 复制代码
# 添加到指定网段的路由(通过网关)
ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0

# 添加直连路由(无需网关,直接通过接口访问)
ip route add 192.168.3.0/24 dev eth1

# 添加默认路由
ip route add default via 192.168.1.1 dev eth0          # IPv4
ip -6 route add default via 2001:db8::1 dev eth0       # IPv6

3. 删除路由

使用route命令
bash 复制代码
route del -net 192.168.2.0 netmask 255.255.255.0
route del default gw 192.168.1.1
使用ip命令
bash 复制代码
ip route del 192.168.2.0/24          # 删除指定路由
ip route del default                 # 删除默认路由

4. 策略路由(基于源IP/接口选择路由表)

Linux支持多路由表和策略路由,可根据不同条件选择不同的路由表。

bash 复制代码
# 1. 定义自定义路由表(编辑/etc/iproute2/rt_tables)
echo "100  isp1" >> /etc/iproute2/rt_tables  # 表ID 100,名称isp1

# 2. 向自定义表添加路由
ip route add default via 10.0.0.1 dev eth0 table isp1

# 3. 添加策略规则(源IP为192.168.1.0/24的流量使用isp1表)
ip rule add from 192.168.1.0/24 table isp1 priority 100

# 查看策略规则
ip rule show

5. 持久化路由配置

Debian/Ubuntu

/etc/network/interfaces中添加:

bash 复制代码
auto eth0
iface eth0 inet static
    ...
    up ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0  # 启动时添加路由
CentOS/RHEL

创建/etc/sysconfig/network-scripts/route-eth0

bash 复制代码
10.0.0.0/8 via 192.168.1.1 dev eth0

三、网络诊断工具

网络诊断工具用于检测网络连接、排查网络故障和监控网络状态。

1. 测试网络连通性

bash 复制代码
ping 192.168.1.1     # 测试与指定IP的连通性
ping -c 4 google.com # 发送4个ICMP包到google.com
ping -i 2 -c 5 192.168.1.1 # 间隔2秒,共发送5个包

traceroute google.com  # 跟踪到目标的路由路径
mtr google.com         # 结合ping和traceroute的功能,动态显示路由信息

2. 检查端口连通性

bash 复制代码
telnet google.com 80   # 测试到google.com的80端口
nc -zv google.com 80   # 使用netcat测试TCP端口连通性
nc -zvu 192.168.1.1 53 # 使用netcat测试UDP端口连通性

3. 查看网络连接和监听端口

bash 复制代码
netstat -tuln          # 显示所有监听的TCP和UDP端口
netstat -tulnp         # 显示监听端口及对应的进程
ss -tuln               # 类似netstat,更高效
ss -tulnp              # 显示监听端口及对应的进程
ss -tan                # 显示所有TCP连接状态

4. 网络流量监控

bash 复制代码
iftop                  # 实时显示网络带宽使用情况
nload                  # 显示网络流量统计
nethogs eth0           # 按进程显示网络带宽使用情况
tcpdump -i eth0        # 抓取eth0接口的数据包
tcpdump -i eth0 port 80 # 抓取80端口的数据包
tcpdump -w capture.pcap # 保存抓包结果到文件

5. DNS查询与配置

bash 复制代码
# 查看DNS配置
cat /etc/resolv.conf

# 临时修改DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf

# DNS查询
nslookup google.com   # 简单DNS查询
dig google.com        # 详细DNS查询信息
host google.com       # 解析域名到IP

四、防火墙配置

防火墙用于控制网络流量,保护系统安全。

1. iptables防火墙

bash 复制代码
# 查看防火墙规则
iptables -L            # 查看filter表的规则
iptables -L -n -v      # 详细显示规则,IP以数字形式显示
iptables -t nat -L     # 查看nat表规则

# 允许SSH连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许HTTP和HTTPS连接
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 拒绝所有其他入站流量
iptables -A INPUT -j DROP

# 保存规则(CentOS)
service iptables save

# 保存规则(Debian/Ubuntu)
iptables-save > /etc/iptables/rules.v4

2. ufw防火墙(Ubuntu常用)

bash 复制代码
# 查看防火墙状态
ufw status
ufw status verbose

# 启用/禁用防火墙
ufw enable
ufw disable

# 开放/关闭端口
ufw allow 80/tcp       # 允许TCP 80端口
ufw allow ssh          # 允许SSH服务
ufw deny 22/tcp        # 禁止TCP 22端口

# 允许特定IP访问
ufw allow from 192.168.1.100

# 删除规则
ufw delete allow 80/tcp

五、其他常用网络命令

bash 复制代码
# 查看主机名
hostname
hostnamectl

# 修改主机名(持久化)
sudo hostnamectl set-hostname myserver

# 查看DNS服务状态
systemctl status systemd-resolved

# 刷新DNS缓存
sudo systemctl restart systemd-resolved  # systemd系统
sudo /etc/init.d/nscd restart            # 非systemd系统

总结

本文详细介绍了Linux系统中网络和路由配置的常用命令,包括网络接口配置、路由管理、网络诊断和防火墙设置等内容。虽然ifconfig等传统命令仍在广泛使用,但ip命令作为更强大、更全面的工具,已逐渐成为主流。在实际应用中,应根据具体的Linux发行版和系统版本选择合适的命令和配置方式,确保网络配置的正确性和稳定性。

相关推荐
大海无量_949684 小时前
使用imapsync增量同步邮件到新邮局服务器
运维·服务器
2301_810730104 小时前
Chrony服务器实验练习
运维·服务器
ssm11224 小时前
ubuntu服务器无法识别所有显卡
运维·服务器·ubuntu
云道轩5 小时前
解决 “默认的putty 很快就断开了,无法连接服务器”
运维·服务器
ximy13355 小时前
AI服务器工作之系统下查看硬件(ubuntu为例)
运维·服务器·ubuntu
慧都小妮子5 小时前
基于C++ UA Server SDK开发高性能与跨平台 OPC UA 服务器
c++·跨平台·高性能·opc ua·ua server sdk
INGNIGHT5 小时前
单词搜索 II · Word Search II
数据结构·c++·算法
楼田莉子5 小时前
C++学习:C++11关于类型的处理
开发语言·c++·后端·学习
自由会客室5 小时前
Nginx 日志轮转
运维·服务器