Dnat VS Redirect VS Tproxy
2020-02-15 本文已影响0人
clive0x
最近在看Envoy文档,看到Tproxy不认识,找资料记录一下:
Dnat:通过iptable nat表变更目标IP和PORT,需要修改数据包,走IPTABLE需要过内核。
Redirect:特殊的Dnat,只变更目标端口,这种场景下只有两台机器通讯。
TPROXY:开启TCP/IP IP_TRANSPARENT标志,数据在两个SOCKTS间复制,proxy服务器连接如下:
proxy_ip:proxy_port downstream_ip:downstream_port (pid=xxx,fd=5)
downstream_ip:downstream_port upstream_ip:upstream_port(pid=xxx,fd=6)
关键在与upstream host连接时,使用downstream ip and port,just like proxy (envoy) not exits.
这种场景不走kernel,不需要开启ip_forward,不需要开启connection_tracking。
Envoy文档提及SO_ORIGINAL_DST TCP/IP SO OPTIONS,这个参数只能用于DNAT及其变种REDIRECT模式,不能用于TPROXY模式。用于获取需要重定向的目标地址。
source http://gsoc-blog.ecklm.com/iptables-redirect-vs.-dnat-vs.-tproxy/