Unless you're using a transparent proxy, the behaviour you're seeing is normal:
- clients connect to the proxy to retrieve content, so you see packets from the clients to the proxy and back;
- the proxy connects to the target servers on behalf of the clients, so you see packets from the proxy to the target servers and back.
At the IP level, there is no way of connecting the two. If your proxy is a caching proxy, then in some cases there won't be anything to connect: the proxy can service clients' requests itself if it has the information in its cache. But if you look inside the packets, you should find what you're looking for:
- requests from the clients to the proxy will contain the target server name (look for the
Host HTTP header);
- requests from the proxy to the target server might (depending on your proxy configuration) contain the IP address of the client (look for the
X-Forwarded-For HTTP header).
Note that in the second case, with a caching proxy you'll only find the IP address of the first client requesting a given cacheable resource.
If you're trying to handle encrypted connections things get a bit more complicated; I'll let you read up on that (see Wireshark's page on the subject and Squid's)...