Squid代理:APT、PyPI和Docker的内网穿透解决方案

如果你是在内网环境,并且你知道一台服务器可以链接外网,可以通过Squid代理的方式更新apt、pypi、docker源。

你可以通过在服务器A(172.16.16.122,可上外网)上设置代理服务器来实现服务器B通过服务器A访问外部APT源的需求。以下是具体步骤:

内网环境下

1.在可以访问外网的服务器A上

  1. 安装代理服务

    假设你使用的是Squid作为代理服务器,因为它是Linux下常用的代理服务器软件之一。

    在服务器A上安装Squid:

    sudo apt update
    sudo apt install squid
    
  2. 配置Squid代理服务器

    编辑Squid的配置文件/etc/squid/squid.conf,使其允许服务器B的访问请求:

    sudo vim /etc/squid/squid.conf
    

    在文件中添加或修改以下行:

    http_access allow all
    

    这将允许所有的HTTP请求通过代理,你也可以设置更细粒度的访问控制。

    保存并关闭文件后,重启Squid服务以应用新的配置:

    sudo systemctl restart squid
    

2.在其他无法访问外网的B服务器下

对于APT:

你已经得到了关于如何通过代理服务器进行APT更新的说明,这里我再概述一遍:

  1. 在服务器A上安装并配置好Squid代理服务器。

  2. 在服务器B上配置APT代理,创建或编辑/etc/apt/apt.conf.d/02proxy文件,并添加:

    Acquire::http::Proxy "http://172.16.16.122:3128";
    Acquire::https::Proxy "https://172.16.16.122:3128";
    

注意,HTTPS代理可能需要Squid进行额外的SSL配置。

对于PyPI:

对于Python包管理器,你需要配置pip以使用代理。在服务器B上,你可以为pip添加代理设置:

  1. 在用户主目录下创建或编辑.pip/pip.conf(对于全局配置则是/etc/pip.conf),添加:

    [global]
    proxy = http://172.16.16.122:3128
    

    如果你需要通过HTTPS使用代理,确保Squid配置支持SSL,并使用相应的https://代理地址。

对于Docker:

对于Docker,需要在服务器B上配置Docker守护程序以使用HTTP/HTTPS代理:

  1. 创建或编辑/etc/systemd/system/docker.service.d/http-proxy.conf文件,添加:

    [Service]
    Environment="HTTP_PROXY=http://172.16.16.122:3128/"
    Environment="HTTPS_PROXY=http://172.16.16.122:3128/"
    Environment="NO_PROXY=localhost,127.0.0.1"
    
  2. 重新加载Daemon配置,重启Docker服务:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

这样配置后,服务器B的Docker守护程序会通过服务器A的Squid代理进行外网访问。把这个几个配置给我封装成一个自动化执行的shell脚本。

配置封装成一个自动化执行的shell脚本proxy_setup.sh

