socket选项IP_TRANSPARENT简单介绍

socket选项IP_TRANSPARENT简单介绍,第1张

在使用 Keepalived 部署DNS(nsd)高可用集群时,不使用LVS,仅仅使用 Keepalived 实现双主模式,在另外一台服务器发起dig,出现 reply from unexpected source 。

;; reply from unexpected source: 19216803#53, expected 192168051#53

192168051 未VIP, 19216803 为网卡原始ip
在服务器上抓包,的确收到目的地址为 192168051 的报文,但是回复报文的源IP却变为 19216803 ,但是奇怪一点的是使用tcp模式发起dig请求却是正常的。

经过网络了解,发现有个socket选项 IP_TRANSPARENT 是针对类似问题,查看 Linux manual 有:

简单来说, 使用这个选项可以socket绑定一个非本地的地址 ,实现所谓的透明代理(TProxy, Transparent Proxy),通过 Keepalived 实现IP漂移时,VIP就是一个 nonlocal IP ,这段文字还是很难理解,包括解释不了为什么TCP可以而UDP却不可以的疑问,不过可以参考 PowerDNS 的一篇文章 Linux transparent proxy support ,解释的比较清楚。

发现使用了 IP_TRANSPARENT 可以绑定任意一个IP地址,包括 8888 从而实现流量拦截。

nsdconf配置里有IP_TRANSPARENT的选项,

配置了重启nsd,再次dig就不会出现之前描述的问题,并且需要注意的是使用 IP_TRANSPARENT 监听IP列表里必须指明VIP列表,否则还是会出现问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zz/13497332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-19
下一篇 2023-08-19

发表评论

登录后才能评论

评论列表(0条)

保存