Couldn't get iPhone to appear in iTunes via wi-fi sync on a Windows 10 virtual machine. Tried all the usual steps such as verifying they can ping each other, re-ticking 'sync with this iPhone over wi-fi', rebooting, terminating AppleMobileDeviceHelper, etc.
Fix turned out to be related to IPv6. I am using a macvtap bridge for connectivity, and apparently this does not work for certain IPv6 traffic.
Solution was found here: http://blog.flyingpenguintech.org/2017/12/ipv6-with-macvtap-and-libvirt.html
trustGuestRxFilters='yes' to your interface block like so:
<interface type='direct' trustGuestRxFilters='yes'>
Note this may have security implications if your IPv6 extends beyond your local network (i.e. your ISP isn't dinosaur grade).