I gave up getting it to work. What I did was set the dhcp server gateway in pfsense to point to the squid box. Then I just enabled ipv4 fowarding and created two iptables rules. Yes this puts all dhcp clients no matter what protocol or port through the squid box, but the performance hit is neglibile and will be outweighed by the caching effect. Especially for google maps and live.local virtual earth. All servers still point to the pfsense box as their default gateway.
If anybody wants to duplicate … I'm running fedora core 4, squid setup in transparent proxy mode.
Add/change the following line in /etc/sysctl.conf to enable ip forwarding.
net.ipv4.ip_forward = 1
Then just add the following iptables rules to /etc/rc.local
iptables -A FORWARD -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
The first rule says to accept and forward all traffic received to the default gateway (pfsense) otherwise aim, mail clients, etc wouldn't work. The second intercepts the http traffic and sends it to squid on the default port of 3128.
I also use the following script so I can make changes to squid and restart it without end users seeing.
echo "Stopping Squid Traffic Redireect"
iptables -t nat -F PREROUTING
service squid restart
echo "Redirecting Traffic To Squid"
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
This just clears the iptables then reinstates the rule after squid restarts. You can make modifications of this to stop squid, etc.