sshuttle连接失败求助:执行命令时遇nft文件不存在报错
sshuttle 使用 nft 方法时文件不存在错误的解决办法
问题详情
执行 sshuttle -r hopper 10.0.0.0/8 时触发错误,当前环境为 sshuttle@1.1.1、Python@3.10.7。已尝试重装sshuttle、Python及切换网络,问题未解决。运行 sshuttle -r hopper 10.10.0.0/16 -v 后,核心报错如下:
fw: nft add table inet sshuttle-ipv6-12300 Error: File /Users/arjun/inet does not exist. at Job.emitDependency (/Users/arjun/node_modules/@vercel/nft/out/node-file-trace.js:280:23) at async Promise.all (index 0) at async Object.nodeFileTrace (/Users/arjun/node_modules/@vercel/nft/out/node-file-trace.js:32:5) at async cli (/Users/arjun/node_modules/@vercel/nft/out/cli.js:28:58)
问题根源
报错是因为环境中安装了 vercel/nft(Node.js 文件依赖追踪工具),它的命令名 nft 和系统原生的 nftables 命令冲突。系统优先识别了 vercel/nft,导致 sshuttle 执行防火墙配置时,把 nft 命令里的 inet(nftables 的地址族标识)误当成了本地文件路径。
解决办法
指定原生nft命令路径:
找到系统原生nft命令的位置(通常是/usr/sbin/nft),通过--firewall-cmd参数强制 sshuttle 使用该路径:sshuttle -r hopper 10.10.0.0/16 -v --firewall-cmd /usr/sbin/nft临时调整PATH优先级:
运行 sshuttle 前,将系统命令目录放到 PATH 最前端,确保优先识别原生 nft:PATH=/usr/sbin:$PATH sshuttle -r hopper 10.10.0.0/16 -v修改vercel/nft命令别名:
若需长期使用 vercel/nft,可将其命令重命名(比如nft-node),避免和系统命令冲突,具体操作参考该工具的文档。切换sshuttle防火墙方法:
避开 nft 方法,改用 macOS 原生的pf或其他支持的方法:# 使用pf方法 sshuttle -r hopper 10.10.0.0/16 -v --method pf
内容的提问来源于stack exchange,提问作者Arjun Mudhaliyar
相关产品推荐
相关产品推荐

