┌─────────────────┐
│ │
│ [fe80::/10]
┌───┐ ssh │ ┌───┐ ┌────┐ │
│ A ├─────┼─┤ B │ │ C │ │
└───┘ │ └─┬─┘ └──┬─┘ │
│ │ │ │
│ ┌┴─────────┴─┐ │
│ │ switch │ │
│ └────────────┘ │
│ │
└─────────────────┘
设备 A 通过 ssh 访问设备 B ( ipv4 网络)。
在设备 B 同一个交换机下有一个设备 C ,可以通过 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 这个工具,但是我也不知道该如何使用。