一、 为什么要手动配置Linux网络?

你好!今天我们来聊聊Linux服务器或电脑的网络配置。你可能会想,现在不都是图形化界面一点就行了吗?确实,对于桌面版Linux,图形化工具很方便。但在服务器世界里,尤其是在没有图形界面的生产环境或云服务器中,我们经常需要通过命令行和修改配置文件来管理网络。这就像给房子布置水电线路,虽然看不见,但至关重要。

掌握手动配置网络的能力,能让你在网络出现问题时快速定位和修复,也能让你更灵活地根据需求调整网络设置,比如设置静态IP保证服务器地址不变,或者修改DNS服务器来加速域名解析。别担心,这个过程没有想象中那么复杂,跟着步骤来,你很快就能上手。

二、 认识Linux网络配置的核心文件

在动手之前,我们先得知道“工具”和“图纸”在哪。在Linux中,网络配置信息主要存放在几个特定的文件里,不同的Linux发行版可能略有不同。我们这里以目前最主流、应用最广泛的Rocky Linux/CentOS/RHEL 8+ 及 Fedora系列为例,因为它们采用了新的NetworkManager服务和nmcli工具,同时兼容传统的配置文件方式,功能强大且统一。

核心文件与概念:

  1. 网络连接配置文件:位于 /etc/NetworkManager/system-connections/ 目录下,每个网络连接(如有线、无线)都有一个对应的.nmconnection文件。这是NetworkManager管理的主要配置文件。
  2. 传统配置文件/etc/sysconfig/network-scripts/ 目录下的 ifcfg-* 文件(在旧版本中是核心,在新版本中可能由NetworkManager生成或兼容)。
  3. DNS解析配置/etc/resolv.conf 文件,它定义了系统使用哪个DNS服务器来解析域名。不过要注意,现在它通常由NetworkManagersystemd-resolved自动管理,直接修改可能被覆盖。
  4. 主机名配置/etc/hostname 文件,里面就写着你的机器名。

我们今天主要聚焦于第一种方式,即使用NetworkManagernmcli命令行工具和其配置文件,这是现代Linux网络管理的推荐做法。

三、 实战修改:一步步配置静态IP、网关和DNS

理论说再多,不如动手做一遍。我们假设要为你的有线网卡(设备名通常为eth0ens192等)配置一个静态网络。

技术栈声明:本文所有示例基于 Rocky Linux 9 / RHEL 9 及同系发行版,使用 NetworkManager 的 nmcli 工具集。

首先,打开你的终端。让我们先查看一下当前所有的网络连接。

# 查看所有网络连接(活动和非活动的)
nmcli connection show

# 更详细地查看某个连接的信息,比如名为“有线连接 1”的连接
# nmcli connection show "有线连接 1"

假设我们看到的网卡设备名是 ens192,对应的连接名是 Wired connection 1。我们现在要修改这个连接,为其设置静态IP。

示例一:使用nmcli命令行修改网络配置

nmcli 命令非常强大,可以直接修改并立即生效。

# 示例:将连接“Wired connection 1”的IPv4配置方法改为手动(manual),并设置IP、网关、DNS
# 注意:连接名如果包含空格,需要用引号括起来。
sudo nmcli connection modify "Wired connection 1" \
    ipv4.method manual \                    # 将IPv4获取方式从自动(DHCP)改为手动配置
    ipv4.addresses 192.168.1.100/24 \       # 设置静态IP地址和子网掩码(/24代表255.255.255.0)
    ipv4.gateway 192.168.1.1 \              # 设置默认网关地址
    ipv4.dns "8.8.8.8 114.114.114.114"     # 设置DNS服务器,多个DNS用空格隔开

# 修改完成后,需要重新激活(重启)这个网络连接以使更改生效
sudo nmcli connection up "Wired connection 1"

# 验证配置是否生效
ip addr show ens192                         # 查看IP地址是否已变更为192.168.1.100
ping -c 4 8.8.8.8                          # 测试是否能ping通网关或外网DNS
cat /etc/resolv.conf                       # 查看DNS配置是否已更新

示例二:直接编辑NetworkManager连接配置文件

如果你更喜欢直接编辑文件,或者需要备份/复制配置,可以直接操作配置文件。

# 1. 首先,找到对应连接的配置文件。连接名中的空格在文件名中会转换为下划线。
# 例如,“Wired connection 1”对应的文件可能是 `Wired connection 1.nmconnection`
# 它们位于 /etc/NetworkManager/system-connections/ 目录下。
sudo ls -la /etc/NetworkManager/system-connections/

# 2. 使用文本编辑器(如vim或nano)备份并编辑该文件
sudo cp /etc/NetworkManager/system-connections/Wired\ connection\ 1.nmconnection ~/backup.nmconnection
sudo vim /etc/NetworkManager/system-connections/Wired\ connection\ 1.nmconnection

在打开的文件中,找到 [ipv4] 部分,进行如下修改:

# 文件内容示例 (只展示关键部分)
[connection]
id=Wired connection 1
uuid=你的唯一标识符
type=ethernet
interface-name=ens192

[ipv4]
# 将 method=auto 修改为 method=manual
method=manual
# 添加或修改以下行
addresses1=192.168.1.100/24,192.168.1.1
dns=8.8.8.8;114.114.114.114;
# 注意:addresses字段的格式是 `IP/前缀,网关`,dns字段用分号分隔

[ipv6]
method=auto

[ethernet]

