Estou usando a rede somente host Virtualbox e tenho a interface vboxnet0.
No host (Ubuntu 14), tenho alguns funcionários de rotas, várias tabelas de rotas (principais e duas extras), regras de IP definidas, etc.
Todas as alterações que fiz nas tabelas de roteamento da interface vbonxen0 no host perderam a reinicialização.
Como criar um script semelhante ao ifup para a interface vboxnet0?
Responder1
Há algumas coisas que você deve ter em mente ao usar o VirtualBoxrede somente hostmodo (pelo menos V4.3.36), especialmente quandopontenão há opção e é manual, rotas personalizadas são necessárias para serem configuradas posteriormente:
- vboxnet0nó do dispositivo énãodisponível automaticamente após a inicialização (!)
Exceto quando você o configura manualmente,/etc/network/interfaces
o que pode interferir quando o virtualbox tenta abrir sua própria instância. - Nem está disponível quando os módulos vbox(pci|netadp|netflt|drv) são carregados.
- O uso
vboxmanage hostonlyif create
apenas adicionará o nó do dispositivo, mas o deixará no estado DOWN, que ainda não é roteável. - vboxnet0o estado do dispositivo permanecerá desconhecido mesmo quando a interface for ativada:
4: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... state UNKNOWN ...
Qualquer tentativa de usaracimaeventos de/etc/network/interfaces
,ifup
ou/etc/network/if-up.d/MYSCRIPT
é inútil porque esse estado nunca é alcançado. - No host torna-seapenasdisponível e pronto para uso quando sua primeira máquina convidada VM for iniciada.
A única maneira de ficar entrecaixa virtuale o início da sua VM que encontrei até agora está usando umregra do udevcolocando um arquivo, por exemplo: /etc/udev/rules.d/80-vboxnet
com:
KERNEL=="vboxnet0", SUBSYSTEM=="net", ACTION=="add", RUN+="/bin/bash -c '/bin/sleep 1; /sbin/ip route add xxxx dev vboxnet0'"
que aciona uma instância bash. Coloquei a ip route ...
instrução diretamente no arquivo de regras, mas alternativamente é possível simplesmente abrir um script em outro lugar e colocar configurações de rota adicionais lá.
Responder2
Resposta do 3roncofornece algumas boas dicas sobre como o VirtualBox nos atrapalha com isso, mas descobri que sua solução Udev não funcionou no meu Ubuntu 19.04, pois o link ainda estava inativo no momento em que o script foi executado.
Eu tentei adicionar a interface emplano de redecom rotas estáticas configuradas lá, porém, por motivos desconhecidos, as rotas foram ignoradas.
Se o seu sistema tiver networkd-dispatcher você pode colocar um script aqui
/etc/networkd-dispatcher/routable.d/99-vboxnetworks
Aqui está o meu:
#!/bin/bash
if [ $IFACE == vboxnet2 ]; then
/sbin/ip route add fdnn:nnnn:nnnn:2::/64 via fdnn:nnnn:nnnn:1::2
/sbin/ip route add fdnn:nnnn:nnnn:3::/64 via fdnn:nnnn:nnnn:1::3
fi
Acontece que este script não será executado a menos que a interface tenha uma entrada no netplan. O meu inclui uma das entradas de roteamento ignoradas, apenas para torná-la sintaticamente correta (provavelmente existe uma maneira mais organizada de fazer isso). Então eu tenho
/etc/netplan/01-mynet.yaml
Contendo:
network:
ethernets:
vboxnet2:
routes:
# These routes are ignored for reasons unknow,
# I have included them just so that vboxnet2 gets
# a mention here. Actual routes are added by
# /etc/networkd-dispatcher/routable.d/99-vboxnetworks
#
- to: fdnn:nnnn:nnnn:2::/64
via: fdnn:nnnn:nnnn:1::2