在 CentOS 系统中搭建网络地址转换(NAT)服务是许多网络架构中的常见需求,无论是用于构建企业级路由器、提供内部网络访问外部世界的通道,还是在虚拟化环境中为虚拟机提供网络连接,整个 NAT 配置的核心,在于准确识别并正确配置系统的网络接口,也就是我们常说的“网卡”,理解 CentOS 的网卡命名规则、掌握查看方法,并熟练进行 NAT 相关配置,是每一位系统管理员必备的技能。
理解 CentOS 的网卡命名规则
早期的 Linux 系统(包括 CentOS 6 及更早版本)通常使用 eth0
, eth1
这样的传统命名方式,这种方式简单直接,但存在一个显著的缺陷:其命名顺序并不稳定,在系统重启或硬件增减后,网卡的编号可能会发生变化,例如原本的 eth0
可能会变成 eth1
,这给依赖固定网卡名的脚本和服务配置带来了巨大的麻烦和风险。
为了解决这一问题,从 CentOS 7 开始,系统默认采用了一套“可预测的网络接口命名”方案,这套方案根据网卡的物理位置、硬件信息(如 MAC 地址)或固件信息来生成唯一的、固定的接口名,这使得管理员可以精准地识别每一块物理网卡,大大提高了配置的稳定性和可维护性。
常见的命名前缀及其含义如下:
en
: 代表以太网。wl
: 代表无线局域网。ww
: 代表广域网(如 WWAN 移动宽带)。
前缀后面的部分则定义了具体的识别规则:
: 表示板载网卡, eno1
是主板上的第一个板载网络设备。: 表示热插拔插槽上的设备, ens33
可能代表 PCI-E 插槽上的设备。: 表示 PCI 或 USB 总线的地理位置, enp0s3
表示位于 PCI 总线 0、插槽 3 上的设备。
当你在 CentOS 7 或更高版本中看到类似 enp0s3
或 ens192
这样的网卡名字时,不要感到困惑,这恰恰是系统为你提供的、最可靠的硬件标识。
如何查看和识别网卡名称
在进行任何网络配置之前,首要任务是准确无误地找出系统中存在的网卡及其名称,CentOS 提供了多种命令行工具来完成这项工作。
以下是一些最常用且高效的命令,以及它们的特点:
命令 | 描述 | 优点 | 示例输出片段 |
---|---|---|---|
ip addr show 或 ip a | 现代 Linux 系统的标准网络配置查看工具,来自 iproute2 包。 | 信息全面、详细,是系统内置工具,无需额外安装。 | 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ... inet 192.168.1.100/24 brd 192.168.1.255 scope global ... |
nmcli device status | NetworkManager 的命令行界面工具,用于管理网络连接。 | 输出格式清晰易读,可直接管理设备状态和连接。 | DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected enp0s3 enp0s8 ethernet disconnected -- |
ifconfig | 传统的网络配置工具,来自 net-tools 包。 | 许多老管理员习惯使用,语法简洁。 | enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 |
ifconfig
在新版本的 CentOS 中已经不再是默认安装,并且其功能已被 iproute2
超越,通过这些命令,你可以清晰地看到每一块网卡的名称(如 enp0s3
, enp0s8
)、状态(UP/DOWN)以及已分配的 IP 地址。
NAT 配置实战:基于 Firewalld
假设我们已经通过上述命令识别出两块网卡:enp0s3
连接外网(WAN),enp0s8
连接内网(LAN),我们的目标是让所有连接到 enp0s8
的内部设备,都能通过 enp0s3
访问互联网。
第一步:配置 IP 地址
需要为这两块网卡配置正确的 IP 地址。
- 外网网卡 (
enp0s3
): 通常从你的 ISP(互联网服务提供商)或上级路由器通过 DHCP 获取一个公网 IP 地址。 : 需要配置一个静态的私有 IP 地址,作为内网设备的网关,可以设置为 168.10.1/24
。
这可以通过编辑 /etc/sysconfig/network-scripts/ifcfg-enp0s8
文件或使用 nmcli
命令来完成。
第二步:开启内核 IP 转发
NAT 的本质是数据包的转发,这需要内核的支持,编辑 /etc/sysctl.conf
文件,添加或修改以下行:
net.ipv4.ip_forward = 1
保存后,执行 sysctl -p
命令使配置立即生效,你可以通过 cat /proc/sys/net/ipv4/ip_forward
命令查看输出是否为 1
,以确认转发功能已开启。
第三步:配置 Firewalld 实现地址伪装
CentOS 7 及以上版本默认使用 firewalld
作为防火墙管理工具,它对 NAT 的支持非常友好,地址伪装是 NAT 的一种实现方式。
确定网卡所属区域:
firewalld
使用“区域”概念来管理不同安全级别的网络,我们将外网网卡放在public
或external
区域,内网网卡放在trusted
或internal
区域。执行配置命令:
# 将外网网卡 enp0s3 添加到 public 区域(如果尚未添加) sudo firewall-cmd --permanent --zone=public --add-interface=enp0s3 # 将内网网卡 enp0s8 添加到 trusted 区域,并允许所有流量 sudo firewall-cmd --permanent --zone=trusted --add-interface=enp0s8 # 在 public 区域(即外网出口)开启地址伪装 sudo firewall-cmd --permanent --zone=public --add-masquerade # 重新加载 firewalld 配置,使所有更改生效 sudo firewall-cmd --reload
至此,NAT 服务器的基本配置已经完成,只需要将内网其他计算机的默认网关设置为 168.10.1
(即 enp0s8
的 IP 地址),并配置好 DNS,它们就可以通过这台 CentOS 服务器访问互联网了。
相关问答 FAQs
Q1: 我非常习惯 eth0
这种命名方式,如何将 CentOS 7/8 的网卡命名改回传统格式?
A: 虽然不推荐,但确实可以通过修改内核引导参数来实现,步骤如下:
- 编辑 GRUB 配置文件,
/etc/default/grub
。 - 在
GRUB_CMDLINE_LINUX
这一行中,加入net.ifnames=0 biosdevname=0
参数。 - 保存文件后,运行
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
来更新引导配置。 - 重启系统后,系统便会尝试使用
eth0
,eth1
等传统名称,这可能会在多网卡环境下再次导致命名不稳定的问题。
Q2: 我已经按照步骤配置了 NAT,但内网主机依然无法访问外网,应该如何排查?
A: 这是一个常见问题,可以按照以下清单进行系统性排查:
- 检查 IP 转发:在 CentOS 服务器上执行
cat /proc/sys/net/ipv4/ip_forward
,确认输出为1
。 - 检查 Firewalld 规则:执行
sudo firewall-cmd --zone=public --query-masquerade
,确认返回yes
,同时用sudo firewall-cmd --get-active-zones
查看网卡是否在正确的区域。 - 检查内网客户端网关:确保内网主机的默认网关已正确设置为 CentOS 服务器的内网 IP(如
168.10.1
)。 - 检查物理或虚拟防火墙:如果你在虚拟机中操作,请检查虚拟机管理程序(如 VMware, VirtualBox)的网络设置或其自身的防火墙规则,云服务器则需检查安全组策略。
- 进行连通性测试:在内网主机上
ping
网关 IP(168.10.1
)确保内网通畅。ping
一个公网 IP(如8.8.8
),如果通但ping
域名不通,则可能是 DNS 配置问题。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复