Well, I can try to make a patch for this... Two questions:
1. I should send it to squid-dev, do I?
2. Source code for which version should I use: 4.0 or 3.5?

14.02.2017, 04:59, "Amos Jeffries" <squ...@treenet.co.nz>:
> On 14/02/2017 1:18 a.m., Alex wrote:
>>    Well, actually it looks like a bug in squid to me. Some points:
>>
>>  1. When client connects with active FTP mode, squid opens a local socket 
>> and tries to assign server's IP address to it. So far so good, however this 
>> doesn't work (tested in both 'intercept' and 'tproxy' modes):
>>
>>     2017/02/13 14:58:51.234| 50,3| comm.cc(347) comm_openex: comm_openex: 
>> Attempt open socket for: 172.17.10.30
>>     2017/02/13 14:58:51.234| 50,3| comm.cc(388) comm_openex: comm_openex: 
>> Opened socket local=172.17.10.30 remote=[::] FD 17 flags=1 : family=2, 
>> type=1, protocol=6
>>     2017/02/13 14:58:51.234| 5,5| comm.cc(420) comm_init_opened: 
>> local=172.17.10.30 remote=[::] FD 17 flags=1 is a new socket
>>     2017/02/13 14:58:51.234| 51,3| fd.cc(198) fd_open: fd_open() FD 17
>>     2017/02/13 14:58:51.234| commBind: Cannot bind socket FD 17 to 
>> 172.17.10.30: (99) Cannot assign requested address
>>
>>  2. Ok, we've got the errno. Let's look in comm_apply_flags(). There's 
>> something like this in the middle:
>>
>>      /* MUST be done before binding or face OS Error: "(99) Cannot assign 
>> requested address"... */
>>      if ((flags & COMM_TRANSPARENT)) {
>>          comm_set_transparent(new_socket);
>>      }
>>
>>      This means that socket is not IP_TRANSPARENT and can not be bound to 
>> arbitrary IP address ('net.ipv4.ip_nonlocal_bind' can fix bind(), but 
>> connect() will obviously fail with EINVAL).
>>
>>  3. Let's take a look on Ftp::Server::createDataConnection():
>>
>>      Comm::ConnectionPointer conn = new Comm::Connection();
>>      conn->flags |= COMM_DOBIND;
>>
>>      // Use local IP address of the control connection as the source address
>>      // of the active data connection, or some clients will refuse to accept.
>>      conn->setAddrs(clientConnection->local, cltAddr);
>>
>>      Fine, looks reasonable. However, connection has only COMM_DOBIND flag, 
>> COMM_TRANSPARENT is missing. AFAIU, we'll never be able to bind and connect 
>> a socket...
>
> Good catch. Thank you.
>
> So AFAICS,
> * NAT intercept needs to listen on the local IP of the Squid->server
> control connection.
> * TPROXY needs to listen on the local IP of the client->Squid control
> connection plus the TRANSPARENT flag.
>
> Any chance of a patch?
>
> Amos
>
> _______________________________________________
> squid-users mailing list
> squid-users@lists.squid-cache.org
> http://lists.squid-cache.org/listinfo/squid-users
_______________________________________________
squid-users mailing list
squid-users@lists.squid-cache.org
http://lists.squid-cache.org/listinfo/squid-users

Reply via email to