There are multiple ways to achieve your setup, but I am going to add one of the recommended ones. Use openvswitch
Openvswitch is a multilayer virtual switch, its designed to enable network automation (from its source site)
http://openvswitch.org/download/ (thats where you download the package)
I had referred below tutorials for installing and setting up openvswitch
http://blog.scottlowe.org/2012/08/17/installing-kvm-and-open-vswitch-on-ubuntu/
or
https://n40lab.wordpress.com/2015/06/28/centos-7-installing-openvswitch-2-3-2-lts/
If the VM Host has its interfaces on trunk mode, then you can do the following.
You can setup a single OV bridge (of course this would have an IP, and of the untagged/native vlan).
Then you might want to setup VIRSH Network. Something like this
<network>
<name>ovs-network2</name>
<forward mode='bridge'/>
<bridge name='br0'/>
<virtualport type='openvswitch'/>
<portgroup name='vlan-a'>
<vlan>
<tag id='1'/>
</vlan>
</portgroup>
<portgroup name='vlan-b' default='yes'>
</portgroup>
</network>
In my above example, vlan-a is for tagged traffic, and vlan-b is untagged
Once you define/start virsh network, you might want to change XML settings for your VM, in the following order
<interface type='network'>
<mac address='blah blah'/>
<source network='ovs-network2' portgroup='vlan-a'/>
</inteface>
You might have other settings in it too like virtio, addresstype
The above example might help you in avoiding multiple IP addresses for each tagged vlan bridge. Here are some great references to look at.
http://blog.scottlowe.org/2012/11/07/using-vlans-with-ovs-and-libvirt/
And here is another article that does a similar setup
https://www.netflask.net/transparent-vlan-tagging-libvirt-ovs/
I hope this helps! :)