当前位置:   article > 正文

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

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
    
    • 1
    • 2
  2. 配置Squid代理服务器

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

    sudo vim /etc/squid/squid.conf
    
    • 1

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

    http_access allow all
    
    • 1

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

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

    sudo systemctl restart squid
    
    • 1

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";
    
    • 1
    • 2

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

对于PyPI:

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

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

    [global]
    proxy = http://172.16.16.122:3128
    
    • 1
    • 2

    如果你需要通过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"
    
    • 1
    • 2
    • 3
    • 4
  2. 重新加载Daemon配置,重启Docker服务:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 1
    • 2

这样配置后,服务器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=$1
    if [[ -s $config_file ]]; then
        local backup_file="${config_file}.${TODAY}.bak"
        echo "Backing up and clearing $config_file to $backup_file"
        sudo cp $config_file $backup_file
        echo '' | sudo tee $config_file > /dev/null
    fi
}

# 安装Squid代理服务器
function install_squid_on_server_a() {
    echo "Installing and configuring Squid..."
    sudo apt update
    sudo 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-reload
    sudo systemctl restart docker
}

# 检查传入参数并执行对应的函数
case "$1" in
    Squid)
        install_squid_on_server_a
        configure_squid
        ;;
    apt)
        configure_apt_proxy
        ;;
    pip)
        configure_pip_proxy
        ;;
    docker)
        configure_docker_proxy
        ;;
    all)
        configure_apt_proxy
        configure_pip_proxy
        configure_docker_proxy
        ;;
    -h|--help)
        print_help
        ;;
    *)
        echo "Invalid option: $1"
        echo "Use -h or --help to get the usage information."
        exit 1
        ;;
esac

echo "Proxy setup is complete."
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108

将此脚本保存为文件后(例如 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代理
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号