SSH远程登入
一、内网和外网
其实很多时候,我们的电脑不是直接连接到internet(外网)上的,而是通过如下图所示的方式进行连接的:
1.概念
(1)内网
局域网(LAN,Local Area Network),也称为内网/私网,是指在某一区域内由多态计算机互联成计算组,一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信等功能。局域网是封闭型的们,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
内网就是从路由器以下的部分,IP地址都是以192开头。从上图可以看出,个人电脑是经过交换机、路由器之后才连接到外网的。这样做的原因是因为外网的IP地址其实是比较紧张的,现在的电脑的普及程度,使得外网的IP根本不够用,内网的出现就是为了解决这个问题。
(2)外网
广域网(WAN,Wide Area Network ),又称之为公网,外网,是连接不同地区局域网计算机通信的远程网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个地区/城市/国家,或横跨几个州并能提供远距离通信,形成国际性的远程网络。另外,这里需要注意的是广域网不等同于互联网(一般来说,互联网就是国际互联网的简称,也就是internet。广域网是网络专业的一个术语,通常指那些跨接很大物理范围的计算机网络。而互联网是广域网的一个实例,除了互联网这种类型的广域网,电力调度网/大型跨地区企业的内部网络也是典型的广域网)。
2.区别
(1)IP地址的设置。一般内网都有自己的IP号段,也不会和互联网号段冲突,内网就是从路由器以下开始的部分,而且IP都是以192开头。外网的IP一般都是用于公司企业/学校等机构。
(2)内网电脑连接外网需要一个统一的出口,可能会被限制一些不必要的访问,而外网就不经过路由器或者交换机既可以上网,可以直接被外界所访问到,无需经过上述设备就可以连接到电脑。
(3)内网相对于外网而言,会多一层安全防火墙,因此抵御来自外网的攻击。内网的不足在于可能会遭到来自内部的攻击,并且因为要共享带宽,网速相对来说就会变慢,终端越多网速越慢。
(4)内网的IP地址可以经常换,可以自己定义规则;而外网的IP一般都是固定的,当我们装好宽带的时候,IP地址就固定下来了。外网IP是全世界唯一的IP地址,仅仅分配给一个网络设备。而内网IP是由路由器分配给每一个内部使用的IP地址,内网上的所有用户都是通过同一个外网IP地址进行上网的。打个比方,外网IP就是小区地址,而内网IP就是你在这个小区的门牌号。
3.NAT
(1)内网也就是局域网,这在上面已经提到过,内网的计算机以NAT(Network Address Translator,网络地址转换)协议,通过一个公共的网关访问internet。内网的计算机可向internet上的其他计算机发出连接请求,但internet上的其他计算机无法向内网的计算机发送连接请求。
(2)NAT实现内网IP地址与外网地址之间的相互转换,将大量的内网IP地址转换为一个或少量的外网IP地址,减少对外网IP地址的占用。所有ISP(internet服务提供商)提供的内网internet接入方式,几乎都是基于NAT协议。
(3)大部分网络使用B类或C类地址(128-191/192-223)。所有的网络空间计算都必须-2,这是因为要扣除掉两个保留地址:0为网络号,255为广播号,地址1-254分配给主机。只有非常少数的非常大的组织才能拥有A类地址,实际上只有126个这样的组织,我们中大多数使用的是B类和C类地址来和internet相连。
(4)内网保留地址。internet设计者保留了IPV4地址空间的一部分供专用地址使用,专用地址空间中的IPV4地址叫做专用地址,这些地址永远不会被当作公用地址来分配,所以专用地址永远不会与公用地址重复。
(5)内网是可以上网的,需要一台服务器或路由器作为网关,通过它来上网。作网关的服务器/路由器有一个网关的IP地址,其他内网电脑的IP可以根据这个网关地址进行随意设置,前提是IP前三个数要和网关地址一致,第四个可以从0-255中任意选择,但是不可以和网关地址一样。
(6)内网穿透(NAT穿透)
采用端口映射,让外网的电脑找到处于内网的电脑,同时也可以基于HTTP/2实现web内网穿透。方法是,在局域网内部的任意一个PC或服务器上运行花生壳内网穿透客户端,此时域名解析到的IP地址是局域网网关出口处的公网IP,再在网关处作端口映射指向监控设备即可。
二、用SSH访问内网主机的方法
如今的互联网公司通常不会直接自己配主机搭建服务器,而是采用了类似阿里云的这种云主机,当应用变得越来越大之后,就不可以避免的需要增加主机,而出于成本考虑,不可能给每一台主机都分配公网带宽,所以实际的情况往往如下:
内网IP为10.51.15.12和10.51.15.13的两台主机并没有外网带宽,通常是作为后端数据库服务器或者后端业务逻辑处理服务器使用,这样我们会遇到一个问题:无法直接使用SSH登入这两台服务器,那么应该如何解决这个问题?——当然是借助带有公网IP的服务器中转一下,如下图:
考虑到SSH其实走的是TCP协议,我们只需要在10.51.15.11上安装和配置一个TCP中转服务器即可,NGINX就具有这个功能。
1.NGINX TCP反向代理设置
NGINX从1.9.0开始支持TCP反向代理,之前只支持HTTP。这是系统示意图:
(1)NGINX是什么?
NGINX是一个高性能的HTTP和反向代理web服务器,NGINX代码完全使用c语言写成,兼容多种类型的操作系统:linux/win/Mac OS X等等,有自己的函数库。
(2)什么是反向代理?
据一个例子来解释这两个概念:正向代理和反向代理。A通过B找C借了500w,C把钱借给了B,B又给了A。B在这个过程中所扮演重要角色就是代理,也可以说是正向代理,在这里,C是不知道真正的借钱人是谁,这点非常关键。
我们常说的代理就是只正向代理,正向代理的过程中,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代为向服务端口请求,某些科学上网工具扮演的角色就是正向代理角色。比如我们使用浏览器访问http://ww.google.com的时候,被残忍的block,因为我国有墙。但是,这个时候我还是想要登入到这个网站的话怎么办,我们可以在国外搭建一台代理服务器,让这个代理代替我去请求google.com,代理把请求返回的相应结构再返回给我。
而所谓的反向代理,在我们拨打10086客户电话的时候,电话那头的客服可能是男的可能是女的,漂亮的或者帅气的,这个我们作为客户并不关心,我们只关心我们的问题能不能得到专业的解决。这里的10086总机号码就是我们说的反向代理,客户不知道真正提供服务的人是谁。
反向代理隐藏了真实的服务端,当我们请求www.baidu.com的时候,就像在拨打10086一样,背后可能有成千上万的服务器为我们服务,但具体是那一台,你不知道也不需要知道,你只需要指导反向代理服务器是谁就好,而这里www.baidu.com就是我们的反向代理服务器,这个反向代理服务器会帮我们把请求转发到真实的服务器哪里去,NGINX就是性能非常好的反向代理服务器,用来实现负载均衡。
总的来说,两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端。
(2)为什么需要反向代理?
一是:负载均衡;二是:方便管控;比如我们现在要更新后端服务器,如果不使用负载均衡的话,在更新过程中,用户会出现无法连接服务器的情况,而一旦用了负载均衡,用户此时的连接请求就会被分配到其他没在进行更新的后端服务器中,尽可能保证服务器群的正常运转。那么,当我们有多个服务器后端,就需要打开多个不同的监听端口,需要在系统防火墙做多个配置,如果它们与客户端的连接使用SSL/TLS,那么得给它们各自配置证书。为了简化这个步骤,就出现了反向代理技术,服务器只需要打开一个对外监听端口,证书也只需要给反向代理配置即可,这样做的好处除了简化步骤之外,还方便管控,例如流量管控、访问策略等等。
(3)缺点
如果后端多了起来,连接也会多起来,这对于NGINX来说是一个非常大的挑战。毕竟TCP和HTTP是不一样的,TCP通常来说是“长连接”,需要一直维持连接。如果NGINX无法负载这些长连接,那么就可以考虑硬件负载均衡。
(4)安装和配置NGINX
【1】安装
sudo apt-get install nginx//ubuntu系统安装命令 nginx -v//查看版本【2】配置和使用
//情况1,网站配置,HTTP touch ice-qjnubk-3000.conf//添加对应网站的配置文件,命名规则:项目名+二级域名+端口.conf vim ice-qjnubk-300.conf//配置文件 //复制以下代码到配置文件中并保存 upstream ice { server 127.0.0.1:3000; } server { listen 80; server_name ice.qjnubk.club; location / { # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X_Nginx_Proxy true; proxy_pass http://ice; proxy_redirect off; } } // /*配置说明:
配置很简单,意思也很明确,将连接至1118端口的TCP请求转至10.51.15.12:22,将连接至1119端口的TCP请求转至10.51.15.13:22。
*/ 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; } }
【3】重启NGINX服务
systemctl restart nginx【4】有必要的话就配置下防火墙
firewall-cmd --zone=public --add-port=1118/tcp --permanent firewall-cmd --zone=public --add-port=1119/tcp --permanent firewall-cmd --reload
1.定义
内网穿透,即NAT穿透,进行NAT穿透是为了使具有某一特定源IP地址和源端口号的数据包不被NAT设备屏蔽而正确的路由到内网主机上。UDP内网穿透的实质就是利用路由器的NAT系统。NAT是一种将私有(保留)地址转换为合法IP地址的转换技术,可以完成重用地址,并且对于内部的网络结构可以实现对外隐蔽。简单来说,就是将外网IP的某个端口因映射到内网IP的某个端口上。
2.内网穿透工具
(1)ngrok
是一个反向代理,通过在公共端点和本地运行的web服务器之间建立一个安全的通道
(2)frp
是一个高性能的反向代理应用,支持tcp,http,https等协议类型,并且web服务支持根据域名进行路由转发