1,问题背景。
在阿里ECS上调用第三方短信接口,始终无法成功。接口不是IP地址,而是一个带域名的 URL接口。
2,问题原因
网络调测,首先便是两头一掐,确认别人根本没有收到我的请求,于是开始分析我发出去的报文。
根据发送请求返回的错误码,说是主机名无法解析。我用curl发送的请求,首先是百度一番,还真有人同样的错误码,但细一瞅,就觉得大不同,别人是什么IPV6影响。
我这个都没启动IPV6了。我 寻思 ,既然短信包发不出去,就curl下其它域名网站,百度主页简单,就拿它测试吧。果然不行,证实所有的域名解析都无法成功。
我自然想到了端口限制,为 了安全,配置了server的iptables策略。先证实下是不是这个原因。直接如下命令停用防火墙:service iptables stop,再运行程序,OK啦。
知道原因后,心中也不慌了,找资料得知域名解析用的53端口,于是iptables命令加上53端口(如下UDP和TCP都加满)。
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
满以为事情就OVER了,谁知只要启动iptables就不行。依然报域名无法解析。给阿里提了工单,答复如下:
心想,把所有input的端口都要放开,那安全控制咋整。先不管,按别人说的,执行iptables命令,把input的udp端口都放行,output和forward也不管。
结果是居然还不行,依然是域名无法解析,发送http请求,就卡在那了。阿里技术客服发来杀手锏:
既然iptables把input的udp端口都放开了 ,为什么还不行了,难道域名解析还涉及到其他一些TCP端口,或者说我的UDP放行有问题。
而且端口都放开,iptables的 安全也没有意义了。比较好的解决方法是放行这个请求相关的连接响应报文。
iptables早就考虑了这一想法。我把如下命令加入到filter中,试过一切OK
3,知识延续
下面命令是启动和停用iptables,save是把策略保存到/etc/sysconfig/iptables里面,每次start直接从这个配置文件里面加载策略。
service iptables start
service iptables stop
service iptables save
一般input配置drop,output和forward配置accept,严格的 话也可配drop。
要注意的是:input配置drop,把ssh远程的自己也档在门外了,默认是22端口,如果server都 连不上,那就无语了....
所以最好是直接vi在etc/sysconfig/下的iptables配置文件,把22端口给予放行,然后再慢慢玩。
#iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT/DROP]
#iptables [-AI 链] [-io 网卡接口] [-p 协议] [-s 源ip/网段] [-d 目标ip/网段] -j [ACCEPT/DROP]
另外还了解到nscd服务,这个是域名解析的缓存,有了它,调用带域名的url接口会快很多(海量请求时)。
在阿里ECS上配置iptables后,遇到域名解析失败的问题。通过停止iptables服务确认问题源头,发现是iptables未开放DNS解析所需的53端口。尝试添加规则允许53端口的UDP和TCP通信,但问题仍然存在。阿里技术支持建议放开所有输入UDP端口,但问题仍未解决。最终,了解到iptables配置策略和nscd服务对域名解析速度的影响。
1389

被折叠的 条评论
为什么被折叠?