#!/bin/bash# 变量定义
TODAY=$(date +%Y-%m-%d)
PROXY_SERVER_IP="172.16.16.122"
PROXY_PORT="3128"
SQUID_CONFIG_FILE="/etc/squid/squid.conf"
DOCKER_PROXY_CONFIG_FILE="/etc/systemd/system/docker.service.d/http-proxy.conf"
APT_PROXY_CONFIG_FILE="/etc/apt/apt.conf.d/02proxy"
PIP_CONFIG_FILE="/etc/pip.conf"# 打印帮助信息
print_help() {echo "Usage:"echo "./proxy_setup.sh Squid    # 安装并配置Squid"echo "./proxy_setup.sh apt      # 配置APT代理"echo "./proxy_setup.sh pip      # 配置Pip代理"echo "./proxy_setup.sh docker   # 配置Docker代理"echo "./proxy_setup.sh all      # 配置APT、Pip和Docker代理"exit 0
}# 备份并清空配置文件的函数
backup_and_clear_config() {local config_file=$1if [[ -s $config_file ]]; thenlocal backup_file="${config_file}.${TODAY}.bak"echo "Backing up and clearing $config_file to $backup_file"sudo cp $config_file $backup_fileecho '' | sudo tee $config_file > /dev/nullfi
}# 安装Squid代理服务器
function install_squid_on_server_a() {echo "Installing and configuring Squid..."sudo apt updatesudo apt install -y squid
}# 配置Squid代理服务器
function configure_squid() {backup_and_clear_config ${SQUID_CONFIG_FILE}echo "http_access allow all" | sudo tee -a ${SQUID_CONFIG_FILE}sudo systemctl restart squid
}# 在服务器B上配置APT代理
function configure_apt_proxy() {backup_and_clear_config ${APT_PROXY_CONFIG_FILE}echo "Acquire::http::Proxy \"http://${PROXY_SERVER_IP}:${PROXY_PORT}\";" | sudo tee ${APT_PROXY_CONFIG_FILE}echo "Acquire::https::Proxy \"http://${PROXY_SERVER_IP}:${PROXY_PORT}\";" | sudo tee -a ${APT_PROXY_CONFIG_FILE}
}# 在服务器B上配置Pip代理
function configure_pip_proxy() {local pip_dir=$(dirname ${PIP_CONFIG_FILE})mkdir -p ${pip_dir}backup_and_clear_config ${PIP_CONFIG_FILE}echo "[global]" | sudo tee ${PIP_CONFIG_FILE}echo "proxy = http://${PROXY_SERVER_IP}:${PROXY_PORT}" | sudo tee -a ${PIP_CONFIG_FILE}
}# 在服务器B上配置Docker代理
function configure_docker_proxy() {local docker_dir=$(dirname ${DOCKER_PROXY_CONFIG_FILE})mkdir -p ${docker_dir}backup_and_clear_config ${DOCKER_PROXY_CONFIG_FILE}echo "[Service]" | sudo tee ${DOCKER_PROXY_CONFIG_FILE}echo "Environment=\"HTTP_PROXY=http://${PROXY_SERVER_IP}:${PROXY_PORT}/\"" | sudo tee -a ${DOCKER_PROXY_CONFIG_FILE}echo "Environment=\"HTTPS_PROXY=http://${PROXY_SERVER_IP}:${PROXY_PORT}/\"" | sudo tee -a ${DOCKER_PROXY_CONFIG_FILE}echo "Environment=\"NO_PROXY=localhost,127.0.0.1\"" | sudo tee -a ${DOCKER_PROXY_CONFIG_FILE}sudo systemctl daemon-reloadsudo systemctl restart docker
}# 检查传入参数并执行对应的函数
case "$1" inSquid)install_squid_on_server_aconfigure_squid;;apt)configure_apt_proxy;;pip)configure_pip_proxy;;docker)configure_docker_proxy;;all)configure_apt_proxyconfigure_pip_proxyconfigure_docker_proxy;;-h|--help)print_help;;*)echo "Invalid option: $1"echo "Use -h or --help to get the usage information."exit 1;;
esacecho "Proxy setup is complete."

将此脚本保存为文件后(例如 proxy_setup.sh),您可以传递参数来指定要执行的动作。例如:

chmod +x proxy_setup.sh
sudo ./proxy_setup.sh Squid    # 安装并配置Squid 
sudo ./proxy_setup.sh apt      # 配置APT代理
sudo ./proxy_setup.sh pip      # 配置Pip代理
sudo ./proxy_setup.sh docker   # 配置Docker代理
sudo ./proxy_setup.sh all      # 配置APT、Pip和Docker代理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/698651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速添加防火墙firewalld脚本

这个脚本会接收一个参数,即你想要开放的端口号,然后使用firewalld命令来配置防火墙规则。请确保你的系统中已安装并启用了firewalld服务。 #!/bin/bash# 检查是否提供了端口号作为参数 if [ "$#" -ne 1 ]; thenecho "使用方法: $0 端口号…

OJ1104. 【软件认证】电话号码转换

OJ1104. 【软件认证】电话号码转换 题目描述 某语音翻译软件,需要实现如下中英文电话号码转换功能: 若输入的是英文数字单词或Double组成的电话号码,则输出对应的中文数字单词; 若输入为中文数字单词组成的电话号码&#xff0c…

Shell变量类型和运算符

一、Shell变量类型 1、变量类型 Shell的3种变量: (1)局部变量:除了本地变量外,还有shell脚本中定义的变量。 (2)全局变量:和局部变量相对。比如环境变量就是一种全局变量。 &am…

算法训练营day33(补),复习二叉树1

// 889. 根据前序和后序遍历构造二叉树 // 前序中左右 后序遍历左右中 func constructFromPrePost(preorder []int, postorder []int) *TreeNode { if len(preorder) 0 { return nil } root : &TreeNode{} root.Val preorder[0] //前序数组去掉root节点 preorder pre…

餐饮神秘顾客公司:关于餐饮行业神秘顾客调查注意事项

在餐饮业,顾客体验往往决定品牌的成败。为深入了解顾客需求和感受,许多餐饮企业引入“神秘顾客”调查。然而,此调查并非简单走过场,其中细节和注意事项颇多。餐饮行业神秘顾客调查需注意以下几点: 1. 专业培训&#x…

