教程 linux tutorial

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 eth0

2.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 eth0

3.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 try

3.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 eth0

4. 路由配置

4.1 查看路由表

bash
# 使用 route 命令(传统方法)
route -n

# 使用 ip 命令(现代方法)
ip route show

4.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 eth0

4.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 eth0

4.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.1

5. 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.1

5.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.com

5.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-resolved

6. 高级网络配置

6.1 网络接口绑定(Bonding)

网络接口绑定可以将多个物理网络接口组合成一个逻辑接口,提供冗余和负载均衡。

6.1.1 Debian/Ubuntu 系统配置

  1. 安装必要的软件包:
bash
apt-get update
apt-get install ifenslave
  1. 编辑网络配置文件:
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   # 接口上线延迟
  1. 加载 bonding 模块:
bash
echo "bonding" >> /etc/modules
modprobe bonding
  1. 重启网络服务:
bash
/etc/init.d/networking restart

6.1.2 RHEL/CentOS 系统配置

  1. 创建绑定接口配置文件:
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"
  1. 配置物理接口:
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
  1. 重启网络服务:
bash
systemctl restart network

6.2 虚拟局域网(VLAN)配置

VLAN 允许将单个物理网络划分为多个逻辑网络,提高网络安全性和性能。

6.2.1 安装 VLAN 支持

bash
# Debian/Ubuntu 系统
apt-get install vlan

# RHEL/CentOS 系统
yum install vconfig

6.2.2 加载 8021q 模块

bash
modprobe 8021q
echo "8021q" >> /etc/modules  # Debian/Ubuntu
echo "8021q" >> /etc/sysconfig/modules/8021q.modules  # RHEL/CentOS

6.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.0

RHEL/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=yes

6.3 网络桥接配置

网络桥接允许将多个网络接口连接到一个虚拟交换机上,常用于虚拟化环境。

6.3.1 安装桥接工具

bash
# Debian/Ubuntu 系统
apt-get install bridge-utils

# RHEL/CentOS 系统
yum install bridge-utils

6.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 0

RHEL/CentOS 系统:

修改物理接口配置:

bash
nano /etc/sysconfig/network-scripts/ifcfg-eth0
ini
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0

创建桥接接口配置:

bash
nano /etc/sysconfig/network-scripts/ifcfg-br0
ini
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
DELAY=0

7. 网络服务管理

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=true

8. 网络配置故障排除

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 NetworkManager

8.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
EOF

9. 总结

Linux 网络配置是系统管理中的重要技能,本文介绍了从基础到高级的各种网络配置方法,包括临时配置和持久化配置,静态 IP 设置和 DHCP 配置,以及路由、DNS、网络接口绑定、VLAN 和网络桥接等高级功能。

通过本文的学习,您应该能够:

  • 使用 ifconfig 和 ip 命令配置网络接口
  • 通过编辑配置文件实现持久化网络配置
  • 配置路由和 DNS 解析
  • 设置高级网络功能,如网络接口绑定、VLAN 和网络桥接
  • 使用 NetworkManager 和 systemd-networkd 等工具管理网络
  • 诊断和解决常见的网络配置问题

在实际工作中,网络配置可能因 Linux 发行版和具体需求而有所不同,建议参考相关发行版的官方文档获取更详细的配置信息。