用SSH访问内网主机的方法

如今的互联网公司通常不会直接自己直接配主机搭建服务器了,而是采用了类似阿里云的这种云主机,当应用变得越来越大了之后,就不可避免地增加主机,而出于成本考虑,不可能给每一台主机都分配公网带宽,所以实际的情况可能会变成这样:

内网IP为10.51.15.12和10.51.15.13的两台主机并没有外网带宽,通常是作为后端数据库服务器或者后端业务逻辑处理服务器使用,这样我们会遇到一个问题:无法直接用SSH登录这两台服务器,如何解决这个问题?——当然是借助带有公网IP的服务器“中转”一下了,如下图:

考虑到SSH其实走的是TCP协议,我们只需要在10.51.15.11上安装和配置一个TCP中转服务器即可,NGINX就具有这个功能。如何安装和配置NGINX请移步这里:简易NGINX TCP反向代理设置

这里介绍的内容和上述文章没有太多不同,仅仅在配置上有一点点不一样(而且还更简单),编辑/etc/nginx/nginx.conf

stream{
    upstream ssllink12{
        server 10.51.15.12:22 max_fails=3 fail_timeout=10s;
    }
    
    upstream ssllink13{
        server 10.51.15.13:22 max_fails=3 fail_timeout=10s;
    }

    server{
        listen 1118;
        proxy_connect_timeout 20s;
        proxy_timeout 5m;
        proxy_pass ssllink12;
    }
    
    server{
        listen 1119;
        proxy_connect_timeout 20s;
        proxy_timeout 5m;
        proxy_pass ssllink13;
    }
}

配置很简单,意思也很明确,将连接至1118端口的TCP请求转至10.51.15.12:22,将连接至1119端口的TCP请求转至10.51.15.13:22。

重启NGINX:

systemctl restart nginx

如有必要,配置一下防火墙:

firewall-cmd --zone=public --add-port=1118/tcp --permanent
firewall-cmd --zone=public --add-port=1119/tcp --permanent
firewall-cmd --reload

然后直接用SSH试试看吧。

NGINX采用了“透明”的工作模式,以致SSH客户端不知晓自己的连接请求其实已经被转交到一台内网主机中了。

posted @ 2016-03-24 13:46  guogangj  阅读(22136)  评论(1编辑  收藏  举报