5154

Good Luck To You!

CentOS下如何搭建NAT小鸡,实现内网虚拟机共享上网?

在服务器运维和虚拟化应用中,利用一台拥有公网IP的母机(宿主机)搭建NAT网络,来创建多台没有独立公网IP的虚拟机(俗称“NAT小鸡”),是一种非常经济且高效的做法,这种方法不仅能极大节省宝贵的公网IP地址资源,还能通过端口转发的方式,让内网虚拟机对外提供服务,本文将以CentOS系统为例,详细介绍如何一步步搭建和管理NAT小鸡,涵盖环境准备、网络配置、虚拟机创建及端口转发等核心环节。

CentOS下如何搭建NAT小鸡,实现内网虚拟机共享上网?

环境准备与基础组件安装

在开始之前,请确保您拥有一台运行CentOS 7或CentOS 8系统的服务器,并且该服务器具备以下条件:

  1. 硬件支持虚拟化:CPU需要支持Intel VT-x或AMD-V技术,可以通过命令 lscpu | grep Virtualization 来检查,如果输出中包含VT-xAMD-V,则表示支持。
  2. 拥有一个公网IP地址:这是母机的基础,用于作为所有内网小鸡访问外网的出口。
  3. 具备root权限:后续所有操作均需要管理员权限。

满足条件后,我们首先需要安装KVM虚拟化所需的核心软件包,KVM(Kernel-based Virtual Machine)是Linux内核集成的全虚拟化解决方案,而libvirt则是用于管理KVM等虚拟化技术的工具集。

打开终端,执行以下命令来安装必要的组件:

# 更新系统软件包
yum update -y
# 安装KVM、libvirt、网络工具等
yum install -y qemu-kvm libvirt libvirt-python libguestfs-tools virt-install virt-manager bridge-utils

安装完成后,启动libvirtd服务并设置其开机自启,这是管理虚拟机和网络的核心守护进程。

# 启动libvirtd服务
systemctl start libvirtd
# 设置libvirtd服务开机自启
systemctl enable libvirtd

至此,基础环境已经准备就绪。

配置NAT网络

libvirt在安装后会默认创建一个名为default的NAT网络,其虚拟网桥为virbr0,IP地址段通常为168.122.0/24,对于大多数场景,我们可以直接使用这个默认网络,也可以根据需要进行自定义配置。

1 查看默认NAT网络

使用virsh命令来查看现有的网络列表:

virsh net-list --all

您会看到名为default的网络,状态可能为inactive(未激活),如果未激活,我们需要启动它。

2 编辑与启动NAT网络

使用 virsh net-edit default 命令可以编辑这个网络的详细配置,这个命令会调用一个文本编辑器(如vi)打开其XML配置文件,一个典型的NAT网络配置如下所示,我们重点关注 <forward mode="nat"/><ip><dhcp> 部分。

CentOS下如何搭建NAT小鸡,实现内网虚拟机共享上网?

<network>
  <name>default</name>
  <uuid>...</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='...'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

下表解释了这些关键字段的作用:

配置元素 作用说明
<forward mode='nat'/> 定义网络的转发模式,nat 表示网络地址转换,是小鸡访问外网的关键。
<bridge name='virbr0'/> 定义虚拟网桥的名称,所有小鸡的虚拟网卡都将连接到这个网桥上。
<ip address='...'> 定义网桥的IP地址,也就是所有NAT小鸡的默认网关。
<dhcp> 定义DHCP服务,自动为连接到此网络的小鸡分配IP地址。
<range start='...' end='...'/> 定义DHCP分配的IP地址池范围。

检查配置无误后,保存并退出编辑器,启动这个网络,并设置为开机自启:

# 启动default网络
virsh net-start default
# 设置default网络开机自启
virsh net-autostart default

执行后,可以使用 ip addr show virbr0 命令查看网桥virbr0是否已经成功获取到IP地址。

创建NAT小鸡

网络环境配置好后,我们就可以开始创建第一台NAT小鸡了,创建虚拟机需要操作系统的镜像文件(ISO格式)或预先准备好的磁盘镜像(qcow2格式)。

这里我们以使用virt-install命令行工具,通过ISO镜像安装一台CentOS 7的小鸡为例。

  1. 上传ISO镜像:将CentOS的ISO镜像文件上传到母机的某个目录,/var/lib/libvirt/images/

  2. 执行创建命令

