Назад | Перейти на главную страницу

Конфигурация маршрута мультиинтерфейсного экземпляра GCE Ubuntu

Я использую экземпляр 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, что все хорошо, но не дает ответа, почему только ens4 находится в файле 50-cloud-init.cfg.

Итак, где определяется ens5 и как добавить статический маршрут для ens5?

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

Во-первых, я считаю, что пакет 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».