certo, posso lhe dar uma sugestão, nao sei até onde será útil.
1 - seus clientes com ips validos, coloque um ip invalido nele e faça nat 1-para-1 no ip dele.
suponha que o ip valido seja 200.200.200.200 e o ip invalido 192.168.0.200.
no iptables faça..
# o trafego de 192.168.0.200 sair como 200.200.200.200
iptables -t nat -A PREROUTING -s 192.168.0.200 -j SNAT --to 200.200.200.200
# trafego destinado a 200.200.200.200 redirecionar para 192.168.0.200
iptables -t nat -A PREROUTING -d 200.200.200.200 -j DNAT --to 192.168.0.200
2 - e faça seu cliente, mesmo com ip invalido passar pelo squid normalmente
# acl do cliente
acl cliente200 src 192.168.0.200
# forçar a saida do cliente com o ip 200.200.200.200
tcp_outgoing_address 200.200.200.200 cliente200
http_access allow cliente200
3 - crie um alias ao ip 200.200.200.200 na sua eth de internet. para poder o squid usar tcp_outgoing_address
4 - libere o forward dos ips.
iptables -A FORWARD -d 200.200.200.200 -j ACCEPT
iptables -A FORWARD -d 192.168.0.200 -j ACCEPT
iptables -A FORWARD -s 200.200.200.200 -j ACCEPT
iptables -A FORWARD -s 192.168.0.200 -j ACCEPT
conclusao:
seu cliente entra no squid com ip invalido e sai com o ip desejado.
e seu cliente passar pelo firewall com ip invalido e sai com o ip desejado.
sobre o cache full, pode usar o zph como citado anteriormente :)
ou faz SNAT no mikrotik, que o webcache do mikrotik usa cachefull tb. so nao sei se tem a possibilidade de fazer tcp_outgoing_address no mk.
nao custa tentar ajudar.