保存文件后,同样需要让NetworkManager重新加载配置并激活连接。

# 重新加载所有配置文件
sudo nmcli connection reload

# 关闭再打开该连接(或者直接`down`然后`up`)
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"

四、 一键设置脚本:效率提升小技巧

对于需要频繁配置相似网络环境(比如部署多台测试服务器)的情况,手动敲命令还是太慢。我们可以写一个简单的Shell脚本,实现“一键配置”。

示例三:编写一个静态IP配置脚本

创建一个新文件,比如叫 set_static_ip.sh

#!/bin/bash
# 一键配置静态IP、网关、DNS脚本
# 技术栈:Rocky Linux/RHEL 9 with NetworkManager

# 定义变量,方便修改
CONN_NAME="Wired connection 1"      # 要修改的网络连接名称
IP_ADDR="192.168.1.150/24"          # 要设置的IP地址和子网前缀
GATEWAY="192.168.1.1"               # 网关地址
DNS_SERVERS="8.8.8.8 1.1.1.1"       # DNS服务器,空格分隔

echo "开始配置网络连接: $CONN_NAME"
echo "设定IP: $IP_ADDR, 网关: $GATEWAY"

# 使用nmcli命令修改配置
sudo nmcli connection modify "$CONN_NAME" \
    ipv4.method manual \
    ipv4.addresses $IP_ADDR \
    ipv4.gateway $GATEWAY \
    ipv4.dns "$DNS_SERVERS"

# 检查上一条命令是否执行成功
if [ $? -eq 0 ]; then
    echo "配置修改成功,正在重新激活连接..."
    # 重启网络连接
    sudo nmcli connection down "$CONN_NAME"
    sudo nmcli connection up "$CONN_NAME"
    
    # 验证配置
    echo "验证新配置:"
    ip -4 addr show | grep inet
    echo "DNS配置:"
    cat /etc/resolv.conf | grep nameserver
else
    echo "配置修改失败,请检查连接名称和权限。"
    exit 1
fi

echo "网络一键配置完成!"

给脚本添加执行权限并运行:

chmod +x set_static_ip.sh
sudo ./set_static_ip.sh

五、 深入理解:应用场景、优缺点与注意事项

应用场景:

  1. 服务器部署:Web服务器、数据库服务器等需要固定IP以便客户端稳定访问。
  2. 局域网管理:在内部网络中,为不同设备分配固定的IP,便于管理和识别。
  3. 网络调试与隔离:在测试环境中,手动配置IP可以模拟不同的网络环境,或者进行网络问题排查。
  4. DNS优化:更换为更快速、更安全的DNS服务器(如1.1.1.18.8.8.8),提升上网体验和安全性。

技术优缺点:

  • 优点
    • 稳定可控:静态IP不会像DHCP那样可能发生改变,对于服务稳定性至关重要。
    • 灵活性强:可以精细控制每一个网络参数,满足复杂网络需求。
    • 学习价值高:理解底层配置有助于深入理解Linux系统和网络原理,是系统管理员的基本功。
    • 适合自动化:通过脚本(如示例三)或配置管理工具(如Ansible),可以批量、自动化地完成网络配置。
  • 缺点
    • 配置繁琐:相比DHCP自动获取,手动配置步骤较多,容易输错。
    • 容易冲突:如果IP地址规划不当,容易与网络中其他设备的IP地址冲突,导致网络故障。
    • 维护成本:当网络结构发生变化(如网关改变)时,需要逐台修改配置。

重要注意事项:

  1. 备份!备份!备份!:在修改任何关键的网络配置文件之前,一定要先备份。可以使用cp命令复制一份,或者使用nmcli connection clone克隆一个连接进行测试。
  2. 小心连接名称nmcli操作的对象是“连接名”(connection name),而不是“设备名”(device name)。使用nmcli connection show确认正确的名称。
  3. 远程操作风险:如果你是通过SSH远程登录到服务器进行网络配置,修改错误可能导致网络断开,使你失去连接。建议:
    • 在操作前,先确保有通过控制台(如云服务商的VNC、物理机的显示器)访问服务器的途径。
    • 可以使用nmcli--ask参数,或者在修改配置后先不立即up,设置一个计划任务在几分钟后生效,给自己留出检查时间。
  4. DNS配置持久化:在较新系统中,直接修改/etc/resolv.conf可能无效,因为它是由其他服务管理的。通过nmcli修改连接配置中的DNS,才是持久化生效的正确方法。
  5. 了解你的网络环境:在设置IP、网关之前,务必清楚你所在网络的网段、可用的IP地址范围以及正确的网关地址,否则配置后无法上网。

六、 总结

通过今天的学习,我们从“为什么需要手动配置网络”开始,认识了Linux中网络配置的核心文件,特别是现代Linux发行版推崇的NetworkManagernmcli工具。我们通过两个详细的示例,分别演示了如何使用nmcli命令行和直接编辑配置文件来设置静态IP、网关和DNS。为了提升效率,我们还编写了一个可复用的一键配置脚本。

网络配置是Linux系统管理中的一项基础且关键的技能。它就像一把钥匙,帮你打开服务器稳定运行的大门。虽然初次接触可能觉得有些复杂,但只要理解了核心概念(连接 vs 设备、IPv4方法),并掌握了nmcli这个强大工具的基本用法,你就能从容应对大多数网络配置需求。记住实践出真知,找一个测试环境亲手操作一遍,比读十遍文章都管用。祝你网络畅通!