Source container -> VM -> host -> host -> VM -> destination container
https://www.intel.com/content/dam/doc/application-note/pci-s... is a good overview.
Also, at least on AWS, you can directly attach VPC network interfaces to containers, which (among other things) obviates the need for software bridging, veth pairs, etc.
Finally many platforms like docker, in the past, will spin up userspace proxies (docker-proxy) which is even more expensive.