- 工作学习过程中经常有内网穿透需求的场景,传统的frp、nps虽然功能完善,但是缺少灵活性,不够简洁易用。
- 如果再有需要进行TCP转发的时候,iptables又有些不方便,不易于管理。
- 在有些情况下需要我们的服务有白名单限制,但又需要防火墙繁琐的配置。
- 根据这些需求,项目主完全从零开始打造出了一款灵活处理上述需求的工具:Link
概述
Link 是一款强大的 TCP 连接管理工具,可简化 NAT 穿透、TCP 转发等功能。通过在单个可执行文件中集成三种不同的运行模式,Link 能跨越不同的网络环境,无缝重定向服务并处理 TCP 连接,确保可靠的网络连接和理想的网络环境。凭借高度集成的授权管理,Link 让您高效管理用户权限,建立不间断的数据流,以确保敏感资源的保护,同时保持应用程序的高性能和响应性。
功能
-
统一操作:Link 可作为服务端、客户端或转发模式运行,三种角色仅需一个可执行文件。
-
授权管理:通过 IP 地址管理,Link 确保只有授权用户可以访问敏感资源。
-
自动证书:使用 Certmagic 进行无缝的自动证书颁发和更新(当域名可用时)。
-
内存证书:提供有效期为一年的自签名 HTTPS 证书,完全存储在内存中。
-
自动重连:提供可靠的短期重连功能,确保服务不中断。
-
连接更新:在连接中断的情况下,Link 支持实时连接更新。
-
服务转发:高效管理和重定向 TCP 连接,从一个服务到各个入口点。
使用方法
运行程序时,请提供指定模式和连接地址的 URL。URL 格式如下:
server://linkAddr/targetAddr
client://linkAddr/targetAddr
broker://linkAddr/targetAddr
注意,只有 server 和 broker 模式支持授权管理,您可以在 # 后添加授权条目。例如:
server://linkAddr/targetAddr#authScheme://authAddr/secretPath
broker://linkAddr/targetAddr#authScheme://authAddr/secretPath
- authScheme:该选项允许选择使用 HTTP 或 HTTPS。
- authAddr:指定授权管理的服务器地址和端口。
- secretPath:用于处理授权请求的密钥端点。
服务端模式
linkAddr:用于接受客户端连接的地址。例如:10101。targetAddr:用于监听外部连接的地址。例如:10022。
以服务端模式运行
./link server://:10101/:10022
- 该命令将在端口
10101上监听客户端连接,并在端口10022上监听和转发数据。
以授权方式运行服务端
./link server://:10101/:10022#https://hostname:8443/server
- 服务端在
https://hostname:8443/server进行授权管理,访问时记录您的 IP。 - 服务端将在端口
10101上监听客户端连接,并在端口10022上监听和转发数据。
客户端模式
linkAddr:要连接的服务端地址。例如server_ip:10101。targetAddr:要连接的目标服务地址。例如127.0.0.1:22。
以客户端模式运行
./link client://server_hostname_or_IP:10101/127.0.0.1:22
- 该命令将与
server_hostname_or_IP:10101建立链接,并连接和转发数据到127.0.0.1:22。
转发模式
linkAddr:用于接受客户端连接的地址。例如:10101。targetAddr:要连接的目标服务地址。例如127.0.0.1:22。
以转发模式运行
./link broker://:10101/127.0.0.1:22
- 该命令将在端口
10101上监听客户端连接,并连接和转发数据到127.0.0.1:22。
以授权方式运行转发模式
./link broker://:10101/127.0.0.1:22#https://hostname:8443/broker
- 服务端在
https://hostname:8443/broker进行授权管理,访问时记录您的 IP。 - 服务端将在端口
10101上监听客户端连接,并连接和转发数据到127.0.0.1:22。
容器使用
您也可以使用容器运行 Link。镜像可从 ghcr.io/yosebyte/link 获取。
在服务端模式下使用容器运行(带或不带授权):
docker run --rm ghcr.io/yosebyte/link server://:10101/:10022#https://hostname:8443/server
docker run --rm ghcr.io/yosebyte/link server://:10101/:10022
在客户端模式下使用容器运行:
docker run --rm ghcr.io/yosebyte/link client://server_hostname_or_IP:10101/127.0.0.1:22
在转发模式下使用容器运行(带或不带授权):
docker run --rm ghcr.io/yosebyte/link broker://:10101/127.0.0.1:22#https://hostname:8443/broker
docker run --rm ghcr.io/yosebyte/link broker://:10101/127.0.0.1:22
- 本项目托管在GitHub上:
https://github.com/yosebyte/link - 欢迎STAR本项目,有技术问题可留言私信TG沟通。