如何配置网络

title

Linux网络配置是系统管理的基础技能,本文介绍不同Linux发行版的网络配置方法。

网络配置概述

主要配置内容

  • IP地址配置 - 静态IP或DHCP
  • 网关配置 - 默认路由设置
  • DNS配置 - 域名解析服务器
  • 网络接口管理 - 启用/禁用网络接口
  • 路由配置 - 静态路由添加

配置方法分类

  • 临时配置 - 重启后失效
  • 永久配置 - 修改配置文件
  • 图形界面配置 - 使用GUI工具
  • 命令行配置 - 使用网络管理工具

CentOS/RHEL网络配置

传统网络配置文件

# 编辑网络接口配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0

# 静态IP配置示例
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=12345678-1234-1234-1234-123456789012
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配置示例

# DHCP自动获取IP配置
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=12345678-1234-1234-1234-123456789012
DEVICE=eth0
ONBOOT=yes

网络服务管理

# 重启网络服务
systemctl restart network

# 重启特定网络接口
ifdown eth0
ifup eth0

# 查看网络接口状态
systemctl status network
ip addr show

Ubuntu/Debian网络配置

传统配置方法(/etc/network/interfaces)

# 编辑网络配置文件
sudo vim /etc/network/interfaces

# 静态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配置
auto eth0
iface eth0 inet dhcp

# IPv6配置
iface eth0 inet6 static
    address 2001:db8::100
    netmask 64
    gateway 2001:db8::1

Netplan配置(Ubuntu 18.04+)

# 编辑Netplan配置文件
sudo vim /etc/netplan/01-netcfg.yaml

# 静态IP配置示例
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      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配置示例
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: yes
      dhcp6: yes

# 应用配置
sudo netplan apply

# 测试配置
sudo netplan try

网络服务管理

# 重启网络服务
sudo systemctl restart networking

# 重启NetworkManager
sudo systemctl restart NetworkManager

# 重启特定接口
sudo ifdown eth0 && sudo ifup eth0

现代网络管理工具

NetworkManager配置

# 使用nmcli命令行工具
# 查看网络连接
nmcli connection show

# 查看设备状态
nmcli device status

# 创建静态IP连接
nmcli connection add \
    type ethernet \
    con-name static-eth0 \
    ifname eth0 \
    ip4 192.168.1.100/24 \
    gw4 192.168.1.1

# 设置DNS
nmcli connection modify static-eth0 ipv4.dns "8.8.8.8,8.8.4.4"

# 激活连接
nmcli connection up static-eth0

# 创建DHCP连接
nmcli connection add \
    type ethernet \
    con-name dhcp-eth0 \
    ifname eth0

# 删除连接
nmcli connection delete static-eth0

systemd-networkd配置

# 创建网络配置文件
sudo vim /etc/systemd/network/20-wired.network

# 静态IP配置
[Match]
Name=eth0

[Network]
DHCP=no
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4

# DHCP配置
[Match]
Name=eth0

[Network]
DHCP=ipv4

# 启用服务
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd

临时网络配置

使用ip命令

# 查看网络接口
ip addr show
ip link show

# 启用/禁用网络接口
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 route add default via 192.168.1.1

# 删除默认网关
ip route del default

# 添加静态路由
ip route add 10.0.0.0/8 via 192.168.1.1

使用传统命令

# 配置IP地址
ifconfig eth0 192.168.1.100 netmask 255.255.255.0

# 启用/禁用接口
ifconfig eth0 up
ifconfig eth0 down

# 配置网关
route add default gw 192.168.1.1

# 查看路由表
route -n
netstat -rn

DNS配置

配置DNS服务器

# 编辑DNS配置文件
sudo vim /etc/resolv.conf

# DNS配置示例
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1
search example.com local.domain
options timeout:2 attempts:3

# 防止被覆盖
sudo chattr +i /etc/resolv.conf

# 永久DNS配置(systemd-resolved)
sudo vim /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1 9.9.9.9
Domains=example.com

测试DNS解析

# 测试DNS解析
nslookup google.com
dig google.com
host google.com

# 测试特定DNS服务器
nslookup google.com 8.8.8.8
dig @1.1.1.1 google.com

# 清除DNS缓存
sudo systemd-resolve --flush-caches

无线网络配置

使用NetworkManager

# 扫描无线网络
nmcli device wifi list

# 连接WPA/WPA2网络
nmcli device wifi connect "WiFi-Name" password "password"

# 连接隐藏网络
nmcli device wifi connect "Hidden-WiFi" password "password" hidden yes

# 查看已保存的WiFi配置
nmcli connection show --active

# 断开WiFi连接
nmcli device disconnect wlan0

使用wpa_supplicant

# 创建WiFi配置文件
sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

# WiFi配置示例
country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="WiFi-Name"
    psk="password"
    priority=1
}

network={
    ssid="Open-WiFi"
    key_mgmt=NONE
    priority=2
}

# 启动wpa_supplicant
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

# 获取IP地址
sudo dhclient wlan0

网络诊断和测试

连通性测试

# 测试网络连通性
ping 8.8.8.8
ping google.com

# 测试网络路径
traceroute google.com
mtr google.com

# 测试端口连通性
telnet google.com 80
nc -zv google.com 80

网络状态查看

# 查看网络接口状态
ip addr show
ifconfig -a

# 查看路由表
ip route show
route -n

# 查看网络连接
netstat -tuln
ss -tuln

# 查看ARP表
arp -a
ip neighbor show

网络性能测试

