# 网络配置

URL: https://caijiao.org/rockylinux/network-configuration
Source: docs/rockylinux/network-configuration.md
Description: 详细介绍 Rocky Linux 中的网络配置方法，包括网络接口配置、静态 IP 设置、DNS 配置等

网络配置是 Rocky Linux 系统管理中最基础也是最重要的任务之一。正确的网络配置对于服务器的正常运行至关重要。本教程将详细介绍在 Rocky Linux 中配置网络的各种方法，包括使用命令行工具和配置文件进行网络接口配置、IP 地址管理、DNS 设置等。

## 网络基础

### 网络接口

网络接口是计算机与网络连接的硬件或软件接口。在 Rocky Linux 中，网络接口通常通过以下方式命名：

- 物理以太网接口：`eth0`, `eth1` 或较新的 `ens33`, `enp0s3` 等
- 无线网络接口：`wlan0`, `wlp2s0` 等
- 环回接口：`lo`（本地回环，用于本地通信）
- 虚拟网络接口：如网桥(`br0`)、隧道(`tun0`)等

### IP 地址类型

- **IPv4 地址**：32 位地址，格式为`192.168.1.1`
- **IPv6 地址**：128 位地址，格式为`2001:0db8:85a3:0000:0000:8a2e:0370:7334`

### 网络配置方法

在 Rocky Linux 中，有多种方法可以配置网络：

1. 使用 NetworkManager（现代桌面和服务器的推荐方式）
2. 编辑网络配置文件（传统方法）
3. 使用命令行工具如 `ip`、`nmcli`、`nmtui` 等

## 查看网络信息

### 查看网络接口信息

```bash
# 使用 ip 命令查看网络接口状态
ip addr show
ip a  # 简写形式

# 使用 ifconfig 命令（需要安装 net-tools）
sudo dnf install net-tools -y
ifconfig -a
```

### 查看网络连接状态

```bash
# 查看网络连接状态
ip link show

# 查看路由表
ip route show
ip r  # 简写形式

# 查看默认网关
ip route show default
```

### 测试网络连接

```bash
# 测试与目标主机的连接
ping 8.8.8.8

# 使用域名测试 DNS 解析
ping www.rockylinux.org

# 跟踪网络路由
 traceroute 8.8.8.8

# 检查 TCP 连接
ss -tuln
```

## 使用 NetworkManager 配置网络

NetworkManager 是 Rocky Linux 中用于管理网络连接的默认工具，提供了命令行和图形界面两种配置方式。

### 使用 nmcli 命令行工具

#### 查看网络连接

```bash
# 查看所有网络连接
nmcli connection show

# 查看活跃的网络连接
nmcli connection show --active

# 查看网络设备状态
nmcli device status
```

#### 创建和配置网络连接

```bash
# 创建新的以太网连接（静态 IP）
sudo nmcli connection add type ethernet con-name "static-eth0" ifname eth0 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8,8.8.4.4

# 创建新的以太网连接（DHCP）
sudo nmcli connection add type ethernet con-name "dhcp-eth0" ifname eth0 ipv4.method auto

# 启用网络连接
sudo nmcli connection up "static-eth0"

# 禁用网络连接
sudo nmcli connection down "static-eth0"
```

#### 修改现有网络连接

```bash
# 修改连接的 IP 地址
sudo nmcli connection modify "static-eth0" ipv4.addresses 192.168.1.150/24

# 修改网关
sudo nmcli connection modify "static-eth0" ipv4.gateway 192.168.1.254

# 修改 DNS 服务器
sudo nmcli connection modify "static-eth0" ipv4.dns "1.1.1.1,1.0.0.1"

# 切换为 DHCP
sudo nmcli connection modify "static-eth0" ipv4.method auto

# 切换为静态 IP
sudo nmcli connection modify "dhcp-eth0" ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8

# 应用更改
sudo nmcli connection up "static-eth0"
```

### 使用 nmtui 文本界面

`nmtui` 是一个基于文本的用户界面工具，比命令行更直观：

```bash
# 启动 nmtui
sudo nmtui
```

在界面中，您可以：

1. 编辑现有连接
2. 激活/禁用连接
3. 设置系统主机名

使用方向键导航，Enter 键选择，Tab 键在不同区域间切换。

## 编辑网络配置文件

