代理服务,让私有云服务器更自由

Aug 12, 2021

做过运维服务工作的朋友一定有亲身经历:给政府和大型企业、事业单位做运维支持时,往往发现他们的服务器有着严格的安全管理机制,特别是有限制的访问 Internet,给运维工作带来了诸多不便。

比如:服务器需要访问 Github, yum 仓库安装一些软件,如果无法访问,安装软件就非常耗时费力。

面对这种情况,有没有办法通过一些合规的技术手段,实现我们期望的网络访问方式呢?

当然有的,先看看下面的整体思路。

整体思路

抛开技术不谈。我们先回顾一下我们生活中相似的例子:

一个健康的人,他可以出门完成各种与衣食住行相关的事情。如果他生病了,被禁锢在病床或病房或医院内,那么他就无法自由的去活动范围之外的地方。但特殊情况下,必须离开活动空间之外,应该怎么办?

答案非常简单:委托一个健康的、并且可以自由行动的人帮他去完成这些事情。

那我们现在关注的私有云服务器访问Internet问题,其解决方案是不是也可以借鉴这种委托机制呢?

完全可以,因为在计算机技术中,有一种比较成熟的技术方案:代理服务。它就是用于解决此类场景的最佳实践之一。

代理服务

我们现在的案例中,需要分为三个步骤完成我们的目标:

  1. 合规准备
  2. 代理服务搭建(公有云服务器)
  3. 设置本地代理(私有云服务器)

合规准备

代理服务的使用,首先要保证合规性。一方面符合所在的单位的网络管理规范,另外一方面遵循国家相关的法律法规。

  1. 向网络管理员申请使用代理服务的理由和使用范围,获得同意
  2. 仔细检查代理服务访问的访问,确保符合国家网络相关法律规范

国家对海外网络的访问有严格的法律要求,请务必做到 100% 合规

代理服务搭建

由于合规性控制问题,市场上没有可供购买的代理服务。因此,需要自行搭建代理服务。

具体的步骤如下:

  1. 购买一个具备正常访问互联网的云服务器(简称为:“公有云服务器”)

    最低配置(例如:1核1G内存,带宽按量模式 100M)

  2. 使用 SSH 登录云服务器,运行如下命令搭建基本环境

    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
    curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-    compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    ln -sf /usr/local/bin/docker-compose  /usr/bin
    sudo systemctl start docker
    
  3. 运行下面的命令,下载代理服务器软件 tinyproxy 到本地

    git clone --depth=1 https://github.com/Websoft9/docker-tinyproxy
    
  4. 根据所需,修改软件目录下的 .env_all 文件下如下两个参数

    BINDIP=35.129.77.19 # 白名单IP
    APP_PORT=9094  # 代理端口
    

    BINDIP 代表你的私有云服务器的公网IP地址(白名单),设置在此处即表明它可以使用代理服务,未设置的就无法使用代理服务

  5. 登录云服务器控制台,放通上面 APP_PORT 对于的端口,例如:TCP:9094

  6. 本地浏览器访问 http://公有云服务器IP地址:9094,如果显示如下反馈信息,即表明代理服务器搭建成功。

    Access denied
    The administrator of this proxy has not configured it to service requests from your host.
    Generated by tinyproxy version 1.10.0.
    

设置本地代理

接下来我们为私有云服务器上设置本地代理。我们可以为Linux系统设置全局的代,也可以为指定的软件设总代理(大部分成熟的软件,都支持代理设置)。

假设代理服务器的IP为:111.99.190.142,端口为:9094

全局代理

  1. 登录私有云服务器,运行下面的命令创建一个代理配置文件

    touch /etc/profile.d/proxy.sh
    
  2. 将下面的代码代码复制到 proxy.sh 文件,根据实际情况修改 export proxy 字段

    # 代理服务器的 IP:端口
    export proxy="111.99.190.142:9094"
    
    export http_proxy=$proxy
    export https_proxy=$proxy
    export ftp_proxy=$proxy
    export no_proxy="localhost, 127.0.0.1, ::1"
    
  3. 保存后,重启开启 Shell 终端,代理生效

局部代理

我们也可以为指定的软件单独设置代理,下面以 Git, Docker, Yum 为例进行说明。

Git

使用 SSH 直接运行如下的命令即可(代理服务的IP和端口根据实际情况修改)

git config --global https.proxy 111.99.190.142:9094
git config --global https.proxy 111.99.190.142:9094

Docker

修改 Docker 的系统服务文件 /etc/systemd/system/docker.service

[Service]
Environment="HTTP_PROXY=111.99.190.142:9094/"
Environment="HTTPS_PROXY=111.99.190.142:9094/"

根据实际情况修改保存后,重启 Docker 服务后生效

Yum

修改 /etc/yum.conf,增加下面的代码(代理服务的IP和端口根据实际情况修改)

proxy=111.99.190.142:9094

总结

委托与被委托机制,在技术领域是一个简单有效且被广泛使用基本架构哲学方法。希望读者朋友们可以举一反三,灵活驾驭它。

Websoft9

Hello Websoft9!

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.