[tproxy] Tproxy + Squid 2.6
Enrico Demarin (home)
enricod at videotron.ca
Fri Sep 15 04:27:03 CEST 2006
Hi Everyone,
still not working for some reason but the squid messages are gone :
the rcv_saddr seems to be only set to something else than 0.0.0.0 if an
explicit acl is set in squid.conf, in my case
acl enri src 10.0.0.0/255.0.0.0
tcp_outgoing_address 10.0.0.1 enri
this will force the clients from 10.0.0.0/16 to go out as 10.0.0.1, and
the TPROXY_ASSIGN will succeed
I see the answer coming back from the gateway but it's still not loading
the page however.
- Enrico
Enrico Demarin (home) wrote:
> Correction, tproxy seems to return -EINVAL because rcv_saddr is 0, not
> sk->sport
>
>
> - Enrico
>
> Enrico Demarin (home) wrote:
>> I was looking at the squid error log and at tproxy source :
>>
>> in iptable_tproxy_c:
>>
>> static int
>> ip_tproxy_setsockopt_assign(struct sock *sk, int proto, struct
>> in_tproxy *itp)
>> {
>> ...
>> if (!sk->rcv_saddr || !sk->sport)
>> return -EINVAL;
>>
>>
>> In the squid log :
>>
>> 2006/09/15 00:09:14| tproxy ip=10.0.0.200,0xc800000a,port=0 ERROR ASSIGN
>> 2006/09/15 00:09:14| tproxy ip=10.0.0.200,0xc800000a,port=0 ERROR ASSIGN
>>
>> and in squid's src/forward.c
>>
>> static void
>> fwdConnectStart(void *data)
>> {
>> ...
>> itp.op = TPROXY_ASSIGN;
>> if (setsockopt(fd, SOL_IP, IP_TPROXY, &itp, sizeof(itp))
>> == -1) {
>> debug(20, 1) ("tproxy ip=%s,0x%x,port=%d ERROR ASSIGN\n",
>> inet_ntoa(itp.v.addr.faddr),
>> itp.v.addr.faddr.s_addr,
>> itp.v.addr.fport);
>>
>> It seems squid sends a ftport == 0 and tproxy returns -EINVAL. I will
>> look more into it tomorrow but in the mean time, does anyone have an
>> idea why ?
>>
>> - Enrico
>>
>>
>> Enrico Demarin (home) wrote:
>>>> / However Squid doesnt seem to able to spoof the original IP:
>>> /
>>>> tproxy needs CAP_NET_ADMIN. Which you do not have when running in
>>>> unprivileged mode. And running in privileged mode (root) is
>>>> inhibited by squid.
>>>
>>>> / Did any one get squid+cttproxy to work on a bridge ? What am I
>>>> missing
>>> />/ ?
>>> /
>>>> Something that gives your squid user the CAP_NET_ADMIN capability.
>>>
>>> Doesnt this do it ( squid 2.6, tools.c ) ? I added a debug message
>>> and it's printed during init however i still get the ERROR ASSIGN
>>> messages.
>>>
>>>
>>> #if LINUX_TPROXY
>>> if (need_linux_tproxy) {
>>> cap_user_header_t head = (cap_user_header_t) xcalloc(1,
>>> sizeof(cap_user_header_t));
>>> cap_user_data_t cap = (cap_user_data_t) xcalloc(1,
>>> sizeof(cap_user_data_t));
>>>
>>> head->version = _LINUX_CAPABILITY_VERSION;
>>> head->pid = 0;
>>> cap->inheritable = cap->permitted = cap->effective = (1 <<
>>> CAP_NET_ADMIN) + (1 << CAP_NET_BIND_SERVICE) + (1 <<
>>> CAP_NET_BROADCAST);
>>>
>>>
>>> if (capset(head, cap) != 0) {
>>> xfree(head);
>>> xfree(cap);
>>> fatal("Error giving up capabilities");
>>> }
>>> debug(50,0) ("Caps set to %x",cap->effective);
>>> xfree(head);
>>> xfree(cap);
>>> }
>>> #endif
>>>
>>>
>>> _______________________________________________
>>> tproxy mailing list
>>> tproxy at lists.balabit.hu
>>> https://lists.balabit.hu/mailman/listinfo/tproxy
>>>
>>>
>>
>>
>>
>
>
>
More information about the tproxy
mailing list