script if-up para interface de "rede somente host" do virtualbox

script if-up para interface de "rede somente host" do virtualbox

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/interfaceso 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 createapenas 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, ifupou /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-vboxnetcom:

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

informação relacionada