内网穿透用哪些?

什么是内网穿透

内网穿透,也被称作 NAT 穿透。开展 NAT 穿透的目的在于保证具有特定源 IP 地址和源端口号的数据包不会被 NAT 设备阻拦,进而能够准确地路由至内网主机。下面来聊聊相互通信的主机在网络中与 NAT 设备的情况。

内网,指的是存在于局域网内的一部分设备所在的网络。只有在这个内网里的设备之间才能够直接进行通信,而外部网络是无法直接访问内网中的应用或者设备的。

不过,在某些特定情形下,我们或许希望外部网络的用户能够访问内网中的应用或设备,这时就需要用到内网穿透技术。所以说,内网穿透主要是用于解决外网访问内网的问题。

它常见的应用场景涵盖:企业远程办公、数据远程同步、远程监控、远程联机游戏、文件远程共享等等。内网穿透作为程序员常用的调试手段之一,能够允许他人访问我们在本地启动的服务,而且这种访问不受局域网的限制。

您是否曾经对它的神奇作用产生过好奇?明明没有把服务部署到服务器,程序员们到底是通过怎样的特殊方式让所有人都能够访问自己的主机的呢?接下来介绍一下内网穿透的原理。

内网穿透的工具都有哪些?

常见的内网穿透工具有花生壳、巴比达、NAT123、快解析等。虽然它们都属于内网穿透工具,但实际上还是存在区别的。例如:花生壳的设计语言是 C 语言,底层采用 PHTunnel 通信协议,运行速度较快;巴比达的设计语言也是 C 语言,底层采用自研的 WanGooe Tunnel 通信协议。和花生壳一样,它们都支持 TCP、HTTP、HTTPS 协议,以及端到端的 TLS 加密通信、黑白名单防黑验证等功能。

NAT123 的官网没有获取到相关介绍信息,看起来已经很久没有更新了,研究了好一阵子也没弄明白。快解析的官网也没有介绍相关设计语言以及所采用的技术,不过同样支持 TCP、HTTP、HTTPS 协议。快解析是金万维分离出来的品牌产品,大概是在 2022 年左右成立的,具体记不太确切了。查看官网信息得知,金万维是 DDNS 动态域名解析服务商,2016 年公司使用的就是动态域名解析,后来公司搬迁没有了公网 IP,就不再使用了。

还有一些其他的内网穿透工具,比如:ngrok 是一款国外的工具,它采用 go 语言进行开发,支持 TCP、HTTP、TLS(企业用户需要付费)。该工具主要用于解决外网客户端无法访问内网资源的问题,因为它具有使用简单、连接迅速,具有良好的跨平台特性等优点,只需要在官网下载对应的客户端进行安装就行。

该工具把之前的一款旧版本进行了免费开源,在各大开源平台都能看到它的身影。据说后来被一些大神重新封装了一遍,于是就有了后来的 FRP。总体来说,FRP 可以视为 ngrok 的一种延伸,感觉只是名称和使用方法有所改变,同时也继承了该工具的优点和缺点。然而,这个缺点相当严重,不管是先前的 ngrok 还是后来的 FRP 都有一个共同之处,那就是内存溢出。后来在网上看到一些大神提供的解决方法,按照这个方法确实有一定的改善,但始终未能完全消除,时不时还是会出现。另外一个缺点是幽灵断网,内网项目正常、服务端正常,网络也正常,用得好好的却突然失去连接断网,找不到原因,不去管它过一段时间(不确定)自己网络又恢复了。在网上询问了一些网友,他们也表示遇到过这样的情况,网上暂时还未找到有效的解决办法。

希望有大神有时间能够修复这个不太完善的开源工具的这两个问题,据说 ngrok 付费的版本不存在这些问题。不知道是不是老外(欲擒故纵,故意为之)。

由于时间有限,其他内网穿透工具等以后有时间再介绍。倘若其他内网穿透是使用 Go 语言开发的,那基本上就和上述介绍的情况差不多了,基本都是使用 ngrok 或者 frp,当然也有一些是使用其他语言开发的。总体而言,开发内网穿透是一件既耗费时间和精力,又劳心劳力,投入高但回报低的事情。

FRP 简介

基本原理:

  • 在带有公网 ip 的云服务器上部署 frp 的服务端 frps
  • 在需要穿透的内网服务器上部署 frp 的客户端 frpc
  • 每个客户端都会有一个配置文件用于和服务器连接
  • 公网服务器充当代理服务器,用户访问 公网ip + 端口时,公网服务器的 frps 服务会根据端口号,自动转发到对应的内网服务器上,从而访问到内网服务

FRP 配置及使用

下载frp软件

下载 FRP(推荐)

服务端和客户端使用的都是同一份文件,只是配置文件和启动文件不同。因此只需要下载一份文件,并按类型分成两份。

服务器上输入uname -m是 x86_64 架构,因此下载 linux_amd64 版本

通过命令行下载并解压:

wget -c https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
tar -xvf frp_0.53.2_linux_amd64.tar.gz
mv frp_0.53.2_linux_amd64 frp

查看目录:

.
├── frpc
├── frpc.toml
├── frps
├── frps.toml
└── LICENSE

这些文件分成两部分。

  1. 客户端,也即内网的服务器,需要 frpc 和 frpc.toml
  2. 服务端,也即公网的服务器,需要 frps 和 frps.toml
  3. 剩下的是LICENSE,可以不用管

将两类文件分别打包

mkdir client server
mv frpc* client
mv frps* server

服务端配置

将 server 目录上传到公网服务器任意路径。如果需要自动启动,看下一节。如下编辑 frps.toml,参数见注释。

[common]
# frp监听的端口,默认是7000,可修改
bindAddr = "0.0.0.0"
bindPort = 7000

# 开启Dashboard用于管理和查看服务状态。Dashboard端口、用户名和密码,请改成更复杂的。
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin123456"

# 授权码,请改成更复杂的,这个token之后在客户端会用到
auth.method = "token"
auth.token = "e10adc3949ba59abbe56e057f20f883e"

# 去除访问限速
transport.tcpMux = false

# frp日志配置
log.to = "./frps.log"
log.level = "info"
log.maxDays = 3

这里有几个参数需要根据需要手动修改:

bindPort:frp 服务端监听的端口,也即服务入口,建议修改
auth.token:授权码,这个授权码之后在客户端还会用到
webServer.port:监控流量页面的端口,建议修改
webServer.user:监控流量页面的用户名
webServer.password:监控流量页面的密码
log.to:日志文件路径,根据需要修改
其中认证token可以用 pwgen 命令来生成,这个授权码之后在客户端还会用到。

sudo apt install pwgen -y
pwgen -s 32 1

运行服务:

./frps -c frps.toml

得防火墙打开云服务器的7500端口和其他所有提到的端口,这些端口可以用’,'分割,在一个规则中同时打开。然后网页输入公网IP:7500,输入设置的Dashboard账户和密码,登录后即可看到 frp 的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值