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)

