Search squid archive

Re: Squid TCP_TUNNEL_ABORTED/200

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 4/05/24 02:29, Emre Oksum wrote:
Hi everyone,

I'm having a issue with Squid Cache 4.10 which I cannot fix for weeks now and kinda lost at the moment. I will be appreciated if someone can guide me through the issue I'm having. I need to create a IPv6 HTTP proxy which should match the entry address to outgoing TCP address. For example, if user is connecting from fe80:abcd::1 it should exit the HTTP proxy from the same address. We got like 50k addresses like this at the moment.

What your "for example,..." describes is Transparent Proxy (TPROXY).


However, what you have in the config below is very different. The IP the client is connected **to** (not "from") is being pinned on outgoing connections.


The issue is, client connecting to the proxy is receiving "EOF" or "FLOW_CONTROL_ERROR" on their side.

The FLOW_CONTROL_ERROR is not something produced by Squid. Likely it comes from the TCP stack and/or OS routing system.

The EOF may be coming from either Squid or the OS. It also may be perfectly normal for the circumstances, or a side effect of an error elsewhere.


To solve will require identifying exactly what is sending those signals, and why. Since they are signals going to the client, focus on the client->Squid connections (not the Squid->server ones you talk about testing below).



When I test connection by connecting to whatismyip.com <http://whatismyip.com> everything works fine and entry IP always matches with outgoing IP for each of the 50k addresses. Client tells me this problem occurs both at GET and POST requests with around 10 MB of data.

Well, you are trying to manually force certain flow patterns that prohibit or break some major HTTP performance features. Some problems are to be expected.

The issues which I expect to occur in your proxy would not show up in a trivial outgoing-IP or connectivity test.


I initially thought that could be related to server resources being drained but upon inspecting server resource usage, Squid isn't even topping at 100% CPU or RAM anytime so not that.


IMO, "FLOW_CONTROL_ERROR" is likely related to quantity of traffic flooding through the proxy to specific origin servers.

The concept you are implementing of the outgoing TCP connection having the same IP as the incoming connection reduces the available TCP sockets by 25%. Prohibiting the OS from allocating ports on otherwise unused outgoing addresses when



My Squid.conf is like this at the moment:

Some improvements highlighted inline below.
Nothing stands out to me as being related to your issues.


auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
acl auth_users proxy_auth REQUIRED
http_access allow auth_users
http_access deny !auth_users

Above two lines are backwards. Deny first, then allow.


cache deny all
dns_nameservers <nameservers here>
dns_v4_first off
via off
forwarded_for delete
follow_x_forwarded_for deny all
server_persistent_connections off

*If* the issue turns out to be congestion on Squid->server connections
enabling this might be worthwhile. Otherwise it should be fine.


max_filedesc 1048576

You can remove that line. "max_filedesc" was a RedHat hack from 20+ years ago when the feature was experimental.

Any value you set on the line above, will be erased and replaced by the line below:


max_filedescriptors 1048576
workers 8
http_port [::0]:1182

Above is just a complicated way to write:

 http_port 1182


Any particular reason not to use the registered port 3128 ?
(Not important, just wondering.)


acl binding1 myip fe80:abcd::1
tcp_outgoing_address fe80:abcd::1 binding1
acl binding2 myip fe80:abcd::2
tcp_outgoing_address fe80:abcd::2 binding2
acl binding3 myip fe80:abcd::3
tcp_outgoing_address fe80:abcd::3 binding3
...
...
...
access_log /var/log/squid/access.log squid

cache_store_log none

You can erase this line.
This is default setting. No need to manually set it.


cache deny all

You can erase this line.
This "cache deny all" exists earlier in the config.



I've tried to get a PCAP file and realized when client tries to connect with a new IPv6 address, Squid is not trying to open a new connection instead tries to resume a previously opened one on a different outgoing IPv6 address.

Can you provide the trace demonstrating that issue?

Although, as noted earlier your problems are apparently on the client connections. This is about server connections behaviour.


I set server_persistent_connections off which should have disabled this behavior but it's still the same.

Nod. Yes that should forbid re-use of connections.

I/we will need to see the PCAP trace along with a cache.log generated using "debug_options ALL,6" to confirm a bug or identify other breakage though.



I tried using a newer version of Squid but it behaved differently and did not follow my outgoing address specifications and kept connecting on IPv4.

That would seem to indicate that your IPv4 connectivity is better than your IPv6 connectivity. Later Squid use various "Happy Eyeballs" implementations for the server selection.

You can usually work around this by configuring the DNS server specified by dns_nameservers to only deliver IPv6 results when a mixed set are available.


HTH
Amos
_______________________________________________
squid-users mailing list
squid-users@xxxxxxxxxxxxxxxxxxxxx
https://lists.squid-cache.org/listinfo/squid-users



[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux