A lot of times the problem going through a firewall or proxy is the use of network address translation, or having the correct ports open. ICA requires TCP Port 1494 for the ICA transport, and UDP Port 1604 for ICA browsing (very important for published apps).
As far as network address translation (NAT) goes, you have to configure the MetaFrame server to recognize the external address. The following was cut and pasted from a Citrix support document:
Returning External Addresses to ICA Clients
Use the Altaddr utility to configure the ICA browser server to return the external IP address to Citrix ICA Clients. The Altaddr utility sets an alternate address for the ICA browser on that machine. The external address for the server is specified as the alternate address. The Citrix ICA Client requests the alternate address when contacting servers inside the firewall. The alternate address must be specified for each server in a server farm.
To set an alternate address for a Citrix server
1. Determine the correct external IP address.
2. At a command prompt, type altaddr /set nnn.nnn.nnn.nnn, where nnn is the alternate IP address determined in Step 1.
3. Reboot.
4. Repeat on each server in a server farm.
To configure a ICA Client to use an alternate address
1. Edit the Appsrv.ini file in the client directory.
2. Find the [TCP/IP] section.
3. Specify 1 for the UseAlternateAddress field. For example:
UseAlternateAddress = 1
4. Save the file.
Hope this all helps...

- Bill
"You can get anything you want out of life, if you'll just help enough other people get what they want" - Zig Ziglar