2021-08-19 10:29:56 +08:00
2021-08-18 11:44:19 +08:00
2021-08-12 19:09:56 +08:00
2021-08-18 11:31:53 +08:00
2021-08-12 17:51:28 +08:00
2021-07-30 17:26:29 +08:00
2021-07-30 16:07:16 +08:00
2021-08-13 10:20:45 +08:00
2021-08-13 10:20:45 +08:00
2021-08-12 17:42:50 +08:00
2021-08-18 11:44:19 +08:00
2021-08-02 15:01:47 +08:00
2021-08-02 15:01:47 +08:00

natpass

内网穿透工具

实现原理

基于tls链接,protobuf进行数据传输,下面举例在办公网络穿透到家庭网络, 并通过rdp进行连接家庭网络下的某台windows设备

rdp

工作流程如下:

  1. 办公网络与家庭网络中的np-cli创建tls连接到np-svr
  2. np-cli服务发送握手包,并将配置文件中的secret字段进行md5哈希
  3. np-svr等待握手报文,若等待超时则为非法链接,直接断开
  4. 办公网络客户机创建新连接到172.16.1.100的3389端口
  5. 172.16.1.100上的np-cli接收到新请求后创建新的link并生成链接id
  6. 172.16.1.100上的np-cli发送connect_request消息,告知连接类型和链接目标地址和端口
  7. np-svr转发connect_request消息至192.168.1.100上的np-cli
  8. 192.168.1.100上的np-cli接收到connect_request消息,根据请求信息创建链接到目标地址和端口
  9. 192.168.1.100上的np-cli根据链接创建结果返回connect_response消息
  10. np-svr转发connect_response消息至172.16.1.100上的np-cli
  11. 172.168.1.100上的np-cli接收到connect_response消息后根据是否成功来决定是否需要断开rdp客户端链接
  12. 链路打通,两端各自发送data消息到对应链路

编译

./build

配置

server端配置如下:

listen: 6154       # 监听端口号
secret: 0123456789 # 预共享密钥
log:
  dir: ./logs # 路径
  size: 50M   # 单个文件大小
  rotate: 7   # 保留数量
tls:
  key: /dir/to/tls/key/file # tls密钥
  crt: /dir/to/tls/crt/file # tls证书

client端配置如下:

id: this               # 客户端ID
server: 127.0.0.1:6154 # 服务器地址
secret: 0123456789     # 预共享密钥,必须与server端相同,否则握手失败
log:
  dir: ./logs # 路径
  size: 50M   # 单个文件大小
  rotate: 7   # 保留数量
tunnel:                     # 远端tunnel列表可为空
  - name: rdp               # 链路名称
    target: that            # 目标客户端ID
    type: tcp               # 连接类型tcp或udp
    local_addr: 0.0.0.0     # 本地监听地址
    local_port: 3389        # 本地监听端口号
    remote_addr: 127.0.0.1  # 目标客户端连接地址
    remote_port: 3389       # 目标客户端连接端口号

运行

server端运行:

./np-svr -conf server.yaml

client端运行:

./np-cli -conf client.yaml
S
Description
No description provided
Readme
17 MiB
Languages
Go 80.7%
JavaScript 9.3%
HTML 6.2%
CSS 3.1%
Shell 0.7%