对于更高级的网络配置，您可以直接编辑网络配置文件。在 Rocky Linux 中，NetworkManager 的配置文件位于 `/etc/NetworkManager/system-connections/` 目录，而传统的网络配置文件位于 `/etc/sysconfig/network-scripts/` 目录。

### 编辑 NetworkManager 配置文件

NetworkManager 的连接配置文件采用 INI 格式：

```bash
# 查看连接配置文件
sudo ls -la /etc/NetworkManager/system-connections/

# 编辑网络配置文件
sudo vim /etc/NetworkManager/system-connections/static-eth0.nmconnection
```

一个典型的静态 IP 配置文件如下：

```ini
[connection]
type=ethernet
interface-name=eth0
permissions=
autoconnect=true

[ethernet]
mac-address-blacklist=

[ipv4]
dns=8.8.8.8;8.8.4.4;
address1=192.168.1.100/24,192.168.1.1
method=manual

[ipv6]
addr-gen-mode=stable-privacy
method=auto
```

保存更改后，重新加载 NetworkManager：

```bash
sudo nmcli connection reload
sudo nmcli connection up static-eth0
```

### 编辑传统网络配置文件

如果您使用的是传统的网络配置方法，可以编辑 `/etc/sysconfig/network-scripts/` 目录下的配置文件：

```bash
# 查看网络脚本文件
sudo ls -la /etc/sysconfig/network-scripts/

# 编辑网络接口配置文件
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
```

一个静态 IP 配置示例：

```
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=550e8400-e29b-41d4-a716-446655440000
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
IPV6_PRIVACY=no
```

DHCP 配置示例：

```
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=550e8400-e29b-41d4-a716-446655440000
DEVICE=eth0
ONBOOT=yes
```

修改配置后，重启网络服务：

```bash
# 重启网络服务
sudo systemctl restart NetworkManager

# 或使用传统的网络服务（如果已安装）
sudo systemctl restart network
```

## DNS 配置

### 查看当前 DNS 配置

```bash
# 查看当前的 DNS 解析器
cat /etc/resolv.conf

# 使用 nmcli 查看 DNS 配置
nmcli connection show "static-eth0" | grep ipv4.dns
```

### 修改 DNS 配置

#### 使用 nmcli 修改 DNS

```bash
# 修改特定连接的 DNS 配置
sudo nmcli connection modify "static-eth0" ipv4.dns "8.8.8.8,8.8.4.4,1.1.1.1"

# 应用更改
sudo nmcli connection up "static-eth0"
```

#### 编辑 resolv.conf 文件

注意：如果使用 NetworkManager，直接编辑 `/etc/resolv.conf` 可能会被覆盖。推荐使用以下方法：

```bash
# 创建自定义 resolv.conf 文件
sudo vim /etc/resolv.conf.d/custom.conf
```

添加以下内容：

```
nameserver 8.8.8.8
nameserver 8.8.4.4
```

然后配置 NetworkManager 使用这个文件：

```bash
sudo vim /etc/NetworkManager/NetworkManager.conf
```

添加或修改以下内容：

```ini
[main]
dns=none
```

最后，创建符号链接：

```bash
sudo ln -sf /etc/resolv.conf.d/custom.conf /etc/resolv.conf
sudo systemctl restart NetworkManager
```

### 本地主机名解析

`/etc/hosts` 文件用于本地主机名解析，可以在 DNS 之前解析主机名：

```bash
sudo vim /etc/hosts
```

添加以下内容：

```
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.10 server.example.com server
192.168.1.11 database.example.com database
```

## 高级网络配置

### 配置网络别名（多 IP 地址）

可以为单个网络接口配置多个 IP 地址：

#### 使用 nmcli 添加额外 IP

```bash
# 添加额外的 IP 地址
sudo nmcli connection modify "static-eth0" +ipv4.addresses 192.168.1.101/24

# 移除额外的 IP 地址
sudo nmcli connection modify "static-eth0" -ipv4.addresses 192.168.1.101/24

# 应用更改
sudo nmcli connection up "static-eth0"
```

#### 使用 ip 命令临时添加 IP

```bash
# 添加临时 IP 地址
ip addr add 192.168.1.101/24 dev eth0

# 移除临时 IP 地址
ip addr del 192.168.1.101/24 dev eth0
```

### 配置静态路由

#### 使用 nmcli 添加静态路由

