Nécessite CAP_NET_ADMIN (12) On peut donc aussi mettre CAP_NET_BIND_SERVICE (10) pour autoriser les ports < 1024 charger le module : # modprobe ip_conntrack hashsize=65536 # modprobe iptable_tproxy hashsize=65536 # echo 15 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait # echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait Si on utilise "usesrc client", alors on rencontre ce problème en cas de réutilisation d'un port : # dmesg IP_TPROXY: error applying NAT mapping, hooknum=4 0103000a:e5a2 -> 05000001:d204 IP_TPROXY: error applying NAT mapping, hooknum=4 0103000a:e5a2 -> 05000001:d204 Solution retenue pour la configuration : You have to write "usesrc XXXX" on the "source" line. "XXXX" is either an IP address or the keyword "clientip" to reuse the client's IP with a dynamically allocated port, or "client" to reuse both the client's IP and port (dangerous). But due to the way cttproxy works, the source address is mandatory. Eg: backend static source 192.168.1.254 usesrc clientip server static1 192.168.1.10 source 192.168.1.254 usesrc clientip ---- Anciennes réflexions ---- Il faudrait donc peut-être toujours avoir un port dynamique, ou bien traiter le TIME_WAIT correctement en appliquant natdel => corrige pratiquement toujours le problème (mais réduire les timeouts semble important) source 10.1.2.3 present 10.2.3.4 source 10.1.2.3 present same_ip source 10.1.2.3 present same source 10.1.2.3:5000 present same source 10.1.2.3 appear_as 10.2.3.4 source 10.1.2.3 appear_as same_ip source 10.1.2.3 appear_as same source 10.1.2.3:5000 appear_as same source 10.1.2.3 {keepsrc | keepip | usesrc 1.2.3.4} source 10.1.2.3 snat { client | clientip | 1.2.3.4 } source 10.1.2.3 extbind same source 10.1.2.3 intercept same source 10.1.2.3 spoof same source 10.1.2.3 showsrc same source 10.1.2.3 usesrc same source 10.1.2.3 setsrc same source 10.1.2.3 withsrc same source 10.1.2.3 usesrc clientip:sameport source 10.1.2.3 alias same source 10.1.2.3 as same source 10.1.2.3 outgoing same source 10.1.2.3 public same source 10.1.2.3:5000 pretend same source 10.1.2.3=same source 10.1.2.3=10.2.3.4 source 10.1.2.3^same source 10.1.2.3^10.2.3.4 source 10.1.2.3@same source 10.1.2.3@10.2.3.4 source 10.1.2.3!same source 10.1.2.3!10.2.3.4 source 10.1.2.3|same source 10.1.2.3|10.2.3.4 source 10.1.2.3(same) source 10.1.2.3(10.2.3.4) source 10.1.2.3~same source 10.1.2.3~10.2.3.4 A l'inverse, si "source" contient l'adresse vue : source same bindto 1.2.3.4 source 2.3.4.5 bindto 1.2.3.4 Problème: si "bindto" est oublié, le bind sur 2.3.4.5 ne fonctionnera pas. Pour l'adresse de listen (avec "bind"), il serait bien que l'adresse translatée apparaisse au même niveau que l'IP afin que les plages et listes continuent de fonctionner par association. Différences entre source et bind : - source: 1 seule IP source, éventuellement un port, plus tard une plage - bind : liste de (IP source facultatives, port obligatoire, parfois une plage)