如何配置网络
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"
注意事项
- 备份配置: 修改网络配置前备份原配置文件
- 测试连接: 配置后测试网络连通性
- 重启服务: 修改配置后重启相应的网络服务
- 防止锁定: 远程配置时确保SSH连接不中断
- 版本差异: 不同系统版本的配置方法可能不同
相关命令
ip
- 现代网络配置工具ifconfig
- 传统网络配置工具route
- 路由配置工具ping
- 网络连通性测试netstat
- 网络状态查看ss
- 现代网络状态工具
网络配置是Linux系统管理的基础,掌握不同方法可以灵活应对各种网络环境。