内网穿透 |
您所在的位置:网站首页 › 外网可以访问吗 › 内网穿透 |
前言
什么是内网穿透?
内网穿透,又叫 NET 穿透,是计算机用语。用通俗的说法就是你家里的个人电脑,可以直接被外网的人访问。例如你在公司,不通过远程工具,直接也可以访问到家里的电脑(本文章特指 web 应用程序)。 正常来说我们的个人电脑是无法被别人访问到的(有固定 ip 除外!),而且现在固定 ip 资源稀缺,运营商也不会随便给你分配了,个人申请也挺难。 为什么需要内网穿透?就我个人而已,需要用到内网穿透的原因: 一是方便访问公司的内网环境,不喜欢使用远程工具,挺麻烦的。 二是方便把个人电脑上的应用开放到外网进行访问。 资源准备 能上网的个人电脑一台; 有公网 ip 的,个人云服务器一台(阿里云 or 腾讯云); 下载 frp 程序;考虑到 github 有些时候访问不到,我这里分别下载了 Linux 系统 和 windows 系统的 frp 程序供大家使用: 版本:frp_0.38.0_linux_amd64.tar.gz frp_0.38.0_windows_amd64.zip https://fenxiangdayuan.lanzouo.com/b00v3dsri 密码: i0fp 环境搭建 frp 工作原理frp 的应用程序是分服务端和客户端的,服务器端的运行在有公网 ip 的服务器上,客户端就运行在需要穿透的内网机器上就行。 两端的程序运行起来之后,就会建立好通信的隧道,当我们访问公网 ip+端口 时,就会映射到我们内网的机器上了。 服务端搭建 把下载好的 frp 程序,上传到我们云服务器上解压出来即可: tar -xvzf frp_0.38.0_linux_amd64 #解压 mv frp_0.38.0_linux_amd64 frp #重命名一下 进入到 frp 目录下我们看到 frp 目录下的一些文件,很明显分为两部分: frpc 开头的代表着客户端使用; frps 开头的代表服务端使用; .ini 结尾的文件是 frp 的配置文件,也是需要我们进行修改的文件。 我们打开 frps.ini 配置文件查看里面就只有一个配置项,表示监听服务器的 7000 端口,作为客户端通信的入口; 在这里有一个注意的点,如果我们云服务器没开放这个端口的话,我们客户端是无法和服务器进行通信的,这个时候我们需要在控制台的安全组规则中开放 7000 端口; 一切准备就绪,我们启动一下服务端的 frp 程序 frps -c frps.ini frps -c frps.ini & #后台运行看到服务端就正常启动起来了,正在监听 7000 端口; 这个时候我们继续往下配置客户端即可; 客户端搭建有了服务端的配置说明,配置客户端也就是照猫画虎,我们只需要关注 frpc 开头的文件即可; windows 和 Linux 的文件都一样,只是运行的平台不同而已。 下面演示在我个人电脑虚拟机中的 Linux 系统,作为客户端,frp 怎么配置; 同样的步骤,解压下 Linux 版本的 frp ,然后打开 frpc.ini 文件:server_addr : 需要填写上你个人云服务器的公网 ip 地址,这个一定要填写正确,不然无法和服务器进行通信; server_port :就是服务器监听的端口,默认可以不用修改; 这两部分就是用来和我们服务器进行通信的配置。 [ssh] 这部分就是创建隧道,也就映射对应的应用,这里映射的是 ssh; 我们只需要关注 remote_port 这个配置就行,这里需要填写你服务器上开放的端口,未开放的话,通过云服务器控制台,安全组策略进行配置。 这里的意思就是把服务器的 6000 端口映射到内网机器的 22 端口上。 当我们访问公网 ip + 6000 端口时,就会访问到我们内网电脑 22 端口的应用,这里就是 ssh; 配置好之后,接下来我们运行 frp 的客户端程序 frpc -c frpc.ini图中我们可以看到,客户端启动成功,也和我们的服务器建立了通信; TCP 穿透TCP 穿透的意思,就是通信协议类型为 TCP, 常见的 ssh、mysql等等 通过上面服务端和客户端的配置,frp 就搭建成功了,对应 TCP 穿透的配置如下: 服务端 [common] bind_port = 7000 客户端 [common] server_addr = 云服务器ip server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000接下来我们就来测试下,是否能穿透成功,在我们服务器上进行连接我们内网的 Linux 系统: ssh 127.0.0.1 -l root -p 6000从图中我们可以看到,ssh 的穿透已经成功了,我们查看 ip 也是内网中的ip; 通过 TCP 的穿透,我们就可以利用它来穿我们公司内网的服务器了,从而在家里我们也能正常操作公司的内网环境。 HTTP 穿透HTTP 穿透,也就是我们应用层面的通信协议,http协议;穿透它是为了方便我们访问内网的 web 应用,例如我在内网机器,起了一个 tomcat 部署了一个网站,我想让其他人外网的人来访问我,那就需要进行 HTTP 的穿透; 对应的 frp 配置这时和 TCP 是有一点区别的,如下: 服务端 [common] bind_port = 7000 vhost_http_port = 80 #将服务器的 80 端口用作 http 协议的通信 vhost_https_port = 443 #进服务器的 443 端口用作 https 协议通信 privilege_token = token123456789 #frp的认证,对应的客户也需要配置一样,才可以进行通信 客户端 [common] server_addr = 云服务器ip server_port = 7000 privilege_token = token123456789 #frp的认证 [web_http] type=http #通信类型为http local_ip = 127.0.0.1 local_port = 8080 custom_domains = 二级域名/公网ip [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000http 的穿透,我们看到服务端和客户端的配置文件都进行了改动,我们重点来看下客户单中的配置; type = http : 这个是因为我们想要创建的隧道是进行 http 通信的,也就是用来访问本地 web 应用; custom_domains = 二级域名/公网ip :这个配置一般使用一个二级域名来配置,用于通过域名来访问你的穿透服务器,如果没有域名,那么我们写上一个服务器的公网 ip 也是可以的,用 ip 的话,在外网访问的时候,就只能通过 ip 进行访问了,效果都一样; 下面我们看下效果: 先在我内网电脑启动一个 tomcat,监听端口为:8080可以看到,在我的内网物理机中访问,是正常启动了的; 接着我们把 frp 客户端和服务端进行连接上 成功连接之后,我们直接通过外网 ip 进行访问可以看到,我直接用公网 ip 访问,同样能打开我们内网中的 tomcat 应用; 也证明了我们的 HTTP 穿透也是成功的。 注意事项客户端的配置项,不同的隧道需要区分开,写上不同的名字,如[ssh]、[mysql]、[web_http]; 客户端中 remote_port 的端口号不能一样,一样会冲突; 服务器映射的端口需要放开范围,没有放开会造成无法通信; 服务端和客户端都需要注意端口的冲突; 参考文章 frp 配置详解: https://www.cnblogs.com/sanduzxcvbnm/p/8508988.html 内网穿透不同工具(Ngrok、钉钉、花生壳、frp): https://www.it235.com/实用工具/内网穿透/pierce.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |