多重 SSH TCP 隧道转发
熟悉我的人都知道,我的 homelab 网络环境灵车
过时记录
这套东西我从2020年用到现在,已经再熟悉不过了。
但因为这是2025年年末,所以是非常晚来的一篇 blog 来记录。
我们可以到处用到这个东西,适用面比较广,在遇到一些情况的时候……
ssh tcp 转发
几个例子
使用了 Django 写了点东西,交给客户看,然而 dev server 在家(可以使用
frp/tailscale转出来),到了客户公司,怎么给他们看呢?访问开了 http 的端口。使用 Tailscale 时,正常直接使用分配的100开头ip+端口就好了;在使用 frp 时,转发对应的端口就好……
问题在于 Django 的 dev server 默认有一个ip限制,在白名单之外的 ip 都不让访问,返回 HTTP 403。
既然这样,如果没有提前修改白名单,这时候就不能以正常方式访问了。使用了 docker 部署的 natfrp launcher,想访问 web 控制台。
同理正常应该如上的方式访问7102端口,不过 launcher 限制只允许来自 localhost/127.0.0.1 的访问。
如上,会返回 HTTP 400.
使用
转发的方式非常简单。只要能 ssh 连上远程的机器,就可以进行。
1 | |
如上面的第二个例子,我需要将远程的7102转到本地的7102端口上,那么:
1 | |
如果端口号小于1024,是一个已知端口,需要高权限才能创建转发。使用 root 权限
远程的用户必须具有使用 ssh 命令的能力,所以 login shell 不能是 nologin.
如果你使用某些共享 ip 的 frps,这些路子比较多日后再讨论。不过提供参考:
1 | |
区别就是加入了指定端口。
1 | |
多重转发
背景
这里也是在上文中使用 natfrp launcher 的过程中发生的事。
我有一台机器(A)有 Tailscale,另一台(B)没有。
A 是 headless 机器,我不能直接转发在它上面使用浏览器,也不能在 B 上使用浏览器访问这台机器的7102,因为 B 的 ip 不是 127.0.0.1(废话!)
假设 A : 192.168.114.51
实际操作
既然 remote 的7102被映射到了 A 的7102上,那么我们可以把 A 的7102再映射到 B 的7102上(实际,不一定要7102)。
在 ssh -L 执行时,会进入 shell 已经是最基础的了。
1 | |
这样,remote 的7102开的 control panel 会认为是从 localhost 来的流量,也就会放行了。