最近在外地出差,

因为代码服务器放在内网,而因为某些原因,公司的宽带并没有公网地址,所以在外地就没有办法拉取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;

proxy_http_version 1.1;//下面三句支持websocket的反向代理,否则如果网站有websocket的话,会报500错误。

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

}

}

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

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

vi /etc/ssh/sshd_config

找到:

#GatewayPorts yes

把前面注释去掉。

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

-o GatewayPorts=yes

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

第一步算是通了,但后面还会有问题,

就是网上常说到的,这种方式,一旦连接断开了,就需要能在局域网内进行手动重连,如何自动重连,就需要用到autossh,以及自动登录,

在局域网主机上运行:

ssh-keygen
ssh-copy-id root@20.22.22.31 -p 22

这样以后在这台机器上登录

root@20.22.22.31

就不需要输入密码了。

然后安装 autossh

wget http://fossies.org/linux/privat/autossh-1.4e.tgz
tar zxvf autossh-1.4e.tgz
cd autossh-1.4e
./configure
make
make install

安装 好后,写个脚本:

/usr/local/bin/autossh -p 22 -M 0 -o ServerAliveInterval 10 -o ServerAliveCountMax 3 -NR *:83:192.168.0.10:80 root@20.22.22.31 -i /root/.ssh/id_rsa

为了防止autossh再死掉,可以写个脚本进行进程监控。每隔5分钟,看下这个进程是否还在,如果不在,启动一下。

上面这个脚 本,可以有效防止SSH服务器或网络问题导至的连接中断,网上大多数方案都是autossh -M 1234给个端口号,这个方案好像并不太有效。比如像阿里云服务器,默认SSH好像60秒不操作服务器时,服务端就自动断开连接,他是监听不到的,但我改成这种方式,就没问题了。

其中参数部分:
-o ServerAliveInterval 10 -o ServerAliveCountMax 3
这个是指autossh创建ssh连接时,这个连接会每10秒会发送一个消息,服务器如果在3次发送消息还没回应,则会断开,当这个连接断开后,openssh又会重新启一个连接,这样就能保证连接不会中断。

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

  1. 内网(本机)IP和外网(网络)ip区别

    内网概念 即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的.但两个局域网内的内网IP可以有相同的. (连上WIFI,手机IP一般能在「设置」-「关于手 ...

  2. 如何同时使用内网(本地有线连接)和外网(WLAN无线连接)

    如何同时使用内网(本地有线连接)和外网(WLAN无线连接) 进入网络连接页面 设置优先级 跃点数设置 IPV4设置 进入网络连接页面 控制面板 -> 网络和Internet -> 网络和共 ...

  3. 内网服务器设置NAT123端口映射,方便外网连接;如何测试端口连通情况。

    一.nat123设置端口映射. 1)首先去nat123官网注册账号. http://www.nat123.com/ 2)下载nat123客户端 http://www.nat123.com/Pages_ ...

  4. 免费内网穿透软件一步设置实现外网访问

    在工作和生活中,有很多类似内网搭建服务器和外网连接内网的需求, 例如在任何地方都能访问自己家里的主机电脑笔记本上的应用,让出差外网和任何地方都能访问到公司内部局域网的服务器--这些需求我们可以统一用一 ...

  5. FileZilla搭建FTP服务器图解教程,并允许外网访问NAT内网

    FTP是用来在两台计算机之间传输文件,是Internet中应用非常广泛的服务之一.FTP服务是网络中经常采用的资源共享方式之一.FTP协议有PORT和PASV两种工作模式,即主动模式和被动模式 .今天 ...

  6. 内网Linux服务器如何通过代理方式访问外网

    在目前5G网络和互联网高速发展的时代,还有云计算的普及,但是考虑到很多安全的因素考虑,在现实工作中,很多时候需要脱离外网进入linux,这样导致工作的效率大幅度减低,下面介绍几种通过代理的方式访问内网 ...

  7. 外网电脑远程内网电脑用什么软件,没有外网可以远程控制吗

    远程控制电脑,正常来说都是要通网的.电脑连入互联网,才可以进行远程控制.一台没有任何网络连接的电脑,没法进行远程连接和控制. 但是有一种情况比较特殊,就是企业内网环境.有些企业出于数据安全考虑或其他现 ...

  8. 计算机端口封闭,如何查询局域网内被封的电脑端口?

    2007-11-10 不来梅会输球吗? 多 特 11-10 22:30 法兰克 3 罗斯托 11-10 22:30 科特布 赫 塔 11-10 22:30 汉诺威 30 沙尔克 11-10 22:30 ...

  9. 公司内网成功实现WSUS在不连外网的条件下更新补丁包!

    微软的WSUS的命令行很有帮助! 为了便于管理,WSUS服务器中提供了一个命令行工具WSUSUtil.exe,你可以使用它完成一些在WSUS管理控制台中不能进行的任务,例如导入导出数据等等.WSUSU ...

最新文章

  1. html表格编辑器退出编辑状态,html编辑器的使用方法
  2. 火狐浏览器缓存登录名、密码解决方法
  3. Java学习 第四章 java面向对象(二)
  4. Android 布局之GridLayout
  5. 以 DirectUI 方式实现的ImageButton
  6. 20.IDA-修改二进制文件、显示修改点
  7. C#图解教程 第十二章 数组
  8. LeetCode 1716. 计算力扣银行的钱(等差数列)
  9. delphi webbrowser 对象不支持_建模初学者,那些你可能还不知道的10个ZBrush小技巧!【值得收藏】...
  10. 十年后,每天 24 小时离不开传感技术
  11. 显示屏色温调节 影响 测试软件,Twilight屏幕色温调节软件
  12. 京东VS淘宝:待付款订单-再次支付方案对比
  13. 【自我介绍】小白程序员的成神之路
  14. Nature:给研究生的四条金玉良言;颜宁:写的真好,相见恨晚
  15. 无法访问gcr.io的解决办法
  16. 在线转换pdf和虚拟打印机生成pdf文件操作攻略
  17. 用c语言实现简单的项目信息管理系统(单向链表实现)
  18. 轮播图图片大小不统一
  19. USACO 2018 FEBURARY CONTEST :SILVER T1
  20. 谷歌浏览器自带记笔记功能

热门文章

  1. 每日一记 - 3.10
  2. 电机控制驱动相关的PCB元件库带3D模型
  3. 通达信指标公式常用绘图函数(4)——颜色、线形粗细、线型等修饰函数
  4. C++ QT结合FFmpeg实战开发视频播放器-13视频播放器换肤功能实现(1)背景属性添加
  5. Python 黑帽子 snffer ip header decoder
  6. 我的C++实践(11):存放异类对象的元组类型
  7. 【JZOJ4896】【NOIP2016提高A组集训第16场11.15】兔子
  8. allegro 中添加拖锡焊盘
  9. Java程序员必备的几款开发工具
  10. 快速幂算法的原理及实现