```bash
# 添加静态路由
sudo nmcli connection modify "static-eth0" +ipv4.routes "10.0.0.0/8 192.168.1.254"

# 移除静态路由
sudo nmcli connection modify "static-eth0" -ipv4.routes "10.0.0.0/8 192.168.1.254"

# 应用更改
sudo nmcli connection up "static-eth0"
```

#### 使用 ip 命令临时添加路由

```bash
# 添加临时路由
ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0

# 移除临时路由
ip route del 10.0.0.0/8 via 192.168.1.254 dev eth0
```

### 配置网络桥接

网络桥接用于将多个网络接口连接在一起，常用于虚拟机环境：

#### 使用 nmcli 创建网络桥接

```bash
# 创建桥接接口
sudo nmcli connection add type bridge con-name br0 ifname br0 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8

# 将物理接口添加到桥接
sudo nmcli connection add type bridge-slave con-name br0-port1 ifname eth0 master br0

# 禁用原始网络接口
sudo nmcli connection down eth0

# 启用桥接接口
sudo nmcli connection up br0
```

## 主机名配置

### 查看主机名

```bash
# 查看当前主机名
hostname

# 查看完整的主机名配置
hostnamectl
```

### 修改主机名

#### 使用 hostnamectl 修改主机名

```bash
# 设置静态主机名
sudo hostnamectl set-hostname server.example.com

# 设置美观主机名（在图形界面显示）
sudo hostnamectl set-hostname "Rocky Linux Server" --pretty

# 设置临时主机名（重启后失效）
sudo hostname temp-server
```

#### 编辑 /etc/hostname 文件

```bash
sudo vim /etc/hostname
```

添加或修改主机名：

```
server.example.com
```

保存后，需要重启系统或使用 `hostname` 命令应用更改：

```bash
sudo hostname -F /etc/hostname
```

## 网络故障排除

### 常见网络问题及解决方案

1. **无法连接到网络**

   ```bash
   # 检查网络接口状态
   ip link show eth0

   # 启用网络接口
   sudo ip link set eth0 up

   # 检查网络服务状态
   sudo systemctl status NetworkManager

   # 重启网络服务
   sudo systemctl restart NetworkManager
   ```

2. **无法解析域名**

   ```bash
   # 检查 DNS 配置
   cat /etc/resolv.conf

   # 测试 DNS 解析
   dig @8.8.8.8 www.rockylinux.org

   # 使用 nmcli 修改 DNS
   sudo nmcli connection modify "static-eth0" ipv4.dns "8.8.8.8,8.8.4.4"
   sudo nmcli connection up "static-eth0"
   ```

3. **无法访问特定网站或服务器**

   ```bash
   # 测试网络连通性
   ping -c 4 8.8.8.8

   # 跟踪路由
   traceroute www.rockylinux.org

   # 检查防火墙设置
   sudo firewall-cmd --list-all
   ```

4. **网络速度慢**

   ```bash
   # 检查网络接口统计信息
   ip -s link

   # 检查网络错误和丢包
   ethtool -S eth0

   # 检查双工和速度设置
   sudo ethtool eth0
   ```

### 网络诊断工具

```bash
# 安装网络诊断工具
sudo dnf install net-tools bind-utils traceroute mtr tcpdump -y

# 使用 mtr 进行网络诊断（结合了 ping 和 traceroute）
mtr www.rockylinux.org

# 使用 tcpdump 捕获网络数据包
sudo tcpdump -i eth0 port 80 -n

# 检查网络连接状态
ss -tuln
```

## 网络安全设置

### 防火墙配置

```bash
# 查看防火墙状态
sudo firewall-cmd --state

# 查看当前防火墙规则
sudo firewall-cmd --list-all

# 允许特定端口通过防火墙
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

# 允许特定服务通过防火墙
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
```

### 禁用 IPv6（如不需要）

```bash
# 临时禁用 IPv6
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1

# 永久禁用 IPv6
sudo vim /etc/sysctl.conf
```

添加以下行：

```
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
```

应用更改：

```bash
sudo sysctl -p
```

## 总结

本教程详细介绍了 Rocky Linux 中的网络配置方法，包括使用 NetworkManager 的命令行工具（nmcli）和文本界面（nmtui）配置网络，以及编辑网络配置文件进行更高级的配置。我们还学习了如何配置 DNS、设置主机名、创建网络桥接，以及如何进行网络故障排除。

正确的网络配置对于服务器的正常运行至关重要，特别是在生产环境中。通过本教程学习的知识，您应该能够轻松地在 Rocky Linux 中配置和管理网络连接。