# 网络速度测试
speedtest-cli

# 带宽测试
iperf3 -c server_ip

# 网络延迟测试
ping -c 10 8.8.8.8

# 网络质量测试
mtr --report --report-cycles 10 8.8.8.8

高级网络配置

VLAN配置

# 创建VLAN接口
ip link add link eth0 name eth0.100 type vlan id 100
ip addr add 192.168.100.1/24 dev eth0.100
ip link set eth0.100 up

# 永久VLAN配置(CentOS)
# /etc/sysconfig/network-scripts/ifcfg-eth0.100
DEVICE=eth0.100
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.100.1
NETMASK=255.255.255.0
VLAN=yes

网络绑定(Bonding)

# 加载bonding模块
modprobe bonding

# 创建bond接口
echo +bond0 > /sys/class/net/bonding_masters

# 配置bond模式
echo 802.3ad > /sys/class/net/bond0/bonding/mode

# 添加网卡到bond
ifconfig eth0 down
ifconfig eth1 down
echo +eth0 > /sys/class/net/bond0/bonding/slaves
echo +eth1 > /sys/class/net/bond0/bonding/slaves

# 配置bond IP
ifconfig bond0 192.168.1.100 netmask 255.255.255.0 up

网络桥接配置

# 创建网桥
brctl addbr br0

# 添加接口到网桥
brctl addif br0 eth0

# 配置网桥IP
ifconfig br0 192.168.1.100 netmask 255.255.255.0 up

# 启用STP
brctl stp br0 on

网络配置脚本

自动化网络配置脚本

#!/bin/bash
# network_setup.sh

INTERFACE="eth0"
IP_ADDRESS="192.168.1.100"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"

echo "配置网络接口: $INTERFACE"

# 检测系统类型
if [ -f /etc/centos-release ]; then
    # CentOS/RHEL配置
    cat > /etc/sysconfig/network-scripts/ifcfg-$INTERFACE << EOF
TYPE=Ethernet
BOOTPROTO=static
DEVICE=$INTERFACE
ONBOOT=yes
IPADDR=$IP_ADDRESS
NETMASK=$NETMASK
GATEWAY=$GATEWAY
DNS1=$DNS1
DNS2=$DNS2
EOF

    systemctl restart network

elif [ -f /etc/debian_version ]; then
    # Ubuntu/Debian配置
    if [ -d /etc/netplan ]; then
        # 使用Netplan
        cat > /etc/netplan/01-network.yaml << EOF
network:
  version: 2
  ethernets:
    $INTERFACE:
      dhcp4: no
      addresses: [$IP_ADDRESS/24]
      gateway4: $GATEWAY
      nameservers:
        addresses: [$DNS1, $DNS2]
EOF
        netplan apply
    else
        # 传统配置
        cat > /etc/network/interfaces << EOF
auto lo
iface lo inet loopback

auto $INTERFACE
iface $INTERFACE inet static
    address $IP_ADDRESS
    netmask $NETMASK
    gateway $GATEWAY
    dns-nameservers $DNS1 $DNS2
EOF
        systemctl restart networking
    fi
fi

echo "网络配置完成"
ip addr show $INTERFACE

网络故障排查脚本

#!/bin/bash
# network_troubleshoot.sh

echo "网络故障排查工具"
echo "================="

# 检查网络接口
echo "1. 网络接口状态:"
ip link show | grep -E "^[0-9]+:|state"

# 检查IP配置
echo -e "\n2. IP地址配置:"
ip addr show | grep -E "inet |UP"

# 检查路由
echo -e "\n3. 路由表:"
ip route show

# 检查DNS
echo -e "\n4. DNS配置:"
cat /etc/resolv.conf | grep nameserver

# 连通性测试
echo -e "\n5. 连通性测试:"
ping -c 3 -W 2 8.8.8.8 &>/dev/null && echo "✓ Internet: OK" || echo "✗ Internet: FAILED"
ping -c 3 -W 2 google.com &>/dev/null && echo "✓ DNS: OK" || echo "✗ DNS: FAILED"

# 检查网关
GATEWAY=$(ip route | grep default | awk '{print $3}' | head -1)
if [ -n "$GATEWAY" ]; then
    ping -c 3 -W 2 $GATEWAY &>/dev/null && echo "✓ Gateway ($GATEWAY): OK" || echo "✗ Gateway ($GATEWAY): FAILED"
fi

# 检查服务状态
echo -e "\n6. 网络服务状态:"
systemctl is-active NetworkManager &>/dev/null && echo "✓ NetworkManager: Running" || echo "✗ NetworkManager: Not running"
systemctl is-active systemd-networkd &>/dev/null && echo "✓ systemd-networkd: Running" || echo "- systemd-networkd: Not running"

注意事项

  1. 备份配置: 修改网络配置前备份原配置文件
  2. 测试连接: 配置后测试网络连通性
  3. 重启服务: 修改配置后重启相应的网络服务
  4. 防止锁定: 远程配置时确保SSH连接不中断
  5. 版本差异: 不同系统版本的配置方法可能不同

相关命令

  • ip - 现代网络配置工具
  • ifconfig - 传统网络配置工具
  • route - 路由配置工具
  • ping - 网络连通性测试
  • netstat - 网络状态查看
  • ss - 现代网络状态工具

网络配置是Linux系统管理的基础,掌握不同方法可以灵活应对各种网络环境。

powered by Gitbook© 2025 编外计划 | 最后修改: 2025-07-28 12:42:41

results matching ""

    No results matching ""