Я использую сеть Virtualbox host-only и у меня есть интерфейс vboxnet0.
На хосте (Ubuntu 14) у меня есть несколько маршрутных сотрудников, несколько таблиц маршрутизации (основная и две дополнительные), набор правил IP и т. д.
Все изменения, которые я вносил в таблицы маршрутизации для интерфейса vbonxen0 на хосте, терялись при перезагрузке.
Как создать скрипт, подобный ifup, для интерфейса vboxnet0?
решение1
При использовании VirtualBox следует помнить о некоторых вещах.только хост-сетевое взаимодействиережим (по крайней мере V4.3.36), особенно когдамостнет возможности и вручную, пользовательские маршруты необходимо настроить впоследствии:
- vboxnet0узел устройства - этонетавтоматически доступен после загрузки (!)
За исключением случаев, когда вы настраиваете его вручную,/etc/network/interfaces
что может помешать VirtualBox запустить свой собственный экземпляр. - Он даже недоступен, когда загружены модули vbox(pci|netadp|netflt|drv).
- Использование
vboxmanage hostonlyif create
просто добавит узел устройства, но оставит его в состоянии DOWN, которое пока не маршрутизируется. - vboxnet0Состояние устройства останется неизвестным даже при запуске интерфейса:
4: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... state UNKNOWN ...
Любая попытка использованиявверхсобытия из/etc/network/interfaces
,ifup
или/etc/network/if-up.d/MYSCRIPT
бесполезны, так как это состояние никогда не достигается. - На хосте это становитсятолькодоступен и готов к использованию при запуске первой гостевой виртуальной машины.
Единственный способ попасть междувиртуальный бокси начало вашей виртуальной машины, которую я пока нашел, используетправило udevпоместив файл, например: /etc/udev/rules.d/80-vboxnet
с:
ЯДРО=="vboxnet0", ПОДСИСТЕМА=="net", ДЕЙСТВИЕ=="add", ВЫПОЛНЕНИЕ+="/bin/bash -c '/bin/sleep 1; /sbin/ip route add xxxx dev vboxnet0'"
который запускает экземпляр bash. Я поместил оператор ip route ...
непосредственно в файл правил, но в качестве альтернативы можно просто вызвать скрипт в другом месте и поместить туда дополнительные конфигурации маршрута.
решение2
Ответ 3roncoдает хорошее представление о том, как VirtualBox обманывает нас в этом вопросе, но я обнаружил, что его решение Udev не работает на моем Ubuntu 19.04, поскольку на момент запуска скрипта соединение все еще было недоступно.
Я попробовал добавить интерфейс внетпланоднако по неизвестным причинам статические маршруты были настроены игнорировались.
Если в вашей системе есть networkd-dispatcher, вы можете разместить скрипт здесь
/etc/networkd-dispatcher/routable.d/99-vboxnetworks
Вот мой:
#!/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
Теперь оказывается, что этот скрипт не будет запущен, если интерфейс не имеет записи в netplan. Мой включает одну из игнорируемых записей маршрутизации, просто чтобы сделать его синтаксически правильным (вероятно, есть более аккуратный способ сделать это). Поэтому я
/etc/netplan/01-mynet.yaml
Содержит:
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