virt-install \
  --name nat-chick-01 \
  --memory 1024 \
  --vcpus 1 \
  --disk path=/var/lib/libvirt/images/nat-chick-01.qcow2,size=20,format=qcow2 \
  --cdrom /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2009.iso \
  --network network=default \
  --graphics spice \
  --noautoconsole

命令参数解释:

  • --name nat-chick-01: 指定虚拟机的名称。
  • --memory 1024: 分配1024MB内存。
  • --vcpus 1: 分配1个虚拟CPU核心。
  • --disk ...: 创建一个20GB大小、qcow2格式的虚拟磁盘。
  • --cdrom ...: 指定安装介质为ISO镜像文件。
  • --network network=default: 这是核心参数,将虚拟机的网卡连接到我们之前配置的名为default的NAT网络。
  • --graphics spice: 启用SPICE图形协议,方便远程连接图形界面进行安装。
  • --noautoconsole: 不自动连接到虚拟机的控制台。

创建完成后,您可以使用 virt-manager(图形界面)或 virsh console nat-chick-01(命令行)来连接虚拟机,完成操作系统的安装,安装过程中,网络配置选择DHCP即可,安装系统后,小鸡会自动从168.122.2168.122.254 的范围内获取一个内网IP。

CentOS下如何搭建NAT小鸡,实现内网虚拟机共享上网?

进入小鸡系统后,可以通过 ping baidu.com 来测试是否能访问外网,如果可以,说明NAT网络搭建成功。

配置端口转发

NAT模式下,外网无法直接访问内网小鸡,要实现外网访问,需要在母机上设置端口转发,我们希望将母机的2222端口转发到小鸡nat-chick-01(假设其内网IP为168.122.50)的22端口(SSH端口)。

CentOS 7/8 默认使用 firewalld 作为防火墙管理工具,配置端口转发如下:

# 1. 开启IP地址伪装(通常libvirt的NAT网络已自动设置,但检查一下更保险)
firewall-cmd --permanent --add-masquerade
# 2. 添加端口转发规则
firewall-cmd --permanent --add-forward-port=port=2222:proto=tcp:toaddr=192.168.122.50:toport=22
# 3. 重载防火墙配置使规则生效
firewall-cmd --reload

配置完成后,您就可以通过 ssh root@<母机公网IP> -p 2222 来连接到内网的NAT小鸡了,对于Web服务(80/443端口)或其他服务,原理相同,只需修改对应的端口号即可。


相关问答FAQs

我的NAT小鸡创建后无法连接外网,该怎么办?

解答: 这是一个常见问题,可以按照以下步骤进行排查:

  1. 检查NAT网络状态:在母机上执行 virsh net-list,确保default网络处于active状态。
  2. 检查小鸡IP配置:登录小鸡,使用 ip addrifconfig 查看是否获取到168.122.x网段的IP地址,使用 ip route 查看默认网关是否为168.122.1
  3. 检查DNS配置:在小鸡内查看 /etc/resolv.conf 文件,确保有正确的DNS服务器地址(如114.114.1148.8.8)。
  4. 检查母机防火墙和转发:在母机上,执行 sysctl net.ipv4.ip_forward,确保返回值为1(表示开启),检查firewalld规则,确保没有阻止FORWARD链,可以尝试临时关闭防火墙 systemctl stop firewalld 测试是否为防火墙问题,若是,再针对性地添加规则。
  5. Ping测试:在小鸡内 ping 192.168.122.1(网关),通则说明与母机网络连接正常,再 ping 8.8.8.8,不通则说明是NAT转发或DNS问题。

如何让外网通过域名访问我NAT小鸡上的网站?

解答: 要实现通过域名访问,需要结合端口转发和DNS解析两步操作。

  1. 端口转发:按照上文第四部分的方法,在母机上设置端口转发,将母机的80端口转发到小鸡168.122.5080端口,命令为:firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.122.50:toport=80,然后重载防火墙。
  2. DNS解析:登录您的域名提供商管理后台,添加一条A记录(或CNAME记录),将您的域名(如 www.yourdomain.com)解析到母机的公网IP地址
  3. 等待生效:DNS解析全球生效需要一段时间(通常是几分钟到几小时不等),生效后,用户在浏览器访问 www.yourdomain.com 时,请求会先到达您的母机,然后通过防火墙的端口转发规则,被精准地导向内网小鸡的Web服务,从而实现域名访问。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.