不使用端口映射,让自己的内网服务器的某个端口映射到外网

来源:互联网 发布:linux安装扫描漏洞 编辑:程序博客网 时间:2024/06/03 18:55

最近在外地出差,

因为代码服务器放在内网,而因为某些原因,公司的宽带并没有公网地址,所以在外地就没有办法拉取git代码了,


经过多方查找,终于找到了一个好点的解决方案。即使用SSH的返向连接,建立一个临时通道。到我阿里云外网的一台主机上,然后访问阿里云的那台主机就相当于访问内网的这台主机,类拟于建立了一个VPN。

前提条件:有一个外网能访问的主机。操作系统linux A  IP是:20.22.22.31

内网有一台也是linux系统,B 192.168.0.10

假设我内网的git 服务器在C上,端口是80 192.168.0.11


做法如下:

在B机器上执行如下命令:

ssh -s -N -R  20.22.22.31:83:192.168.0.11:80 root@20.22.22.31 

然后输入密码

这时。在服务器上就可以看到有一个监听了一个83端口:

tcp        0      0 127.0.0.1:83                 0.0.0.0:*                   LISTEN      2734/sshd           


 这里,就打通了服务器上的83端口到192.168.0.11的80端口的通道。

但这个端口是监听127.0.0.1的,也就是说只能在服务器上能访问,

这是在服务器上,再通过nginx进行端口映射上到外网

在nginx的http里加上:


upstream git {

    server 127.0.0.1:83;

}

server{

        listen 80;

        server_name git.xxx.cn;

        location /{

                root html;

                index index.html index.php;

                proxy_pass http://git;

        }

}


这相就可以通过git.xxx.cn来拉代码了。

发果不想通过nginx进行转发,可以开启SSD的端口转发功能,

vi /etc/ssh/sshd_config

找到:

#GatewayPorts yes

把前面注释去掉。

然后在ssh -s -N -R那条命令上加上以下参数:

-o GatewayPorts=yes


这时,服务器上的83端口监听的域名就变成0.0.0.0:83了 可以很方便的直接进行访问了。






阅读全文
0 0