MaxScale实现mysql8读写分离

MaxScale 实验环境 中间件192.168.150.24MaxScale 22.08.4主服务器192.168.150.21mysql 8.0.30从服务器192.168.150.22mysql 8.0.30从服务器192.168.150.23mysql 8.0.30 读写分离基于主从同步 1.先实现数据库主从同步 基于gtid的主从同步配置 主库配置 # tail -3 /etc/my.…

刷新多个SOTA!最新Mamba魔改版本超越transformer,GPU内存消耗减少74%

因模型规模的扩展和需要处理的序列不断变长,transformer逐渐出现计算量激增、计算效率下降等问题。为克服这些缺陷,研究者们提出了Mamba。 Mamba是一种创新的线性时间序列建模方法,它结合了递归神经网络(RNN)和卷积神…

[面试] InnoDB中如何解决幻读?

幻读是通过 MVCC 机制来解决的, MVCC 类似于一种乐观锁的机制,通过版本的方式来区分不同的并发事务,避免幻读 问题! 什么是幻读? 事务A前后两次读取同一个范围的数据,在事务A两次读取的过程之间,事务B新增了数据,导致…

星际修仙之剑胆琴心

剧名:《星际修仙之剑胆琴心》 类型:科幻修仙爱情剧 故事大纲: 在遥远的未来,人类文明已经发展到星际时代,科技与修仙相结合,形成了一种全新的文明形态。在这个时代,修仙者不再局限于传统的修炼方…

DR 或CT拍摄中的:平板、控制板、高压之间的关系

DR 或CT拍摄中的:平板、控制板、高压之间的关系 在DR(Digital Radiography,数字放射摄影)和CT(Computed Tomography,计算机断层扫描)拍摄过程中,平板探测器和平板控制板与高压发生器…

图文说明Linux云服务器如何更改实例镜像

一、应用场景举例 在学习Linux的vim时,我们难免要对vim进行一些配置,这里我们提供一个vim插件的安装包: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o./install.sh && bash ./install.sh 但是此安装包…

跳槽前应该做好哪些准备?

第一次求职也好,还是换工作也罢,都需要有严谨的考虑。对于已经工作上班的朋友来说,切不可轻易地辞掉工作,想要跳槽,一定要三思而后行,有一个周密的部署。跳槽有好处,也有弊端,频繁的…

如何和将原始request的Header中的值传递给openfeign请求的Header? 以及又如何获取openfeign请求中Header中的值

如何和将原始request的Header中的值传递给openfeign请求的Header? 以及又如何获取openfeign请求中Header中的值 如何和将原始request的Header中的值传递给openfeign请求的Header参考 [https://www.jb51.net/article/282522.htm](https://www.jb51.net/article/28252…

【学网攻】 第(30)节 -- 综合实验三

系列文章目录 目录 系列文章目录 文章目录 前言 一、综合实验 二、实验 1.引入 实验目标 实验设备 实验拓扑图 实验配置 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节…

Python字典详细教程

Python字典(Dictionary)是一个无序的、可变的、包含键值对的数据结构,每个键(key)在字典中都是唯一的,可以用来索引其对应的值(value)。 一、创建字典 Python字典由键和对应值成对…

探讨导致vcruntime140_1.dll无法继续执行代码的原因和解决办法

在使用电脑过程中,我们偶尔会遇到一些令人不悦的错误提示,如"vcruntime140_1.dll丢失"。这个错误提示可能会给我们带来诸多困扰,阻碍我们正常地进行操作。本文将详细探讨导致"vcruntime140_1.dll丢失"错误的原因&#xf…

Java基于SSM+JSP的超市进销库存管理系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

如何区分恶意网络流量

笔记缘由:在看论文的过程中,论文中提到在某个数据集中,有多少条恶意流量和非恶意流量,突然想到一个问题就是这些恶意流量是如何被判刑为恶意流量的? 1. 基于已知的恶意行为 ​ 通过已知的恶意行为来识别恶意流量&…

singularity容器的技术基础

Singularity容器技术是专为科学计算、数据密集型工作和高性能计算(HPC)环境设计的。与其他容器技术如Docker相比,Singularity提供了一些独特的特性和设计考虑,使其在科学和研究社区中受到欢迎。以下是Singularity容器技术的一些关…

android pdf框架-4,分析vudroid源码2

继续分析源码 阅读器的入口 MainBrowserActivity,这个是主ui,由于代码较旧,所以没有处理sdcard的权限. 一般阅读器申请整个卡的读写. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {if (!Environment.isExternalStorageManager()) {Intent intent = new Intent…