2个不稳定版本
0.2.0 | 2019年12月24日 |
---|---|
0.1.0 | 2019年12月22日 |
#20 在 #客户端连接
67KB
1K SLoC
两个主机之间的用户空间隧道,将客户端机器上的端口映射到服务器机器可访问的地址
法律
双重授权许可,受 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: */*
依赖关系
~10-19MB
~230K SLoC