请教大佬,有没有docker可以实现这个功能?

我现在有个问题,如下图:
我有一个服务运行在host A上,只有通过L2TP vpn连接到这个host的电脑,才可以访问这个电脑的7860 端口的服务。

有没有这个这样的docker或者软件,安装在B上,然后通过vpn和host A建立链接,然后自己又能把端口对外开放出来?

1 个赞

简单处理能用ssh的隧道功能

ssh 隧道 +1

1 个赞

隧道,
转发,
穿透,
打洞
关键字,自行搜吧,不推荐具体的了。

2 个赞

这个端口的web服务其实就是stable diffusion webui, 简单 处理吗?

可以,你不要想怎么用Docker,你就想实际中怎么配置一台B就行,Docker只不过把原先的配置放容器里了

场景
现有:服务器A,服务器B,服务器C,
服务器A->服务器B: 可以通过ssh连接
服务器A->服务器C: 不可直连
服务器B->服务器C: 可直连
目标:A服务器通过服务器B来间接访问到服务器C上的应用
在B服务器上执行以下命令

ssh -fgNL {B服务器转发端口}:{C服务器IP地址}:{C服务器数据库服务端口} {B服务器ip地址}

示例

ssh -fgNL 39120:192.168.18.34:39120 127.0.0.1

参数说明

-f 后台运行
-g 所有ip请求的流量都进行转发
-N 只开启隧道,不开启ssh登录通道
-L 进行本地转发

关闭隧道

# 查找开启的进程
 ps aux | grep '{B服务器转发端口}:{C服务器IP地址}:{C服务器数据库服务端口} {B服务器ip地址}'
# 杀进程 如果进程号是1234
kill 1234

示例

[root@k8s-node-1 ~]# ps aux | grep 'ssh -fgNL 39120:192.168.18.34:39120 127.0.0.1'
root      8412  0.0  0.0  78812  1148 ?        Ss   14:23   0:00 ssh -fgNL 39120:192.168.18.34:39120 127.0.0.1
root      8504  0.0  0.0 112668   948 pts/2    S+   14:23   0:00 grep --color=auto ssh -fgNL 39120:192.168.18.34:39120 127.0.0.1
[root@k8s-node-1 ~]# kill 8412
3 个赞

b上安装socat,转发端口到 a 就行。
具体可以问 chatGPT

碰上大佬了,谢谢大佬

谢谢佬

不用再docker里面,我目前的思路就是B vpn建立信道,然后B上做路由表转发?

frp应该可以

1 个赞

我的意思是你先考虑一下如果不使用Docker,你要怎么配置B。用Docker的话,就是把这个过程移到配置Docker镜像里而已

1 个赞

嗯啊,明白了,谢谢佬

frp 只是转发吧,自身不带vpn协议,最好一个软件有这两个功能

自建tailscale中续服务?这样你三个电脑都在一个虚拟局域网里面了
有很多这样的教程

我去学学,佬

VPN 只有建立通道没有暴露端口能力,可以配合2个vpn实现。或者使用 ssh 或者 socks5 转发(需要在 3 台机子上都安装),在 B 机子上连接 A 端口并暴露端口给 PC 使用。

1 个赞

试试:
将此文件保存为 docker-compose.yaml
然后同目录执行: docker compose up -d

version: '3'

networks:
  vpn-network: # The bridge network we created earlier
    external: true # Tells docker that the network is pre-existing
    name: vpn-network

services:
  l2tp-vpn-client:
    image: r0hm1/l2tp-vpn-client:latest
    container_name: l2tp-vpn-client
    privileged: true
    cap_add:
      - NET_ADMIN

    networks:
      - vpn-network # The bridge network we created earlier

    ports: # Open every needed port to access web interfaces
      - 7860:7860 

    volumes:
      - /lib/modules:/lib/modules:ro

    environment:
      - VPN_SERVER_IPV4=IP # 替换为 L2TP 服务器 IP
      - VPN_PSK=
      - VPN_USERNAME=
      - VPN_PASSWORD=
      - TZ=Aisa/Shanghai
      - LAN=192.168.1.0/24 #替换为 L2TP 网段
    restart: unless-stopped

services:
  socat_proxy:
    image: alpine/socat
    command: socat TCP-LISTEN:7860,fork TCP:IP:7860 #替换为机器 A 的 VPN IP 
    network_mode: container:l2tp-vpn-client

然后 PC 可访问 B:7860 等效于 访问 A:7860

这么强的吗大佬,真心感谢,直接提供了配置文件