Você pode usar uma rede em ponte enquanto deixa a ponte (o lado do host) sem nenhuma configuração IP.
Observe que, com uma rede com ponte, sua VM será exposta a onde quer que a NIC conectada esteja conectada . No seu caso, seria a Internet . A VM obterá um IP diretamente do seu provedor (seja um IP público ou privado depende dele).
Como isso realmente depende da sua preferência e de qual agente / gerente de rede você usa. Então, apresentarei o conceito apenas com ip
:
Crie uma ponte:
ip link add name br0 type bridge
Conecte a NIC da VM ("porta WAN") à ponte:
ip link set enp3s0 master br0
(substitua enp3s0
pelo nome da interface da sua "porta WAN")
Crie um tap
para a VM se conectar à ponte:
ip tuntap add name tap0 mode tap
Conecte o tap
à ponte:
ip link set tap0 master br0
Para evitar qualquer configuração automática de IPv6, você pode usar o disable_ipv6
sysctl:
sysctl net.ipv6.conf.enp3s0.disable_ipv6=1
sysctl net.ipv6.conf.br0.disable_ipv6=1
sysctl net.ipv6.conf.tap0.disable_ipv6=1
Chame as interfaces:
ip link set enp3s0 up
ip link set br0 up
ip link set tap0 up
Então você pode usar -net tap
no qemu. Por exemplo, -net tap,ifname=tap0,script=no,downscript=no
. (Você também pode adicionar ,vhost=on
para um melhor desempenho.)
Você pode usar ,script=someup.sh,downscript=somedown.sh
para dizer ao qemu que os scripts sejam executados, respectivamente, quando a VM / tap estiver ativada e desativada. No entanto, IMHO não é uma boa maneira, pois os scripts provavelmente precisarão ser executados como root, portanto, se você usar esses parâmetros, a VM também deverá ser iniciada como root. Portanto, prefiro envolver o qemu assim se quiser uma abordagem semelhante:
#!/bin/bash
sudo /path/to/someup.sh
qemu-system-x86_64 ...
sudo /path/to/somedown.sh
Se você preferir que o tap
seja criado e excluído dinamicamente quando a VM inicializar e desligar, convém usar o qemu-bridge-helper
. Para fazer isso, pule as etapas acima que envolvem tap
. Em vez disso, você precisa criar uma lista de controle de acesso:
[tom@localhost ~]$ cat /etc/qemu/bridge.conf
allow br0
Obviamente, é uma lista de bridge (s) que podem ser usadas por qemu-bridge-helper
.
Uma vez feito isso, você pode usar -net bridge
no qemu. Você pode ou não precisar especificar a ponte a ser usada e / ou o caminho para qemu-bridge-helper
. Por exemplo, -net bridge,br=br0,helper=/usr/lib/qemu/qemu-bridge-helper
.
Observe que, além de -net tap
ou -net bridge
, você também precisa adicionar -net nic
. É sobre a apresentação da interface no lado do convidado. Por exemplo, -net nic,model=virtio
. Você também pode especificar um endereço MAC com ,macaddr=xx:xx:xx:xx:xx:xx
. Se você fizer isso, NÃO use nenhum endereço MAC das interfaces no lado do host que estão envolvidos (ou seja, enp3s0, br0 e tap0, neste exemplo), caso contrário, ele não funcionará. Se você não especificar um, o qemu usará o padrão 52:54:00:12:34:56
. Portanto, a menos que você tenha várias VMs interconectadas, isso é opcional.