如何通过 ssh 隧道访问内部的 ipv6 本地地址的服务

2022-04-25 15:21:12 +08:00
 xavierskip
             ┌─────────────────┐
             │                 │
             │        [fe80::/10]
   ┌───┐ ssh │ ┌───┐    ┌────┐ │
   │ A ├─────┼─┤ B │    │ C  │ │
   └───┘     │ └─┬─┘    └──┬─┘ │
             │   │         │   │
             │  ┌┴─────────┴─┐ │
             │  │   switch   │ │
             │  └────────────┘ │
             │                 │
             └─────────────────┘

设备 A 通过 ssh 访问设备 B ( ipv4 网络)。

在设备 B 同一个交换机下有一个设备 C ,可以通过 ipv6 链路本地地址来访问服务。

为什么要使用 ipv6 地址来访问?

因为有很多种内部网络要访问,不同的网络网段也不同,内部网络也没有 dhcp ,还要手动设置网络,索性就不设 ipv4 地址直接用 ipv6 地址来访问了,这样拿笔记本插网线直接接入网络来访问还不用改电脑的 ip 设置了。

尝试失败

现在我可以 ssh 登录到设备 b 上通过 ipv4 地址。 在设备 B 上我可以用 ipv6 访问到设备 c

$ ping -I eth0 -6 fe80::b605:5dff:febe:ee5c
PING fe80::b605:5dff:febe:ee5c(fe80::b605:5dff:febe:ee5c) from fe80::9f97:e7:6275:3617%eth0 eth0: 56 data bytes
64 bytes from fe80::b605:5dff:febe:ee5c%eth0: icmp_seq=1 ttl=64 time=0.311 ms

$ curl "http://[fe80::b605:5dff:febe:ee5c]/" --interface eth0
<HTML><BODY><H1>301 Moved Permanently</H1></BODY></HTML>

就是说 B 到 C 是可以通过 ipv6 访问的。

然后我想以 B 作为跳板机在外部网络来访问设备 C ,但是尝试失败了。

首先我在设备 A 上访问设备 B 。

$ ssh hostB -D 9019

然后给浏览器代理插件设置好 socket 代理,测试一下,内部网络的几个 ipv4 服务倒是可以通过代理访问,但是这个 ipv6 地址的服务无法访问。不清楚哪里出了问题?

在网络上搜索了一番,类似的需求里,有提到了 socat 这个工具,但是我也不知道该如何使用。

545 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/849168

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX