← 返回 TimeAmber
logo NodeSeekbeta

NS首发!开源项目Link一键搞定安全认证、内网穿透和服务转发

  • 工作学习过程中经常有内网穿透需求的场景,传统的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

注意,只有 serverbroker 模式支持授权管理,您可以在 # 后添加授权条目。例如:

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
1234
    • 补充几种使用示例:
    1. NAT内网穿透,假设A位于内网,B在公网,A的服务22端口需要外部访问,那么A就是client模式,B就是server模式,B需要指定一个端口作为心跳端口(例如10101),还需要一个客户端的暴露端口,一键命令的话,服务端B是server://:10101/:10022,A这边就client://B:10101/127.0.0.1:22,这样A的22端口就暴露在B的10022端口了。
    2. 服务转发,假设A直连不上,B线路优秀,想用B的8080端口拉A的8080端口服务,那么只需要在B上一键命令broker://:8080/A:8080,就可以通过B的8080访问A的8080。
    3. 如果需要安全认证功能,注意只针对server和broker模式生效,只需要在最后加上#http://:8080/api,或者,https://:8443/api,端口自定,注意https如果不主动指定域名,会自动生成一个随机自签证书,存下内存中,保证安全,主动指定域名,会自动申请可信证书并维护证书有效,也算是一个亮点。api这里填写指定的路径,避免遍历破解。这样设置之后,想要访问server模式对应的客户端端口映射,或者broker模式转发的端口,必须首先访问以上设置的网页,会返回当前ip地址,在服务器内存中存储白名单ip,并只允许这些ip访问client或者broker对应的服务。
  • 马克 感谢先

    ipfs 文件管理|绿草挂机邀请| FR-ORY 法兰西大带宽开机筹划中,欢迎pm

  • 太懒了主要是,frp懒得动了。等佬做大做强在搞。BD

  • xhj003

  • 大佬 BD

  • 在用frp 不想折腾了 因为很简单

    大魚海棠

  • 点赞

    活着,开心就好

  • 马克 感谢先

  • 看不懂,有大佬试用说说感受吗

1234
内容
预览
对照
AC娘
洋葱头
小黄鸡