Skip to content

goRelay的基本使用

本文章将介绍goRelay的基本使用。

goRelay是使用go编写的基于TCP的内网穿透工具,项目地址为:goRelay

使用背景:当需要将内网某台机器的端口映射到公网进行访问时,可以使用此工具,该工具提供端到端的通信功能。

使用限制:使用该工具至少需要一台拥有公网IP的机器。

最新功能:支持端口复用。

部署图

image-20250104004758841

如何获取可执行文件

从已发布的版本中获取

可以从已发布版本中得到以下可执行文件:

goRelay是一个可执行文件,通过添加--type的方式来区分服务器类型。具体的类型可以分为: - relayServer:中转服务器用于接收和发送数据,需部署在客户端请求的内网环境中,可以部署多个,用于支持端口复用。 - pipeServer:管道服务器用于数据传输,需部署具有公网IP的服务器上。 - pipeClient:管道客户端用于用户数据传输,需部署在真实服务所在的内网环境中。 - relayClient:中转客户端用于接收和发送数据,需部署在真实服务所在的内网环境中,需要配置relayServer信息,以支持端口复用。

编译获取

将该仓库clone下来后,使用bash build.sh + 版本号 进行编译,例如:

➜  goRelay git:(main) ✗ bash build.sh v0.0.1
build project
go build -ldflags "-X goRelay/pkg.Version=v0.0.1 -X goRelay/pkg.BuildAt=2025-01-04 -X goRelay/pkg.GitCommit=9002ae53fff26c433cdcde76abed1781c3cc218a" -o ./bin/goRelay 
tar zcvf pipeSourcev0.0.1.tar.gz ./bin
./bin/
./bin/goRelay
➜  goRelay git:(main) ✗ 

编译完成之后,会在./bin/下生成对应的二进制文件。

➜  goRelay git:(main) ✗ ls bin/
goRelay
➜  goRelay git:(main) ✗ 

如何执行

pipeServer

pipeServer是管道服务器,用于数据传输,需要部署到具有公网IP的服务器上。

启动该服务,需要先创建配置文件,比如该文件名称为:conf_pipeServer.json

{
    "listen_pipe_server_addr":":8888",
    "black_ip_list":[
        "127.0.0.3"
    ],
    "white_ip_list":[
        "127.0.0.1"
    ],
    "debug_log":true
}

其中,listen_pipe_server_addr是对外监听的地址,若想监听某个网卡,则指定网卡地址即可,比如:192.168.2.3:8888white_ip_list是设置的白名单,只允许名单内的连接上来,为空,则不设置白名单,均可以连接。后续配置也是如此, black_ip_list是设置的黑名单,禁止名单内的IP连接上来,若为空,则不设置黑名单,若黑名单和白名单都用相同的值,则黑名单优先级高于白名单。 debug_logtrue是否输出debug日志。后续配置也是如此,

启动pipeServer,只需要指定配置文件即可,例如:

➜  bin git:(main) ✗ ./goRelay --type pipeServer --config conf/conf_pipeServer.json 

relayServer

relayServer是中转服务器,用于接收和发送用户的数据,需要部署在客户端请求的内网环境中。

relayServer可以开启多个,以便支持端口复用,需要为每个relayServer设置不同的id

同样的,如果需要启动该服务,需要先创建配置文件,比如该文件名称为:conf_relayServer.json

{
    "id": "client1",
    "pipe_server_addr":"127.0.0.1:8888",
    "listen_relay_server_addr":":10010",
    "white_ip_list":[
        "127.0.0.1"
    ],
    "debug_log":true
}

其中,idrelayServer的唯一标识符,对其多开的时候需要注意id不能重复,该id是字符串,允许自设定,建议设置复杂一点。 pipe_server_addrpipeServer的地址。 listen_relay_server_addrrelayServer监听的地址。 white_ip_list是设置的白名单。

同样的,可以创建第二个配置文件conf_relayServer2.json

{
    "id": "client2",
    "pipe_server_addr":"127.0.0.1:8888",
    "listen_relay_server_addr":":10012",
    "white_ip_list":[
        "127.0.0.1"
    ],
    "debug_log":true
}

注意,id不能重复,如果是在一台机器上,则listen_relay_server_addr对外监听的地址也不能重复。

指定配置文件即可启动该服务。

➜  bin git:(main) ✗ ./goRelay --type relayServer --config conf/conf_relayServer.json 

relayClient

relayClient是中转客户端,用于接收/发送来自管道客户端、真实服务的数据,需要部署在真实服务所在的内网环境中。

启动该服务,需要配置relayServer随指定的id,根据id的不同,来指定相应的真实服务的地址,并且需要设置监听的端口,用于管道客户端的连接。

要想启动该服务,需要创建配置文件,比如:conf_relayClient.json

{
    "listen_relay_client_addr": ":10011",
    "white_ip_list":[
        "127.0.0.1"
    ],
    "debug_log": true,
    "realServerInfo": [
        {
            "id": "client1",
            "real_Server_Addr": "127.0.0.1:80"
        },
        {
            "id": "client2",
            "real_Server_Addr": "127.0.0.1:22"
        }
    ]
}

其中listen_relay_client_addr是对外监听的端口,用于pipeClient程序的连接。 realServerInfo则是真实服务器信息,是一个数组,该数组以idreal_Server_Addr成对出现,用于分辨哪些id和哪些后端服务进行绑定。该idrelayServerid必须一致,请注意id不要重复,否则会以最后一个id的信息为准。

启动该服务只需要指定相应的配置文件即可。

➜  bin git:(main) ✗ ./goRelay --type relayClient --config conf/conf_relayClient.json 

pipeClient

pipeClient是管道客户端,用于传输来自管道服务器的数据,以及中转客户端的数据,该服务需要部署在真实服务所在的内网环境中。

启动该服务,需要创建配置文件,比如:conf_pipeClient.json

{
    "pipe_server_addr":"127.0.0.1:8888",
    "relay_client_addr":"127.0.0.1:10011",
    "debug_log": true
}

其中pipe_server_addr表示pipeServer服务器的地址。 relay_client_addr表示relayClient服务器的地址。

只需要指定配置文件,即可启动该服务。

➜  bin git:(main) ✗ ./goRelay --type pipeClient --config conf/conf_pipeClient.json 

数据加密

当你不是该公网服务器的所有者时,就必须要考虑到中间人攻击的风险。为了确保数据安全,建议使用数据加密,如部署图中绿色部分所示,数据传输可以加密。然而需要注意的是,目前版本并未实现数据加密功能,但已为此预留了接口。你可以通过修改pipeProtocol/enDecode.go文件中的EncodeDecode函数,来实现数据加密。

函数如下:

func Encode(s []byte) []byte {
    return s
}

func Decode(s []byte) []byte {
    return s
}

其中,Encode将用做加密操作,Decode将用作解密操作。

其他

该项目不接受任何需求。




goRelay的基本使用

https://wangli2025.github.io/2025/01/04/tcp-intranet-penetration-tool.html

本站均为原创文章,采用 CC BY-NC-ND 4.0 协议。转载请注明出处,不得用于商业用途。

Comments