Okay, this is killing me.
Debian Squeeze, Xen 4.0, brand new install. No iptables rules whatsoever except for the ones added by the default xen bridge script.
Dom0 can reach the entire world, no problems.
DomU can receive packets from some hosts, but not from others. For instance, if I ping Host A, it works fine. If I ping Host B, the DomU reports 100% packet loss.
The hosts are random, but consistent (even after reboots). I can see no pattern to why some work and others don't. In fact, in some cases, different virtual hosts on the same server (an other server at a different data center) are divided; some work and others do not. I can reboot (DomU or Dom0 too) and the same hosts will work or fail as before.
If I tcpdump on the Host B while pinging from the DomU, everything looks fine. It sees the echo request coming in and says it's sending one back.
However, if I tcpdump peth0 on the Dom0, it never sees the echo reply.
Any ideas what could be happening? I'm tearing my hair out here.
EDIT: Turns out my hosting provider (Rackspace) had a routing problem which was the cause of the issue. Xen and Linux are exonerated. Thanks to everyone for looking at the problem. Too bad I'll never get the hair back.