反向SSH隧道为何绑定IPv6地址?如何切换为IPv4?
SSH反向代理绑定IPv6而非IPv4的原因及解决办法
原因
- SSH反向代理未指定监听地址时,默认遵循sshd的配置策略:若系统开启IPv6支持,且sshd配置中
AddressFamily设为默认的any,或ListenAddress包含::(IPv6任意地址),SSH会优先创建IPv6套接字。 - 部分系统中
localhost解析优先返回::1(IPv6回环地址),导致反向代理绑定到IPv6回环。另外,Linux下默认tcp6类型的套接字若未开启IPV6_V6ONLY选项,其实也能接收IPv4连接,只是netstat显示为tcp6。
解决办法
- 强制指定IPv4监听地址:修改反向代理命令,明确绑定IPv4的任意地址或具体地址,比如:
这样会在Machine2上绑定IPv4的0.0.0.0:15,之后用ssh -R 0.0.0.0:15:localhost:15 Machine2-IPv4telnet Machine2-IPv4 15即可连通。 - 调整sshd配置:编辑Machine2上的
/etc/ssh/sshd_config:- 将
AddressFamily改为inet,限制sshd仅处理IPv4连接; - 或添加
ListenAddress 0.0.0.0,让sshd只监听IPv4地址,重启sshd服务生效。
- 将
- 验证兼容性:如果只是netstat显示
tcp6,可以先测试telnet Machine2-IPv4 15,若能连通说明套接字兼容IPv4,无需修改也能满足需求。
内容的提问来源于stack exchange,提问作者nadirg
相关产品推荐
相关产品推荐

