主题
Linux 网络配置 - 详解网络接口设置与管理
1. 网络配置概述
Linux 网络配置是系统管理中的重要部分,合理配置网络接口对于确保系统网络连接的稳定性和性能至关重要。Linux 系统提供了多种配置网络的方法,包括命令行工具、配置文件和图形化界面。
1.1 网络配置方法
在 Linux 系统中,主要有以下几种网络配置方法:
- 命令行配置:使用
ifconfig、ip等命令临时配置网络 - 配置文件:通过编辑配置文件实现持久化配置
- 图形界面配置:通过桌面环境提供的网络管理工具配置
- 网络管理服务:使用 NetworkManager、systemd-networkd 等服务管理网络
1.2 网络配置文件位置
不同的 Linux 发行版使用不同的网络配置文件:
Debian/Ubuntu 系统:
/etc/network/interfaces:传统网络配置文件/etc/netplan/:Ubuntu 18.04+ 使用的网络配置目录
RHEL/CentOS 系统:
/etc/sysconfig/network-scripts/ifcfg-*:网络接口配置文件
通用配置文件:
/etc/resolv.conf:DNS 解析配置/etc/hostname:主机名配置/etc/hosts:本地主机名解析
2. 网络接口配置基础
2.1 查看网络接口信息
在配置网络之前,首先需要了解系统中的网络接口信息:
bash
# 使用 ifconfig 命令(传统方法)
ifconfig -a
# 使用 ip 命令(现代方法)
ip addr show
ip link show
# 查看网络接口统计信息
ip -s link
# 查看网络接口配置详情
ethtool eth02.2 使用 ifconfig 配置网络接口
ifconfig 是一个传统的网络配置命令,可以临时配置网络接口:
bash
# 启用网络接口
ifconfig eth0 up
# 禁用网络接口
ifconfig eth0 down
# 配置静态 IP 地址
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
# 配置多个 IP 地址到一个接口
ifconfig eth0:0 192.168.1.101 netmask 255.255.255.0
# 修改 MAC 地址
ifconfig eth0 hw ether 00:11:22:33:44:55
# 设置 MTU 值
ifconfig eth0 mtu 1500注意:使用 ifconfig 命令的配置是临时的,系统重启后会丢失。
2.3 使用 ip 命令配置网络接口
ip 命令是现代 Linux 系统推荐使用的网络配置工具,功能更强大:
bash
# 启用网络接口
ip link set eth0 up
# 禁用网络接口
ip link set eth0 down
# 配置 IP 地址
ip addr add 192.168.1.100/24 dev eth0
# 删除 IP 地址
ip addr del 192.168.1.100/24 dev eth0
# 添加第二个 IP 地址(别名)
ip addr add 192.168.1.101/24 dev eth0 label eth0:1
# 修改 MAC 地址
ip link set dev eth0 address 00:11:22:33:44:55
# 设置 MTU 值
ip link set dev eth0 mtu 1500
# 刷新网络接口
ip link set dev eth0 down
ip link set dev eth0 up同样,使用 ip 命令的配置也是临时的,系统重启后会丢失。
3. 持久化网络配置
3.1 Debian/Ubuntu 系统网络配置
3.1.1 使用 /etc/network/interfaces 配置
在 Debian/Ubuntu 系统中,可以通过编辑 /etc/network/interfaces 文件实现持久化网络配置:
bash
# 编辑网络配置文件
nano /etc/network/interfaces配置静态 IP:
bash
# 回环接口
auto lo
iface lo inet loopback
# 配置静态 IP 的以太网接口
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
dns-search example.com配置 DHCP:
bash
# 配置 DHCP 的以太网接口
auto eth0
iface eth0 inet dhcp应用配置:
bash
# 重启网络服务
/etc/init.d/networking restart
# 或
ifdown eth0 && ifup eth03.1.2 使用 Netplan 配置(Ubuntu 18.04+)
Ubuntu 18.04 及更高版本使用 Netplan 进行网络配置:
bash
# 查看 Netplan 配置文件
ls -la /etc/netplan/
# 编辑配置文件
nano /etc/netplan/01-network-manager-all.yaml配置静态 IP:
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, 8.8.4.4]
search: [example.com]配置 DHCP:
yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
optional: true应用配置:
bash
# 应用 Netplan 配置
netplan apply
# 测试配置语法
netplan try3.2 RHEL/CentOS 系统网络配置
在 RHEL/CentOS 系统中,网络接口配置文件位于 /etc/sysconfig/network-scripts/ 目录下,以 ifcfg-接口名 命名:
bash
# 编辑网络接口配置文件
nano /etc/sysconfig/network-scripts/ifcfg-eth0配置静态 IP:
ini
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
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=8.8.4.4配置 DHCP:
ini
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
DEVICE=eth0
ONBOOT=yes应用配置:
bash
# 重启网络服务(RHEL/CentOS 6)
/etc/init.d/network restart
# 重启网络服务(RHEL/CentOS 7+)
systemctl restart network
# 或重启特定接口
ifdown eth0 && ifup eth04. 路由配置
4.1 查看路由表
bash
# 使用 route 命令(传统方法)
route -n
# 使用 ip 命令(现代方法)
ip route show4.2 配置路由
bash
# 添加默认路由
ip route add default via 192.168.1.1 dev eth0
# 添加网络路由
ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0
# 添加主机路由
ip route add 10.1.1.1 via 192.168.1.254 dev eth0
# 删除路由
ip route del 10.0.0.0/8
# 修改路由
ip route replace 10.0.0.0/8 via 192.168.1.250 dev eth04.3 持久化路由配置
4.3.1 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
# 添加静态路由
up ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0
up ip route add 172.16.0.0/12 via 192.168.1.253 dev eth04.3.2 RHEL/CentOS 系统
创建路由配置文件 /etc/sysconfig/network-scripts/route-eth0:
bash
# 方法1:网络/掩码 via 网关
10.0.0.0/8 via 192.168.1.254
# 方法2:使用完整的路由命令
# ADDRESS0=10.0.0.0
# NETMASK0=255.0.0.0
# GATEWAY0=192.168.1.254
# ADDRESS1=172.16.0.0
# NETMASK1=255.240.0.0
# GATEWAY1=192.168.1.253或者在 /etc/sysconfig/network 文件中添加默认网关:
ini
NETWORKING=yes
HOSTNAME=server.example.com
GATEWAY=192.168.1.15. DNS 配置
5.1 /etc/resolv.conf 文件
DNS 配置主要通过 /etc/resolv.conf 文件进行:
bash
# 编辑 DNS 配置文件
nano /etc/resolv.conf基本配置格式:
# 设置默认搜索域
search example.com sub.example.com
# 设置 DNS 服务器
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.15.2 持久化 DNS 配置
注意:在许多现代 Linux 系统中,/etc/resolv.conf 文件可能是由 NetworkManager、systemd-resolved 或其他网络服务自动生成的,直接编辑可能会被覆盖。
5.2.1 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 8.8.4.4
dns-search example.com对于使用 Netplan 的系统:
yaml
network:
version: 2
ethernets:
eth0:
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
search: [example.com]5.2.2 RHEL/CentOS 系统
在网络接口配置文件中配置:
ini
# 在 /etc/sysconfig/network-scripts/ifcfg-eth0 中添加
DNS1=8.8.8.8
DNS2=8.8.4.4
DOMAIN=example.com或者在 /etc/sysconfig/network 文件中配置:
ini
# 在 /etc/sysconfig/network 中添加
DNS1=8.8.8.8
DNS2=8.8.4.4
DOMAIN=example.com5.3 使用 systemd-resolved
在使用 systemd 的现代 Linux 系统中,可以通过 systemd-resolved 管理 DNS:
bash
# 启用并启动 systemd-resolved 服务
systemctl enable systemd-resolved
systemctl start systemd-resolved
# 配置 DNS 服务器
nano /etc/systemd/resolved.conf在 resolved.conf 中添加:
ini
[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=example.com然后重新启动服务:
bash
systemctl restart systemd-resolved6. 高级网络配置
6.1 网络接口绑定(Bonding)
网络接口绑定可以将多个物理网络接口组合成一个逻辑接口,提供冗余和负载均衡。
6.1.1 Debian/Ubuntu 系统配置
- 安装必要的软件包:
bash
apt-get update
apt-get install ifenslave- 编辑网络配置文件:
bash
nano /etc/network/interfaces添加以下内容:
bash
# 物理接口配置
auto eth0
iface eth0 inet manual
bond-master bond0
auto eth1
iface eth1 inet manual
bond-master bond0
# 绑定接口配置
auto bond0
iface bond0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
bond-slaves eth0 eth1
bond-mode 802.3ad # LACP 模式
bond-miimon 100 # 链路监控间隔(毫秒)
bond-downdelay 200 # 接口宕机延迟
bond-updelay 200 # 接口上线延迟- 加载 bonding 模块:
bash
echo "bonding" >> /etc/modules
modprobe bonding- 重启网络服务:
bash
/etc/init.d/networking restart6.1.2 RHEL/CentOS 系统配置
- 创建绑定接口配置文件:
bash
nano /etc/sysconfig/network-scripts/ifcfg-bond0添加以下内容:
ini
DEVICE=bond0
NAME=bond0
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
BONDING_OPTS="mode=4 miimon=100 downdelay=200 updelay=200"- 配置物理接口:
bash
nano /etc/sysconfig/network-scripts/ifcfg-eth0添加以下内容:
ini
DEVICE=eth0
NAME=eth0
TYPE=Ethernet
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes同样配置 eth1:
bash
nano /etc/sysconfig/network-scripts/ifcfg-eth1- 重启网络服务:
bash
systemctl restart network6.2 虚拟局域网(VLAN)配置
VLAN 允许将单个物理网络划分为多个逻辑网络,提高网络安全性和性能。
6.2.1 安装 VLAN 支持
bash
# Debian/Ubuntu 系统
apt-get install vlan
# RHEL/CentOS 系统
yum install vconfig6.2.2 加载 8021q 模块
bash
modprobe 8021q
echo "8021q" >> /etc/modules # Debian/Ubuntu
echo "8021q" >> /etc/sysconfig/modules/8021q.modules # RHEL/CentOS6.2.3 配置 VLAN 接口
Debian/Ubuntu 系统:
bash
nano /etc/network/interfaces添加以下内容:
bash
# VLAN 10 配置
auto eth0.10
iface eth0.10 inet static
address 192.168.10.100
netmask 255.255.255.0
gateway 192.168.10.1
# VLAN 20 配置
auto eth0.20
iface eth0.20 inet static
address 192.168.20.100
netmask 255.255.255.0RHEL/CentOS 系统:
创建 VLAN 接口配置文件:
bash
nano /etc/sysconfig/network-scripts/ifcfg-eth0.10添加以下内容:
ini
DEVICE=eth0.10
BOOTPROTO=static
IPADDR=192.168.10.100
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
ONBOOT=yes
VLAN=yes6.3 网络桥接配置
网络桥接允许将多个网络接口连接到一个虚拟交换机上,常用于虚拟化环境。
6.3.1 安装桥接工具
bash
# Debian/Ubuntu 系统
apt-get install bridge-utils
# RHEL/CentOS 系统
yum install bridge-utils6.3.2 配置网络桥接
Debian/Ubuntu 系统:
bash
nano /etc/network/interfaces添加以下内容:
bash
# 物理接口配置
auto eth0
iface eth0 inet manual
# 桥接接口配置
auto br0
iface br0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0RHEL/CentOS 系统:
修改物理接口配置:
bash
nano /etc/sysconfig/network-scripts/ifcfg-eth0ini
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0创建桥接接口配置:
bash
nano /etc/sysconfig/network-scripts/ifcfg-br0ini
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
DELAY=07. 网络服务管理
7.1 NetworkManager
NetworkManager 是一个动态网络管理工具,常用于桌面环境,也可以在服务器上使用:
bash
# 检查 NetworkManager 状态
systemctl status NetworkManager
# 启动/停止/重启 NetworkManager
systemctl start NetworkManager
systemctl stop NetworkManager
systemctl restart NetworkManager
# 设置开机自启/禁止开机自启
systemctl enable NetworkManager
systemctl disable NetworkManager
# 使用 nmcli 命令行工具管理网络
nmcli connection show
nmcli device status
# 创建新的网络连接
nmcli connection add type ethernet con-name eth0 ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1
# 启动/停止网络连接
nmcli connection up eth0
nmcli connection down eth0
# 修改网络连接
nmcli connection modify eth0 ipv4.dns "8.8.8.8 8.8.4.4"7.2 systemd-networkd
systemd-networkd 是 systemd 的网络管理组件,适合服务器环境:
bash
# 检查 systemd-networkd 状态
systemctl status systemd-networkd
# 启动/停止/重启 systemd-networkd
systemctl start systemd-networkd
systemctl stop systemd-networkd
systemctl restart systemd-networkd
# 设置开机自启/禁止开机自启
systemctl enable systemd-networkd
systemctl disable systemd-networkd
# 创建网络配置文件
nano /etc/systemd/network/20-eth0.network示例配置:
ini
[Match]
Name=eth0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
[DHCP]
# 如需使用 DHCP 取消注释下行
# UseDNS=true8. 网络配置故障排除
8.1 常见网络配置问题
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 网络接口无法启动 | 接口名称错误、驱动问题、硬件故障 | 检查接口名称、更新驱动、检查硬件连接 |
| 无法获取 IP 地址 | DHCP 服务器问题、网络配置错误 | 检查 DHCP 服务器、验证网络配置 |
| 可以 ping IP 但无法访问域名 | DNS 配置错误 | 检查 /etc/resolv.conf、测试 DNS 服务器 |
| 本地网络连通但无法访问互联网 | 网关配置错误、DNS 错误、防火墙问题 | 检查网关设置、DNS 配置、防火墙规则 |
| 网络连接不稳定 | 硬件问题、驱动问题、网络冲突 | 更换网线、更新驱动、检查 IP 冲突 |
8.2 网络配置验证
bash
# 验证 IP 地址配置
ip addr show
# 验证路由配置
ip route show
# 测试网络连通性
ping -c 4 192.168.1.1
ping -c 4 8.8.8.8
# 测试 DNS 解析
dig www.example.com
nslookup www.example.com
# 检查网络连接状态
netstat -tuln
ss -tuln
# 查看网络接口错误统计
ip -s link
# 检查系统日志中的网络相关信息
journalctl -u network
journalctl -u NetworkManager8.3 重置网络配置
如果遇到严重的网络配置问题,可以尝试重置网络配置:
bash
# Debian/Ubuntu 系统
# 重置网络配置文件到默认状态
cp /etc/network/interfaces.dpkg-dist /etc/network/interfaces
# RHEL/CentOS 系统
# 备份当前配置
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak
# 重新创建配置文件
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << 'EOF'
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
EOF9. 总结
Linux 网络配置是系统管理中的重要技能,本文介绍了从基础到高级的各种网络配置方法,包括临时配置和持久化配置,静态 IP 设置和 DHCP 配置,以及路由、DNS、网络接口绑定、VLAN 和网络桥接等高级功能。
通过本文的学习,您应该能够:
- 使用 ifconfig 和 ip 命令配置网络接口
- 通过编辑配置文件实现持久化网络配置
- 配置路由和 DNS 解析
- 设置高级网络功能,如网络接口绑定、VLAN 和网络桥接
- 使用 NetworkManager 和 systemd-networkd 等工具管理网络
- 诊断和解决常见的网络配置问题
在实际工作中,网络配置可能因 Linux 发行版和具体需求而有所不同,建议参考相关发行版的官方文档获取更详细的配置信息。