Meu erro parece estar roteando todo o tráfego pela rede privada e via eth1 - xenbr1 - dummy0. eth1 deve ser usado apenas para a rede privada e eth0 para tráfego geral.
Portanto, da eth1 na máquina virtual, remova o gateway em / etc / network / interfaces:
iface eth1 inet static
address 192.168.122.6
netmask 255.255.255.0
network 192.168.122.0
broadcast 192.168.122.255
E altere a eth0 para incluir rotas estáticas tanto para a máquina host quanto para o gateway do host (tenho certeza de que isso pode ser feito para todo o intervalo, em vez dos 2 IPs individualmente, para simplificar ainda mais isso).
iface eth0 inet static
address 129.x.x.199
netmask 255.255.255.0
broadcast 129.x.x.199
up route add 23.x.x.94 dev eth0
up route add 23.x.x.254 dev eth0
up route add default gw 23.x.x.94
down route del default gw 23.x.x.254
down route del 23.x.x.94 dev eth0
down route del 23.x.x.254 dev eth0
Note que também removi a definição de gateway desta - até que as rotas estáticas sejam adicionadas, o gateway está inacessível (o que deixa a rede incapaz de iniciar).
Agora, todo o tráfego da Internet é encaminhado através da ponte eth0-xenbr0-eth0 e o tráfego privado é encaminhado através do eth1-xenbr1-dummy0.
A tabela de rotas final é assim:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 23.x.x.254 0.0.0.0 UG 0 0 0 eth0
23.x.x.94 * 255.255.255.255 UH 0 0 0 eth0
23.x.x.254 * 255.255.255.255 UH 0 0 0 eth0
129.0.0.0 * 255.255.255.0 U 0 0 0 eth0
192.168.122.0 * 255.255.255.0 U 0 0 0 eth1
Obrigado a garethTheRed pela sua ajuda!