[LNP] 使用limitless的内网穿透打洞服务实现境内异地组网通信
警告:严禁跨境传输数据,这是违法行为!本页只探讨技术的存在性,以及作为参考,用于个人使用的,非公开,非交互性的内网穿透部署的技术参考。limitless坚决抵制违法搭建跨境信息传输信道的行为!
当计算机没有公网访问方式时,网络穿透(network penetration)是一个能解决不同计算机异地组网通信的方式。
如果你不知道什么是内网穿透,或希望了解其实现原理,请参考后文的简介与知识说明。
如果你已经知道了这个技术并仅使用limitless提供的内网穿透服务,那么请参考使用方法。
limitlessNP服务基于开源内网穿透程序FRP实现。
内网穿透服务主要用于将自己的本地设备变得公网可达。本服务器的内网穿透服务仅提供给网站管理员,站长的好友等用于个人需求,不对外开放,也不是经营性质的。禁止使用frp部署任何http/https内容,一旦发现站长以外的人尝试使用frp部署http/https内容,将会立刻封禁。
Windows 下的使用方法
首先,请从limitless申请一个用于内网穿透的账户与密码、(一个或多个)端口号(按端口号计算业务数目)。可以通过联系limitless网站管理员申请账号。
在开始,请下载最新版的FRP(limitless当前使用的是v0.53.2)如果无法找到Windows相关的版本请点击下方展开更多选项。
Releases · fatedier/frp (github.com)然后解压。
注意:FRP可能会被杀毒软件错误的报毒,这是因为FRP会使用到TCP/IP侦听端口,而这个操作是很多病毒具备的特征,然而为了实现互联网打洞,这个操作是必要的,所以请添加杀毒软件白名单。
之后,请删除除了 frpc.exe 之外的其他内容。(frps是服务器端程序,license是许可证文件,可以不必保存,而配置文件建议使用如下配置文件,不必保留默认配置文件)
请将frpc.exe放置到你希望存储该应用的目录下,之后在同样目录位置创建一个配置文件命名为
config.ini
并使用如下配置
# frpc.ini
[common]
server_addr = limitless.net.cn
server_port = 13003
user = 你申请到的用户名
meta_token = 口令(密码)
[用户名_你的业务名称(可以自命名,仅可英文+数字)]
type = tcp
local_IP = 127.0.0.1
local_port = 13007 此处填写你需要映射的端口号
remote_port = 13066 此处填写你申请到的远程端口号
use_encryption = false 是否启用加密。limitless使用LCA4进行加密,如提示证书验证错误,请安装LCA4证书 https://limitless.net.cn/?p=1164
use_compression = true 是否使用压缩。对于大部分大流量通信来说,开启压缩则会显著提升性能
[用户名_你的第二个业务...]
...
请将配置文件保存为 UTF-8 格式,并且保证配置文件内不包含中文字符或其他非ASCII字符。
之后,如需要启动内网穿透服务,请按住 shift 在 frpc 的文件夹下右键,点击“在此处启动PowerShell”,然后输入并运行:
./frps -c ./config.ini
如不通报错误并显示连接成功,则可以启动你需要穿透的服务了。此时,他人可以通过远端连接
limitless.net.cn:你申请到的远程端口
来访问你的计算机上对应的服务。
如果希望该服务常驻后台或实现开机自启动,请了解:winsw/winsw: A wrapper executable that can run any executable as a Windows service, in a permissive license. (github.com),并使用该程序将frpc注册为Windows的服务(守护进程)。
Linux 下的配置方法
相同。
典型场景
作为举例,这里将演示一个用户使用LNP实现架设MineCraft服务器的场景。
用户A有一台计算机,但是这个计算机没有公网ipv4地址与ipv6地址,该用户的网络接入到了一个NAT组下(通常是中国移动用户),所以其他人无法通过互联网直接访问A架设的MineCraft服务器。
A申请了LNP业务,并配置正确,启动frpc,将本地的19132端口映射到 limitless.net.cn:13066上,此时其他用户可以通过在MineCraft内连接 limitless.net.cn:13066 来游玩A架设的游戏服务器。
问题
limitless的上行带宽约3Mbps,当该带宽用满后可能会产生卡顿。由于limitless具有很多的在线业务,所以申请大带宽业务可能会被驳回(即使可用也不保真流畅度)。
由于limitless的动态ipv4地址问题,请勿使用LNP架设需要高可靠性服务的业务。
原理介绍
内网穿透
由于我国ipv4地址匮乏,而ipv6建设仍旧处于初级阶段,所以大量用户使用NAT(网络地址转换协议)技术接入互联网。这导致了用户无法互相直接建立连接(因为需要公网ip地址),为了解决这个问题,内网穿透技术应用而生。
假设A和B是两个NAT网下的用户,互相无法直接访问,则内网穿透需要一个具有公网ip地址的服务器C,当作中间服务器,由于该服务器具有公网ip,所以用户A和B可同时访问服务器C,然后由C转发A和B的流量,此时A和B可相互通信。
NAT技术
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
FRP的原理
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
为什么使用 frp ?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
- 客户端服务端通信支持 TCP、QUIC、KCP 以及 Websocket 等多种协议。
- 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源。
- 多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP 协议转换,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
- 高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
开发状态
frp 目前已被很多公司广泛用于测试、生产环境。
master 分支用于发布稳定版本,dev 分支用于开发,您可以尝试下载最新的 release 版本进行测试。
我们正在进行 v2 大版本的开发,将会尝试在各个方面进行重构和升级,且不会与 v1 版本进行兼容,预计会持续较长的一段时间。
现在的 v0 版本将会在合适的时间切换为 v1 版本并且保证兼容性,后续只做 bug 修复和优化,不再进行大的功能性更新。
关于 v2 的一些说明
v2 版本的复杂度和难度比我们预期的要高得多。我只能利用零散的时间进行开发,而且由于上下文经常被打断,效率极低。由于这种情况可能会持续一段时间,我们仍然会在当前版本上进行一些优化和迭代,直到我们有更多空闲时间来推进大版本的重构,或者也有可能放弃一次性的重构,而是采用渐进的方式在当前版本上逐步做一些可能会导致不兼容的修改。
v2 的构想是基于我多年在云原生领域,特别是在 K8s 和 ServiceMesh 方面的工作经验和思考。它的核心是一个现代化的四层和七层代理,类似于 envoy。这个代理本身高度可扩展,不仅可以用于实现内网穿透的功能,还可以应用于更多领域。在这个高度可扩展的内核基础上,我们将实现 frp v1 中的所有功能,并且能够以一种更加优雅的方式实现原先架构中无法实现或不易实现的功能。同时,我们将保持高效的开发和迭代能力。
除此之外,我希望 frp 本身也成为一个高度可扩展的系统和平台,就像我们可以基于 K8s 提供一系列扩展能力一样。在 K8s 上,我们可以根据企业需求进行定制化开发,例如使用 CRD、controller 模式、webhook、CSI 和 CNI 等。在 frp v1 中,我们引入了服务端插件的概念,实现了一些简单的扩展性。但是,它实际上依赖于简单的 HTTP 协议,并且需要用户自己启动独立的进程和管理。这种方式远远不够灵活和方便,而且现实世界的需求千差万别,我们不能期望一个由少数人维护的非营利性开源项目能够满足所有人的需求。
最后,我们意识到像配置管理、权限验证、证书管理和管理 API 等模块的当前设计并不够现代化。尽管我们可能在 v1 版本中进行一些优化,但确保兼容性是一个令人头疼的问题,需要投入大量精力来解决。
非常感谢您对 frp 的支持。
文档
完整文档已经迁移至 https://gofrp.org。
GitHub地址:https://github.com/fatedier/frp
关于WinSW(适用于将应用程序注册为Windows的守护进程)
Windows Service Wrapper in a permissive license
Github All Releases GitHub Release NuGet Build Status Deployment Status Gitter License
WinSW wraps and manages any application as a Windows service.
We are actively developing WinSW 3. Please refer to the v2 branch for previous version documentation.
Why?
See the project manifest.
Supported platforms
WinSW 3 can run on Windows platforms with .NET Framework 4.6.1 or later versions installed. For systems without .NET Framework, the project provides native 64-bit and 32-bit executables based on .NET 7.
More executables can be added upon request.
.NET Framework system requirements
Preinstalled since Windows 10, version 1511 and Windows Server 2016.
Installable since Windows 7 SP1 and Windows Server 2008 R2 SP1.
.NET 7 system requirements
Supported since Windows 10, version 1607, Windows Server (Core) 2012 R2 and Nano Server, version 1809.
如需帮助可以自行网上搜索:主页 – Lhome (limitless.net.cn)
或在limitlessBLOG搜索关键字“winsw”获取其他配置实例作为参考。
2024年1月8日
