2个不稳定版本
0.2.0 | 2019年12月24日 |
---|---|
0.1.0 | 2019年12月21日 |
#16 in #客户端连接
在tcp-warp-cli中使用
50KB
976 行
两个主机之间的用户空间隧道,将客户端机器上的端口映射到服务器机器可访问的地址
法律
双许可下使用 MIT
或 UNLICENSE.
功能
- 用户空间隧道,用于将客户端网络上的端口与服务器端的连接相连接。
- 仅使用单个端口。
- 客户端将地址推送到服务器以建立连接。
安装
使用 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
简单的本地运行端口映射器
-
启动服务器
tcp-warp server
-
启动客户端
tcp-warp client -c 8080:towel.blinkenlights.nl:23
-
享受表演
nc 127.0.0.1 8080
-
此示例使用默认的监听和连接接口。在实际场景中,您至少需要为客户端提供 -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
环境变量来连接到 dind
。 dind
绑定到 docker
主机的端口,并通过SSH端口转发通过 public
转发。
命令的顺序可以如下所示
初始序列(安装)
-
前往
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
-
从
docker
和public
节点断开连接。
正常顺序(使用方法)
-
使用
ssh
连接到public
节点并转发tcp-warp
端口ssh -L 18000:docker:18000 user1@public
-
在
client
机器上使用tcp-warp
客户端连接到 Docker 守护进程tcp-warp client -c 10001:172.18.0.1:2375
此处
172.18.0.1
是dind
中主机节点的地址。 -
在
client
机器上导出 DOCKER_HOST 环境变量export DOCKER_HOST=tcp://127.0.0.1:10001
-
从
client
运行 docker 命令docker ps docker run hello-world docker run -it alpine ash
附加服务
我们可以启动附加服务并使用附加的 -c
重新启动 tcp-warp
客户端来为这些服务。
使用 whoami
服务的简单示例
-
创建用于主机名解析的网络。使用所有上述步骤启动
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
-
停止
tcp-warp
。使用为whoami
服务提供的附加端口映射来启动它tcp-warp client -c 10001:172.18.0.1:2375 -c 8080:whoami:80
-
测试
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