使用socat与dig在本地模拟DNS请求遇连接超时问题排查
socat转发DNS请求超时的问题分析
你的命令核心问题是协议不匹配:
- 你用
socat监听的是TCP端口15353,但把请求转发到了谷歌DNS的UDP端口53 - 而
dig +tcp发起的是TCP类型的DNS请求,谷歌DNS返回的UDP响应无法通过TCP连接回传给dig,导致dig一直收不到响应,最终超时
修正方案
方案1:转发TCP DNS请求(对应dig的+tcp参数)
把socat的转发目标改成TCP协议的谷歌DNS端口(DNS的TCP默认端口也是53):
socat -v -v TCP-LISTEN:15353,reuseaddr,fork TCP:8.8.8.8:53
此时再执行你原来的dig命令,就能正常收到响应。
方案2:转发UDP DNS请求(常规DNS请求)
如果不需要测试TCP DNS,可改为监听UDP端口,对应普通UDP DNS请求:
# 启动socat转发UDP流量 socat -v -v UDP-LISTEN:15353,reuseaddr,fork UDP:8.8.8.8:53 # 用dig发起UDP请求(去掉+tcp参数) dig example.com @localhost -p 15353
内容的提问来源于stack exchange,提问作者Jia
相关产品推荐
相关产品推荐

