SSH SOCKS 转发与 TUN 设备错误是两回事
即使同一 SSH 会话之后无法创建单独的 TUN 设备,也能识别已经建立的 SOCKS 监听。
这两条观察可以同时出现在一份 SSH 日志里:
Local forwarding listening on 127.0.0.1 port 1080.
Tunnel device open failed.
第一条关于动态 SOCKS 监听。第二条关于隧道网络设备。它们是两个不同的转发请求。
OpenSSH 用 -D 做应用层动态转发,用 -w 处理隧道设备。Tunnel 设置也能通过配置文件请求后者。拿不到 TUN 设备所需的权限或服务端许可,本身并不能证明此前的 SOCKS 监听从未建立。
先看报错之前成功了什么:SSH 认证、监听建立,以及之后的任何目标通道请求。正在监听的 SOCKS 端口仍然需要兼容的客户端和可达、被允许的目标。它只是某一个阶段的证据。
如果要做的事情只是 SOCKS 转发,就查清为什么还会请求隧道设备。收窄后的配置可以关掉这个无关请求:
ssh -N -o Tunnel=no -D 127.0.0.1:1080 [email protected]
保留常规的 SSH 主机密钥与账户校验。仅仅为了让一个 SOCKS 路径并不需要的功能不再报错,就去授予网络设备权限,是没有理由的。