<div dir="ltr">Hello,<div><br></div><div>I am experiencing an issue with squid 3.5.5 and FreeBSD 10.1 where tcp_outgoing_address correctly rewrites the source address of outgoing packets, but fails to bind the socket to the correct interface. I've been using this kind of setup/configuration for quite some time (since the squid 2.7 days), so I believe something between squid 3.3 and squid 3.5 has broken this behavior, or it is a problem with FreeBSD 10.x that I do not understand. FWIW squid 3.3.3 on FreeBSD 9.x behaves correctly with the same config.</div><div><br></div><div>I've been able to replicate this on a non-production VM with a simple config. For example, I have two WAN interfaces: WAN1 (em0/<a href="http://192.168.92.246">192.168.92.246</a>) and WAN2 (em1/<a href="http://10.8.8.10">10.8.8.10</a>), and a LAN interface (em2/<a href="http://192.168.5.1/24">192.168.5.1/24</a>). My default route points to the gateway for WAN1/em0. I have configured a tcp_outgoing_address for a single host on the LAN (192.168.5.2) to use outgoing address 10.8.8.10 (WAN2/em1). HTTP request packets from squid end up going out em0 (the default route interface) with an ip of 10.8.8.10. The source IP is correct but the packets egress the wrong interface, so they are obviously dropped by the upstream router on that incorrect interface.</div><div><br></div><div>The following is my test squid.conf and some basic network config. While I normally use squid as a transparent proxy in conjunction with the PF firewall and routing enabled, for the purposes of replicating the issue in my VM test environment I have disabled PF, routing, and connected directly to squid via my browser's proxy config. Attempts to load webpages time out unless I remove use of the tcp_outgoing_address directive.</div><div><br></div><div># begin test squid.conf<br></div><div><br></div><div><div>acl SSL_ports port 443</div><div>acl Safe_ports port 80          # http</div><div>acl Safe_ports port 21          # ftp</div><div>acl Safe_ports port 443         # https</div><div>acl Safe_ports port 70          # gopher</div><div>acl Safe_ports port 210         # wais</div><div>acl Safe_ports port 1025-65535  # unregistered ports</div><div>acl Safe_ports port 280         # http-mgmt</div><div>acl Safe_ports port 488         # gss-http</div><div>acl Safe_ports port 591         # filemaker</div><div>acl Safe_ports port 777         # multiling http</div><div>acl CONNECT method CONNECT</div><div><br></div><div>http_access allow localhost manager</div><div>http_access deny manager</div><div>http_access deny !Safe_ports</div><div>http_access deny CONNECT !SSL_ports</div><div><br></div><div>http_access allow all</div><div><br></div><div>acl wan2 src 192.168.5.2</div><div>tcp_outgoing_address 10.8.8.10 wan2</div><div><br></div><div>follow_x_forwarded_for allow localhost</div><div>acl_uses_indirect_client on</div><div>log_uses_indirect_client on</div><div><br></div><div>http_port 3129</div><div><br></div><div>cache_replacement_policy heap LFUDA</div><div>maximum_object_size 768 MB</div><div>cache_dir aufs /squid/cache 2048 32 512</div><div><br></div><div>access_log      daemon:/squid/logs/access.log squid</div><div>cache_log       /squid/logs/cache.log</div><div>cache_store_log none</div><div><br></div><div>logfile_rotate 0</div><div><br></div><div>pid_filename /var/run/squid.pid</div></div><div><br></div><div># end test squid.conf</div><div><br></div><div><div>em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500</div><div><span class="" style="white-space:pre"> </span>options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM></div><div><span class="" style="white-space:pre">        </span>ether 00:0c:29:a3:33:93</div><div><span class="" style="white-space:pre">    </span>inet 192.168.92.246 netmask 0xffffff00 broadcast 192.168.92.255 </div><div><span class="" style="white-space:pre">  </span>nd6 options=9<PERFORMNUD,IFDISABLED></div><div><span class="" style="white-space:pre"> </span>media: Ethernet autoselect (1000baseT <full-duplex>)</div><div><span class="" style="white-space:pre"> </span>status: active</div><div>    </div><div>em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500</div><div><span class="" style="white-space:pre"> </span>options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM></div><div><span class="" style="white-space:pre">        </span>ether 00:0c:29:a3:33:7f</div><div><span class="" style="white-space:pre">    </span>inet 10.8.8.10 netmask 0xffffff00 broadcast 10.8.8.255 </div><div><span class="" style="white-space:pre">   </span>inet 10.8.8.11 netmask 0xffffff00 broadcast 10.8.8.255 </div><div><span class="" style="white-space:pre">   </span>inet 10.8.8.12 netmask 0xffffff00 broadcast 10.8.8.255 </div><div><span class="" style="white-space:pre">   </span>inet 10.8.8.13 netmask 0xffffff00 broadcast 10.8.8.255 </div><div><span class="" style="white-space:pre">   </span>inet 10.8.8.14 netmask 0xffffff00 broadcast 10.8.8.255 </div><div><span class="" style="white-space:pre">   </span>nd6 options=9<PERFORMNUD,IFDISABLED></div><div><span class="" style="white-space:pre"> </span>media: Ethernet autoselect (1000baseT <full-duplex>)</div><div><span class="" style="white-space:pre"> </span>status: active</div></div><div><br></div><div>







<p class=""><span class="">root# netstat -rn | grep default</span></p><p class=""><span class="">default</span><span class="">            192.168.92.2       UGS         em0</span></p></div><div><div><br></div><div>I am hoping someone can shed some light on whether or not this may be a squid bug or something going on with FreeBSD. Thank you.</div></div><div><br></div><div>-Nick</div><div><br></div></div>