让AWS虚机访问公司内网资源

前端之家收集整理的这篇文章主要介绍了让AWS虚机访问公司内网资源前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

今天我需要为AWS上的虚机升级测试版本的kernel,并进行一些测试。

由于公司的网络并不对外开放,因此我们需要手动拷贝YUM源进行升级。用传统的方法,步骤很容易理解:

  1. 在AWS网站上找到最新的AMI,用它启动一个虚机。
  2. 将安装镜像RHEL-7.4-20170621.0-Server-x86_64-dvd1.iso上传到这个虚机中。
  3. Mount这个镜像文件,并以此创建YUM源。
  4. 执行yum update操作完成更新。

然而这就遇到一个问题,这个镜像文件有4.2GB大小,上传不仅需要占用带宽资源,而且还要花费很多时间。

解决办法我首先想到将目录http://download.eng.pek2.redhat.com/pub/rhel/rel-eng/RHEL-7.4-20170621.0/compose/Server/x86_64/debug/tree/拷贝到虚机上,然而发现自己并不确定哪些package是升级所需要的,因此只能全部上传,这样并不能有多大改观。

其次,我想到在AWS虚机上安装客户端,通过VPN访问内网资源。这样做当然是可行的,只是openvpn配置起来需要将证书拷来拷去,这使我担心潜在的安全问题,也担心后续会过多地占用VPN服务器资源。

后来,我想到了一个办法,将公司内网的HTTP代理服务器,用反向连接的方式,共享给AWS虚机,用到的命令大概会是这样:

ssh -R ec2-13-113-60-192.ap-northeast-1.compute.amazonaws.com:8080:squid.corp.redhat.com:3128 -i ~/.pem/ap-northeast-1-cheshi.pem ec2-user@ec2-13-113-60-192.ap-northeast-1.compute.amazonaws.com

这样做应该是最简单的方案了,但是它还有一个小问题,所有流量都要去公司代理服务器上绕一圈,数据通路看起来会是这样的:AWS <-> MyHost <-> ProxyServer <-> FileServer。浪费资源是一方面,更重要的是如果更新量很大, 过多地占用了公司代理服务器的资源,有可能会被IT部门审计出来。

于是,我将这个方案进行了一些改进。我直接将MyHost做成了ProxyServer,并将代理的端口映射到AWS虚机中,这样就不会过多地占用公司的资源,速度也应该会快一些。下面来看我怎么做:

ProxyServer我用的是Squid,它是一款开源软件,配置十分简单,几乎不用修改任何配置就可以拿来当HTTP代理服务器用。首先,登录MyHost并执行:

[root@dhcp-1-202 ~]# yum install -y squid
[root@dhcp-1-202 ~]# squid -z
[root@dhcp-1-202 ~]# systemctl start squid.service 

然后是将本地的3128端口(Squid服务的默认端口)映射到AWS虚机的8080端口,让虚机可以直接使用这个代理服务器。

ssh -R 8080:127.0.0.1:3128 -i ~/.pem/ap-northeast-1-cheshi.pem ec2-user@ec2-13-113-60-192.ap-northeast-1.compute.amazonaws.com

随后,来到AWS虚机中,添加YUM源,并为其设置代理服务器(http://127.0.0.1:8080/)。

[ec2-user@ip-172-31-10-95 ~]$ cat /etc/yum.repos.d/rhel7u4.repo
[rhel7u4-debug]
name=rhel7u4-debug
baseurl=http://download.eng.pek2.redhat.com/pub/rhel/rel-eng/RHEL-7.4-20170621.0/compose/Server/x86_64/os
enabled=1
gpgcheck=0
proxy=http://127.0.0.1:8080/
[ec2-user@ip-172-31-10-95 ~]$ 

最后,进行更新即可。

[ec2-user@ip-172-31-10-95 ~]$ sudo yum update --enablerepo=rhel7u4-debug
Loaded plugins: amazon-id,rhui-lb,search-disabled-repos
Resolving Dependencies
--> Running transaction check ---> Package NetworkManager.x86_64 1:1.8.0-0.4.rc3.el7 will be updated ---> Package NetworkManager.x86_64 1:1.8.0-9.el7 will be an update ......
Complete!
[ec2-user@ip-172-31-10-95 ~]$

备注,如果没有设置代理服务器,或者代理服务器不通(通常是由于MyHost上的防火墙所致),就会收到这样的消息:

failure: repodata/repomd.xml from rhel7u4-debug: [Errno 256] No more mirrors to try.
http://download.eng.pek2.redhat.com//pub/rhel/rel-eng/RHEL-7.4-20170621.0/compose/Server/x86_64/debug/tree/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: download.eng.pek2.redhat.com; Name or service not known"

搭建代理服务器有很多好处,比如可以通过wget下载:

[ec2-user@ip-172-31-10-95 ~]$ export http_proxy=http://127.0.0.1:8080/
[ec2-user@ip-172-31-10-95 ~]$ wget http://download.eng.pek2.redhat.com/pub/rhel/rel-eng/RHEL-7.4-20170621.0/compose/Server/x86_64/os/GPL
......
[ec2-user@ip-172-31-10-95 ~]$ 

扩展阅读:Linux设置代理

相信大家已经看到,ssh是个非常强大的命令,关于它在本文中的应用,可以参考我转载的另一篇博客

扩展阅读:使用ssh正向连接、反向连接、做socks代理的方法

参考文献:

  1. 使用ssh正向连接、反向连接、做socks代理的方法 http://blog.csdn.net/linsanhua/article/details/17360369
  2. Centos下搭建Squid代理服务器详细教程 http://www.tuicool.com/articles/IJzeAv2
  3. Linux设置代理 http://www.361way.com/linux-proxy/4184.html
原文链接:https://www.f2er.com/bash/392475.html

猜你在找的Bash相关文章