关于 Proxy Protocol

在生产环境中,Load Balancer 相当重要。常见硬件有 F5,软件有 LVS,或者更偏应用层的 HAProxy。

但实际运用中,怎么把 source ip/port 传递给后端的 real server 是一个大问题。因为realserver通常是需要这些信息用来记日志,或者安全防护策略应用之类。。。

如果是 F5,需要 real server 把自己的 default gateway 指向过去;如果是 LVS/HAProxy 也类似,需要LB服务器打开 TPROXY 内核选项,同时 realserver 有网段的限制。

上述的方案虽然透明,但是对网络结构有特殊要求,所以后来 HAProxy 的作者提出了 Proxy Protocol

现在至少 Postfix 2.10,甚至 Haraka 都能支持这个协议了。

HAProxy 很值得尝试

评论

这个有误吧。源IP和端口,过LVS是不会被修改的;对于反响代理,CDN之类的应用层,源IP和端口一般会放在HTTP头(新增)里面

理想环境里,LVS一切都好。但是在实际网络环境中,未必能把服务器和LVS放在同一个网段里面

内网嵌套内网,只会对外网进来的请求包多做一次DNAT。好奇什么场景下会做SNAT,从而丢失请求包的源IP和源端口。

因为俺们没有管理机架、管理私网IP的权力,都是提交请求,等待分配。假如 LVS、realserver 都不是在一个路由器下,也不能随意更改网卡相关配置的话,我觉得已知的3种LVS工作模式应用都有问题。也可能是我的理解有误,因为我也不是直接面对运维,没有实际配置系统好多年了。从程序员的角度看,proxy protocol 这种工作在应用层的玩意儿就完全消除了IP层不可控的困境