在实验室的服务器搭建了ubuntu虚拟机并且配置了LAMP环境与tomcat,开启了ssh,关闭了防火墙,打开了火狐浏览器输入学号密码连接了校园网。
虚拟机IP地址:10.10.10.170
问题:在实验室利用xshell,用ssh协议连接上了ubuntu,但是必须连接实验室路由器或者校园网,在外网环境下无法连接(宿舍宽带,手机4G网络)
目的:利用frp,实现校园网以外的网络(外网)访问实验室服务器的虚拟机(内网)
网络中唯一定位一台设备的逻辑地址,类似我们的电话号码
在互联网中我们访问一个网站或使用一个网络服务最终都需要通过IP定位到每一台主机,如访问www.baidu.com网站:
其中180.97.33.107就是一个公网的IP地址,他最终指向了一台服务器。
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
内网IP可以同时出现在多个不同的局域网络中,如A公司的U1用户获得了192.168.0.101,B公司的U3用户也可以获得192.168.0.101
但公网IP是唯一的,因为我们只有一个Internet。
//局域网可使用的网段(私网地址段)有三大段:
10.0.0.0~10.255.255.255(A类)
172.16.0.0~172.31.255.255(B类)
192.168.0.0~192.168.255.255(C类)
实验室虚拟机地址为A类(10.10.10.xxx)
路由器分配的地址为C类(192.168.0.xxx)
域名是IP的别名,便于记忆,域名最终通过DNS解析成IP地址。
DNS 服务器为sc-idns-cache.net 地址为218.6.200.139
www.baidu.com 通过DNS 服务器解析成的IP地址为180.97.33.107 和 180.97.33.108
通过浏览器可以访问
域名的结构
公网、内网是两种Internet的接入方式。公网接入方式:上网的计算机得到的IP地址是Internet上的非保留地址,公网的计算机和Internet上的其他计算机可随意互相访问。
NAT(Network Address Translator)是网络地址转换,它实现内网的IP地址与公网的地址之间的相互转换,将大量的内网IP地址转换为一个或少量的公网IP地址,减少对公网IP地址的占用。NAT的最典型应用是:在一个局域网内,只需要一台计算机连接上Internet,就可以利用NAT共享Internet连接,使局域网内其他计算机也可以上网。使用NAT协议,局域网内的计算机可以访问Internet上的计算机,但Internet上的计算机无法访问局域网内的计算机。
静态NAT就是一对一映射,内部有多少私有地址需要和外部通信,就要配置多少外网IP地址与其对应,并不节省外网IP,所以一般不用
动态NAT是在路由器上配置一个外网IP地址池,当内部有计算机需要和外部通信时,就从地址池里动态的取出一个外网IP,并将他们的对应关系绑定到NAT表中,通信结束后,这个外网IP才被释放,可供其他内部IP地址转换使用,这个DHCP租约IP有相似之处。
这是最常用的NAT技术,也是IPv4能够维持到今天的最重要的原因之一,它提供了一种多对一的方式,对多个内网IP地址,边界路由可以给他们分配一个外网IP,利用这个外网IP的不同端口和外部进行通信。
Proxy即代理,被广泛应用于计算机领域,主要分为正向代理与反向代理:
比如X花店代A,B,C,D,E五位男生向Candy女生送匿名的生日鲜花,这里的X花店就是5位顾客的代理,花店代理的是客户,隐藏的是客户。这就是我们常说的代理。
正向代理隐藏了真实的请求客户端。服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,某些科学上网工具扮演的就是典型的正向代理角色。用浏览器访问http://www.google.com时被墙了,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。
当多个客户端访问服务器时服务器不知道真正访问自己的客户端是那一台。正向代理中,proxy和client同属一个LAN,对server透明;
拨打10086客服电话,接线员可能有很多个,调度器会智能的分配一个接线员与你通话。这里的调度器就是一个代理,只不过他代理的是接线员,客户端不能确定真正与自己通话的人,隐藏与保护的是目标对象。
反向代理隐藏了真实的服务端,当我们请求 ww.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,ww.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。
反向代理中,proxy和server同属一个LAN,对client透明。
DDNS即动态域名解析,是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候,客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务程序负责提供DNS服务并实现动态域名解析。
就是说DDNS捕获用户每次变化的IP地址,然后将其与域名相对应,这样域名就可以始终解析到非固定IP的服务器上,互联网用户通过本地的域名服务器获得网站域名的IP地址,从而可以访问网站的服务。
内网穿透即NAT穿透,简单的说,就是当主机处于内网时,外网主机想访问内网主机时,无法找到内网主机。实现外网主机访问内网主机的技术叫内网穿透。
花生壳既是内网穿透软件、内网映射软件,也是端口映射软件。规模最大,较正规,完善。
收费高,使用简单
官网:http://www.oray.com/
nat123是内网端口映射与动态域名解析软件,在内网启动映射后,可在外网访问连接内网网站等应用。整个网站我都没有找到客服电话,网友发了一些反面的评价
收费,使用简单
官网:http://www.nat123.com
NATAPP基于ngrok的国内内网穿透服务,免费版会强制更换域名,临时用一下可以
收费,使用简单
官网:https://natapp.cn/
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
开源免费
使用相对复杂,需要代理服务器支持
官网:https://github.com/fatedier/frp
文档:查看帮助文档,简书示例
利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
因为frp 仍然处于前期开发阶段,未经充分测试与验证,不推荐用于生产环境,所有我选择了ngrok,资料比较多。
还有如圣剑内网通、ngrok(开源免费)、更多办法
ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析与响应。
开源免费
官网:https://ngrok.com/
源码:https://github.com/inconshreveable/ngrok
ngrok1.x开源,ngrok2.x不开源
ngrok使用go语言开发,源代码分为客户端与服务器端。
国内免费服务器:http://ngrok.ciqiuwl.cn/,更多免费服务器请大家挖掘,资源共享,我随时更新:)
如果有服务器,仅客户端的使用是不复杂的,以上面的免费服务器为示例完成内网穿透
------------------------------------------------------------------------------------------------------
1.1 准备环境
阿里云拥有公网IP esc服务器 1个,解析并且绑定到esc服务器域名一个,操作系统ubuntu
具体步骤:该步骤适用于阿里云ubuntu,其他环境下请根据具体环境自行部署
1) 阿里云esc创建一个实例
2)远程连接进入控制台
3)控制台输入命令下载frp
wget https://github.com/fatedier/frp/releases/download/v0.19.1/frp_0.19.1_linux_amd64.tar.gz
4)解压
tar -zxvf frp_0.19.1_linux_amd64.tar.gz
5) 进入目录
cd frp_0.19.1_linux_amd64.tar.gz
6) 配置frps.ini
vi frps.ini
[common]
bind_port = 7000
vhost_http_port = 10080
./frps -c ./frps.ini
至此服务器已经设置好了,然后设置阿里云,打开端口还有域名解析
配置安全组
配置域名解析,这是配置一个解析所有3级域名,设置客户端http/https时会用到这样服务器已经全部配置完成
客户端有windows客户端和linux客户端
这里演示windows客户端
下载客户端,解压后配置 frpc.ini
# frpc.ini
[common]
server_addr = x.x.x.x 服务器公网IP地址
server_port = 7000 对应 frps.ini 的bind_port
[web]
type = http 协议 还有tcp udp https
local_port = 8080
custom_domains = ok.ienai.xin 你的3级或者2级域名,由于刚刚设置解析了3级域名,你可以用任意的3级域名
然后新建一个文件
保存之后双击,启动frp.vbs
说明本地客户端已经启动,ubuntu服务端显示连接
另一种启动方式 cmd 进入frp windows 目录,输入 frpc.exe -c frpc.ini 也可以启动
接下来你就可以访问ok.ienai.xin:10080访问,本机8080端口的服务了,如tomcat
若有多个主机想连接frp服务器,只需要修改3级域名,另外 tcp协议在中文手册上有详细解释
frp github网址:https://github.com/fatedier/frp/releases
中文手册:https://github.com/fatedier/frp/blob/master/README_zh.md
若没有云服务器,可以使用国内免费的frp服务器
个人推荐 http://www.natfrp.org/