We use the squid cache at the office to improve web performance, and to provide basic limits on web traffic (e.g., blocking access to some well-known spyware download URLs). During a recent upgrade we rebuilt the proxy machine from scratch, using Fedora Core 2 instead of OpenBSD. We chose Linux to reduce the number of OSes we support by one.
After the upgrade, we noticed that some web sites begain failing, including the RNAO’s site, which drew a lot of complaints from nurses. The quick fix was to add problem sites to the list of sites that bypassed the proxy while we looked into the root cause. As it turns out it was fairly simple, and documented in the Linux kernel configuration documentation:
CONFIG_INET_ECN:
Explicit Congestion Notification (ECN) allows routers to notify clients about network congestion, resulting in fewer dropped packets and increased network performance. This option adds ECN support to the Linux kernel, as well as a sysctl (/proc/sys/net/ipv4/tcp_ecn) which allows ECN support to be disabled at runtime.
Note that, on the Internet, there are many broken firewalls which refuse connections from ECN-enabled machines, and it may be a while before these firewalls are fixed. Until then, to access a site behind such a firewall (some of which are major sites, at the time of this writing) you will have to disable this option, either by saying N now or by using the sysctl.
Adding echo "0" >/proc/sys/net/ipv4/tcp_ecn to the startup scripts fixed the problem.
It seems that some firewalls, including PIXs running older software versions, send a RSET in response to tcp connections with ECN bits set.