内网环境福音:CentOS 局域网YUM源搭建全指南(有外网/无外网双方案)

在企业级Linux运维场景中,很多现场服务器处于纯内网环境,无法直接访问外网YUM源,导致系统包更新、软件安装等操作举步维艰;即便部分服务器能连通外网,也可能因官方源速度慢、版本老旧影响运维效率。针对这些痛点,本文整理了一套完整的局域网YUM源搭建方案,分别适配"有外网"和"无外网"两种场景,帮助运维人员实现内网服务器的高效包管理。

一、前期准备:关闭SELINUX(必做步骤)

无论是哪种搭建场景,首先需要关闭SELINUX,避免其对后续操作产生权限限制:

  1. 查询SELINUX状态

    复制代码

    getenforce

  2. 临时关闭(无需重启,立即生效)

    复制代码

    setenforce 0

  3. 永久关闭(修改配置文件,需重启服务器生效)

    复制代码

    vim /etc/selinux/config

    将配置项SELINUX=enforcing改为SELINUX=disabled,保存后重启服务器即可永久关闭。

二、场景一:有外网服务器搭建局域网YUM源

此方案适用于有一台可连通外网的服务器,可通过同步外网源包搭建内网YUM仓库,供其他内网服务器使用。

1. 配置国内YUM源(提升同步速度)

  1. 先备份历史YUM源,避免冲突

    复制代码

    sudo mv /etc/yum.repos.d/* /root/

  2. 下载阿里云CentOS 7 YUM源(无wget可换curl)

    复制代码

    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 或curl命令 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

  3. 清理并生成缓存

    复制代码

    yum clean all && yum makecache

2. 安装并配置httpd服务(提供仓库访问)

  1. 先更新YUM源,再安装httpd

    复制代码

    yum update -y yum install -y httpd

  2. 修改端口(默认80端口,若被占用可改为8080)

    复制代码

    vim /etc/httpd/conf/httpd.conf

    Listen 80改为Listen 8080,保存退出。

  3. 启动httpd并设置开机自启

    复制代码

    systemctl start httpd systemctl enable httpd

  4. 配置防火墙(建议直接关闭,简化操作)

    复制代码

    systemctl stop firewalld systemctl disable firewalld

3. 同步外网源包,创建YUM仓库

  1. 创建仓库目录,用于存放同步的RPM包

    复制代码

    mkdir -p /var/www/html/repo

  2. 过滤架构(可选,节省磁盘空间)

  1. 编辑/etc/yum.repos.d/CentOS-Base.repo,在[base][updates][extras]段下添加过滤配置,只同步x86_64架构包:

    复制代码

    exclude=*.i?86 *.athlon *.ppc* *.sparc* arch=x86_64

  1. 安装同步工具并拉取RPM包

    复制代码

    yum install -y createrepo yum-utils reposync -a x86_64 -l -d -m -n -p /var/www/html/repo --download-metadata

  2. 生成仓库元数据(让YUM能识别仓库)

    复制代码

    createrepo -p /var/www/html/repo/base createrepo -p /var/www/html/repo/updates createrepo -p /var/www/html/repo/extras

  3. 测试访问:浏览器打开http://服务器IP:8080/repo,能看到仓库目录即配置成功。

4. 配置内网客户端服务器

在需要使用局域网YUM源的内网服务器(如192.168.101.102(192.168.101.102))上创建repo文件:

复制代码

vim /etc/yum.repos.d/Base.repo

写入以下内容(替换为实际仓库服务器IP):

复制代码

[base] name=base baseurl=http://192.168.101.150:8080/repo/base enabled=1 gpgcheck=0 [updates] name=updates baseurl=http://192.168.101.150:8080/repo/updates enabled=1 gpgcheck=0 [extras] name=extras baseurl=http://192.168.101.150:8080/repo/extras enabled=1 gpgcheck=0

清理并重建缓存后,即可测试安装软件:

复制代码

yum clean all && yum makecache yum install -y wget

三、场景二:无外网环境搭建本地YUM源

若所有服务器均无外网访问权限,可通过"外网提前同步包+内网迁移"的方式搭建YUM源。

1. 提前在外网服务器同步RPM包

在有外网的Linux服务器上,按场景一的步骤同步阿里云源包,然后打包为repo.tar.gz,通过U盘、内网传输工具等方式迁移到内网YUM源服务器(如192.168.101.150(192.168.101.150))。

2. 内网服务器创建本地仓库

  1. 解压迁移的包并生成元数据

    复制代码

    tar -zxvf repo.tar.gz -C /home createrepo -p /home/repo/base createrepo -p /home/repo/updates createrepo -p /home/repo/extras

  2. 创建本地repo配置文件

    复制代码

    vim /etc/yum.repos.d/Base.repo

    写入本地仓库路径:

    复制代码

    [base] name=base baseurl=file:///home/repo/base enabled=1 gpgcheck=0 [updates] name=updates baseurl=file:///home/repo/updates enabled=1 gpgcheck=0 [extras] name=extras baseurl=file:///home/repo/extras enabled=1 gpgcheck=0

  3. 清理缓存并测试安装

    复制代码

    yum clean all && yum makecache yum install -y wget

3. 扩展为局域网共享仓库(可选)

若需供多台内网服务器使用,可安装httpd服务(步骤同场景一),然后将本地仓库迁移到httpd目录:

复制代码

mkdir -p /var/www/html/repo mv /home/repo/* /var/www/html/repo

内网客户端服务器按场景一的客户端配置方式,使用http://仓库IP:8080/repo作为源地址即可。

四、总结

无论是有外网还是无外网场景,搭建局域网YUM源的核心都是"仓库目录+元数据+客户端配置"三步。有外网时可直接同步外网源,效率更高;无外网时通过离线迁移包也能实现内网包管理。该方案解决了内网服务器软件安装、系统更新的痛点,大幅提升企业内网Linux运维的便捷性和稳定性。

相关推荐
毒爪的小新2 小时前
Linux 环境极速部署 vLLM:从零搭建生产级大模型推理服务
linux·人工智能·ai·语言模型·vllm
鹤落晴春2 小时前
RH124问答3:从命令行管理文件
linux·运维·服务器
凡人叶枫2 小时前
Effective C++ 条款30:透彻了解 inlining 的里里外外
linux·开发语言·c++·嵌入式开发·effective c++
guslegend3 小时前
大模型驱动大数据SRE智能运维
大数据·运维
遇见火星3 小时前
Docker Compose 完全入门:一键启动所有容器
运维·docker·容器·docker compose
Net_Walke3 小时前
【Linux系统】静态链接库与动态链接库
linux·嵌入式硬件
小啊曼3 小时前
CIO实战方法论_11_组织变革打破部门墙
运维
syc78901234 小时前
中文语境下AI编码工具实战对比:从迭代体验看日常开发选择
linux·人工智能·ubuntu
❀搜不到4 小时前
远程服务器codex使用本地cc-switch的deepseek api
运维·服务器
凡人叶枫4 小时前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++