Хорошо забытое старое
Как я уже писал применительно к libvirt'у - поддержкой сетевых настроек он отнюдь не блещет. Поэтому я в большинстве случаев наcтраиваю сеть руками (кроме простейших, вида "подцепить виртуалку к существующему бриджу").
Решение проблемы с доступом к немаршрутизируемым виртуалкам пришло с неожиданной стороны - а зачем нам, собственно пробрасывать все соединения, когда нужно-то одно-два заранее известных? И тут на сцене появляется rinetd - tcp-proxy.
Софтина проста как топор, в отличие от socks-proxy, она даже не спрашивает на какой адрес/порт соединяться. Настроено в конфиге - извольте, не настроено - ну а чего вы хотели?
default ^ +-------------+
gw | | virt-host |
[client] +-> +-----+ br0 |
eth0| / \ |
| /---\ |
| [vm1][vm2] |
+-------------+
В схеме выше на интерфейсе br0 висят только 2 виртуалки. На одной из виртуалок периодически нужно подцепиться в mysql'ю.
Если делать всё "по-правилам", нужно:
- включить маршутизацию на хосте.
- опционально - (пере)настроить фаервол на хосте
- прописать маршрут до виртуалки на клиенте
- прописать дефолт/маршрут до клиента на самой виртуалке
Написание команд для всего потребного - вам в качестве самостоятельной работы.
В моём случае - прописать 2 строчки в конфиг и перезапустить сервис. Всё.
allow from <...>
192.168.1.1 3306 192.168.122.15 3306