公开通过 SSH 转发的 docker 端口

Exposing docker port forwarded via SSH

我正在使用来自 docker hub 的容器,它是安装了 ssh-client 的 Alpine。我正在尝试在远程网络上转发 https 服务并使用 macvlan 将其分配给本地 IP。我正在使用以下 docker 撰写:

version: '3.3'

networks:
    vlan100:
        driver: macvlan
        driver_opts:
            parent: enp3s0
        ipam:
            config:
                - subnet: 192.168.0.0/24

services:
    dsm-over-ssh:
        container_name: dsm-over-ssh
        volumes:
            - '~/.ssh:/root/.ssh'
        command:
            - '-L 443:192.168.1.3:5001'
            - '-4'
            - 'user@server.com'
        networks:
            vlan100:
                ipv4_address: 192.168.0.133
        tty: true
        image: occitech/ssh-client

所以我的想法是启动一个容器,该容器永久具有 ssh -L 443:192.168.1.3:5001 -4 user@server.com 运行ning.

当我 运行 docker exec -ti dsm-over-ssh /bin/shapk add curlcurl https://localhost -k 时,它会显示正确站点的代码。

然而,当我尝试从同一网络上不同计算机上的浏览器访问 https://192.168.0.133 时,它最终超时并显示连接失败。

我能够在同一服务器上加载同一 vlan 上托管的其他站点。我已经尝试将端口设置为 443:443,但它仍然失败 https://192.168.0.133

如果我尝试从同一网络上的另一台设备进行 curl,我会得到 curl: (7) Couldn't connect to server

我可能遗漏了一些简单的东西,有人有什么想法吗?谢谢。

与 Docker 容器中的其他服务器类型进程 运行 一样,您的 ssh 转发器需要配置为侦听特殊的 0.0.0.0 "all interfaces" 地址;和许多服务器类型的进程一样,它默认监听 127.0.0.1 "only the container-private localhost" 地址。请参阅 ssh(1), and the description of the GatewayPorts setting in ssh_config(5)-L 选项的说明。

这意味着您需要在转发器中指定备用绑定地址:

command:
    - '-L0.0.0.0:443:192.168.1.3:5001'