背景
通常对于公司的服务器来说,为了做到方便的安全管控,需要与外部网络进行隔绝,内部服务器想要跟外部通讯,只能通过DMZ区的权限放通才行,否则你永远想不到一个你不熟悉的程序猿会往github上丢什么奇奇怪怪的东西。
比如18年的华柱用户数据泄露事件,这口大锅就绝对得运维人员来背。不过有的时候隔绝倒是隔绝了,但内网的配套设施没跟上,都已经0202年yum、apt遍布横行的时代了,总归不能还倒退回源码编译安装的方式吧。又比如docker离线安装好了,但是需要连接到特定的第三方镜像服务器,如何通过DMZ区的机器代理出去?
解决方案
Docker离线安装
这里以国内公司占用率比较高的CentOS系统为例
1、 确认内网机器的系统版本
1 | lsb_release -a |
2、下载对应版本的CentOS镜像,并在可以联网的环境中安装一台虚拟机,这个镜像地址可以找到大部分Linux发行版本的安装文件。
3、 特别的,如果是Oracle Linux版本,安装好后需要手动更新源文件
1 | cd /etc/yum.repos.d |
4、 检测docker依赖项
1 | repoquery -R docker-engine |
5、 下载docker相关软件包
1 | yumdownloader --resolve docker-engine |
6、 将下载得到的软件包打包压缩,并上传至内网机器。
7、 解压安装软件包,使用rpm命令进行安装
1 | rpm -ivh --replacefiles --replacepkgs *.rpm |
8、 注册docker服务
1 | systemctl enable docker |
9、启动docker服务
1 | systemctl start docker |
Docker镜像离线拉取
如果说公司政策不允许连接公共镜像服务器进行镜像的拉取,可以进行手工拉取进行离线安装:
1、 在虚拟机中首先拉取到目标镜像,然后导出,这里以jenkins为例
1 | docker pull jenkins/jenkins |
2、 人肉将导出的镜像上传至内网机器进行加载1
docker load -i jenkins.docker
Docker Compose离线安装
Docker Compose相对简单,只有一个二进制文件
1、 在虚拟机环境中下载二进制包
1 | curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o docker-compose |
2、 上传至内网机器 /usr/local/bin 目录,并添加执行权限
1 | chmod +x /usr/local/bin/docker-compose |
Docker代理配置
如果说你所在的内网环境允许开通部分目标网络的访问,只是需要通过代理出去,那么就涉及到docker代理的配置了,这里的代理又分为守护进程代理(比如docker loing命令),跟docker容器代理。
Docker Daemon代理配置
1、 新建配置文件目录
1 | mkdir -p /etc/systemd/system/docker.service.d |
2、 新建配置文件[/etc/systemd/system/docker.service.d/http-proxy.conf],并写入如下内容:
1 | [Service] |
这里的 xxx.xxx.xxx.xxx:xxx 替换为对应的内网代理服务器地址,更多说明可以参考官方文档
3、 重启服务,并检查代理配置是否生效
1 | systemctl daemon-reload |
Docker Container代理配置
1、编辑配置文件[~/.docker/config.json],加入如下配置
1 | { |
如果你还没有内网代理
Brook是一个不错的选择,最大的特点是单文件,无需root运行。
1、 下载执行文件并添加执行权限
1 | wget -O brook "https://github.com/txthinking/brook/releases/download/v20200102/brook_linux_386" |
2、 启动http代理
1 | nohup ./brook socks5 -l :1080 -i 128.192.182.202 >> trace.log 2>&1 & |
如果你的一些古董程序不支持代理配置
proxychains是通过hook你的libc网络通讯库来实现让程序通过代理出去的开源软件,理论上只要你的程序基于libc的库都好使。
1、下载源码并进行编译安装
1 | wget "https://codeload.github.com/rofl0r/proxychains-ng/zip/master" -O proxychains-ng-master.zip |
2、 拷贝[/usr/local/lib/libproxychains4.so]跟[/usr/local/bin/proxychains4]至内网机器,并添加对应权限
1 | chmod 644 /usr/local/lib/libproxychains4.so |
3、拷贝配置文件[./src/proxychains.conf]至内网机器的[/etc]目录下,并在最后根据注释添加对应的代理配置
4、使用,这里以curl为例(当然,新版本的curl是支持-x参数来指定代理的)
1 | proxychains4 curl "http://xxx.test.com/“ |