跳到主要内容

Docker中部署内网云隧道

投稿作者:匿名大佬

备注:ssh端口映射中,远程端口必须是80端口,本地的ip:port可以自由定义

1. Docker指令部署 内网云隧道

创建Dockerfile文件

cat > Dockerfile <<'EOF'
FROM alpine:3.8

RUN addgroup -S nwy \
&& adduser -S -D -H -s /bin/false -g "nwy" -G nwy nwy \
&& set -x \
&& apk add --no-cache openssh-client \
&& mkdir -p /home/nwy/.ssh && chown nwy:nwy /home/nwy/.ssh && \
echo '#!/bin/sh' >> /usr/local/bin/askpass && \
echo 'echo $ASKPASS' >> /usr/local/bin/askpass && \
echo '#!/bin/sh' >> /usr/local/bin/ssh_no_pass && \
echo 'export SSH_ASKPASS=/usr/local/bin/askpass' >> /usr/local/bin/ssh_no_pass && \
echo 'export DISPLAY=:0' >> /usr/local/bin/ssh_no_pass && \
echo 'setsid ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking no" "$@"' >> /usr/local/bin/ssh_no_pass && \
chmod +x /usr/local/bin/askpass /usr/local/bin/ssh_no_pass

USER nwy
WORKDIR /tmp

# ⚠️ 匿名隧道已废弃,请使用注册账户。详见 [快速开始](./快速开始)
CMD ["/usr/local/bin/ssh_no_pass", "-R", "80:172.17.0.1:8000", "sh@sh3.neiwangyun.net"]
EOF

构建镜像命令:docker build -t nwy .

假设在本机有一服务于端口172.17.0.1:8000(如python3 -m http.server 8000

开启匿名映射:docker run -it --rm nwy

2. Docker-compose指令部署 本地服务+内网云隧道

以下为例向docker-compose.yaml中添加隧道服务,

cat > docker-compose.yaml <<'EOF'
version: '3.3'

services:
web:
image: python
command: python3 -m http.server 8888
networks:
tunnel:

nwy:
build: ./
hostname: nwy
depends_on:
- web
environment:
- ASKPASS=password-for-private-tunnel
command: /usr/local/bin/ssh_no_pass -R 80:web:8888 hk@hk3.neiwangyun.net
restart: unless-stopped
networks:
tunnel:

networks:
tunnel:
EOF

使用docker-compose up即可开启,注意根据自己需要修改services->nwy->command映射的端口等部分,同时隧道密码可以使用环境变量ASKPASS传递。