Hi, Sorry for late reply... :(
Before sk->prot->connect(=tcp_v4_connect) to server setted tproxy like below :
memset(itp, 0x00, sizeof(struct in_tproxy)); memcpy(&(itp->itp_faddr.s_addr), &(client->sk->daddr), sizeof(struct in_addr)); itp->itp_fport = 0; memcpy(&(server->sk->rcv_saddr), &(client->sk->saddr), sizeof(struct in_addr));
tperr = sk->prot->setsockopt(sk, SOL_IP, IP_TPROXY_ASSIGN, (char *)itp, sizeof(struct in_tproxy)); flags = ITP_CONNECT; tperr = sk->prot->setsockopt(sk, SOL_IP, IP_TPROXY_FLAGS, (char *)&flags, sizeof(int));
And after tcp_close, unsetted tproxy like below :
tperr = sk->prot->setsockopt(sk, SOL_IP, IP_TPROXY_UNASSIGN, NULL, 0);
And configured iptable :
iptables -t nat -A PREROUTING -p tcp -d 10.1.1.10 --dport 80 -j REDIRECT -- to-port 80
Looks OK.
I configured my transparent proxy box(has 1 network interface card) with Layer-4 switch(for Cache-Redirect). Just started, Tproxy working fine. Few minutes later, Tproxy send packet with other's foreign address to destination host irregularly. But client received response exactly. When that appeared, my reverse proxy box has 4000 established TCP server connections and hash table size was same.
Could you describe your network setup a bit more? -- Regards, Krisztian KOVACS