#隧道 #tcp #客户端-服务器 #协议 #客户端连接 #代理 #网络

tcp-warp

两个主机之间的用户空间隧道,将客户端机器上的端口映射到服务器机器可访问的地址

2个不稳定版本

0.2.0 2019年12月24日
0.1.0 2019年12月21日

#16 in #客户端连接


tcp-warp-cli中使用

无许可证或MIT

50KB
976

两个主机之间的用户空间隧道,将客户端机器上的端口映射到服务器机器可访问的地址

Linux build status Windows build status Crates.io Packaging status

双许可下使用 MITUNLICENSE.

功能

  1. 用户空间隧道,用于将客户端网络上的端口与服务器端的连接相连接。
  2. 仅使用单个端口。
  3. 客户端将地址推送到服务器以建立连接。

安装

使用 cargo

cargo install tcp-warp-cli

用法

要创建隧道,我们需要在一个端口上启动一个服务器进行监听,然后使用客户端连接到它。

Docker服务器部分的使用

docker run --rm -d -p 18000:18000 tcpwarp/tcpwarp

或使用自定义监听端口(例如:18234)

docker run --rm -d -p 18234:18234 tcpwarp/tcpwarp tcp-warp server --listen=0.0.0.0:18234

简单的本地运行端口映射器

  1. 启动服务器

    tcp-warp server
    
  2. 启动客户端

    tcp-warp client -c 8080:towel.blinkenlights.nl:23
    
  3. 享受表演

    nc 127.0.0.1 8080
    
  4. 此示例使用默认的监听和连接接口。在实际场景中,您至少需要为客户端提供 -t / --tunnel 参数

    tcp-warp client -t host:port ...
    

客户端和服务器都有监听传入连接的地址,客户端还有指定连接地址的参数。

接下来我们看看更具体的示例。

用例:在没有安装Docker守护程序的情况下在计算机上运行Docker,Docker守护程序位于SSH之后

背景

  • 客户端:客户端机器在Windows上运行,安装了Windows版本的 tcp-warp 和Docker CLI。客户端无法运行Docker守护程序。
  • 公共:可通过SSH访问的主节点,可以通过它访问Docker守护程序节点。
  • docker:可通过SSH访问的Docker守护程序节点。

目标

在tcp传输上运行Docker,允许 client 构建 和运行容器。环境应为每个开发者独立可用,不受其他开发者的影响。

解决方案

docker 机器上运行Docker-in-Docker容器(dind),使用tcp主机协议。在 client 上使用 DOCKER_HOST 环境变量来连接到 dinddind 绑定到 docker 主机的端口,并通过SSH端口转发通过 public 转发。

命令的顺序可以如下所示

初始序列(安装)

  1. 前往 docker 节点并启动所需的容器

    user@client $ ssh user1@public
    user1@public $ ssh user2@docker
    user2@docker $ docker run --rm --privileged -p 2375:2375 -p 18000:18000 -d --name some-docker docker:dind dockerd --host=tcp://0.0.0.0:2375
    user2@docker $ DOCKER_HOST=tcp://127.0.0.1:2375 docker run --rm -p 18000:18000 -d --name some-docker-tcp-warp tcpwarp/tcpwarp
    
  2. dockerpublic 节点断开连接。

正常顺序(使用方法)

  1. 使用 ssh 连接到 public 节点并转发 tcp-warp 端口

    ssh -L 18000:docker:18000 user1@public
    
  2. client 机器上使用 tcp-warp 客户端连接到 Docker 守护进程

    tcp-warp client -c 10001:172.18.0.1:2375
    

    此处 172.18.0.1dind 中主机节点的地址。

  3. client 机器上导出 DOCKER_HOST 环境变量

    export DOCKER_HOST=tcp://127.0.0.1:10001
    
  4. client 运行 docker 命令

    docker ps
    docker run hello-world
    docker run -it alpine ash
    

附加服务

我们可以启动附加服务并使用附加的 -c 重新启动 tcp-warp 客户端来为这些服务。

使用 whoami 服务的简单示例

  1. 创建用于主机名解析的网络。使用所有上述步骤启动 whoami 服务。将 tcp-warp 容器连接到新网络

    docker network create our-network
    docker run --rm -d --net our-network --name whoami containous/whoami
    docker network connect our-network some-docker-tcp-warp
    
  2. 停止 tcp-warp。使用为 whoami 服务提供的附加端口映射来启动它

    tcp-warp client -c 10001:172.18.0.1:2375 -c 8080:whoami:80
    
  3. 测试 whoami 服务

    $ curl https://127.0.0.1:8080/
    Hostname: 9fe704cf0e87
    IP: 127.0.0.1
    IP: 172.18.0.3
    IP: 172.19.0.3
    RemoteAddr: 172.19.0.2:44612
    GET / HTTP/1.1
    Host: localhost:8080
    User-Agent: curl/7.64.1
    Accept: */*
    

依赖关系

~5.5MB
~83K SLoC