Конфигурация маршрута экземпляра GCE Ubuntu Multi-Interface

Конфигурация маршрута экземпляра GCE Ubuntu Multi-Interface

Я запускаю экземпляр Ubuntu 16.04 с несколькими интерфейсами. Я хочу настроить некоторые маршруты на втором интерфейсе. Хотя я могу сделать это вручную, это не сохраняется после перезагрузки.

Большинство методов предполагают определение маршрутов с интерфейсом в /etc/network/interfaces, что преобразуется в /etc/network/interfaces.d/50-cloud-init.cfg на основе вызова из файла интерфейсов.

Меня сбивает с толку то, что я не уверен, где и как вообще определяется второй интерфейс.

Два интерфейса — ens4 и ens5. Только ens4 определен с помощью iface ens4 inet dhcp. Я ожидал увидеть что-то подобное для ens5, но нет.

Запуск ifconfig показывает, что ens5 работает. Также ip link showпоказывает его.

Похоже, что я могу добавить ens5 в /etc/network/interfaces, ничего не сломав. Если я это сделаю, то, похоже, произойдет что-то еще. Например, файл "ifstate.ens5" теперь появляется в /run/network. Кроме того, ifdown / ifup работают на интерфейсе.

Однако даже добавление post-up route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1не приводит к созданию маршрута при загрузке... Но если я выполняю ifdown, а затем ifup, маршрут добавляется, как и ожидалось.

Мои дополнительные исследования показывают, что ens5 определяется через пакет cloud-init из источника данных Google GCE, что, конечно, хорошо, но не дает ответа на вопрос, почему в файле 50-cloud-init.cfg присутствует только ens4.

Где же определен ens5 и как добавить статический маршрут для ens5?

решение1

Я не уверен, что это лучшее решение, но я нашел способ добиться желаемого результата.

Во-первых, я считаю, что пакет python google_compute_engine выполняет операции по настройке сети в какой-то момент процесса загрузки. Я нашел это в "/usr/lib/python3/dist-packages/google_compute_engine/network_setup".

К сожалению, я считаю, что хотя результатом этого метода является рабочая сеть, он делает некоторые вещи за пределами обычных "каналов" Ubuntu. Например, хотя второй интерфейс (ens5) работает и распознается в большинстве случаев, поскольку он не определен в /etc/network/interfaces, все, что зависит от него, вряд ли будет работать.

Поскольку другие команды, такие как «route», по-прежнему работают, я не уверен, насколько это важно.

Я не уверен, есть ли способ использовать этот пакет Google, поэтому не уверен, что это вообще хорошая идея.

Однако мое текущее решение заключается в использовании сценариев запуска, как определено в "https://cloud.google.com/compute/docs/startupscript".

Поскольку эти скрипты запуска запускаются после настройки сети, я поместил скрипт в контейнер, который выполняет набор действий на хосте на основе локального файла конфигурации хоста. Это позволило мне создавать статические маршруты при загрузке с помощью команды "route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1 dev ens5".

Связанный контент