Я использую Ubuntu 16. 04 с несколькими интерфейсами. Я хочу настроить маршруты на втором интерфейсе. Хотя я могу сделать это вручную, это не сохраняется после перезагрузки.
Большинство методов предлагают определять маршруты с помощью интерфейса в / etc / network / interfaces, который преобразуется в /etc/network/interfaces.d/50-cloud-init.cfg на основе вызова из файла интерфейсов.
Что меня смутило, так это то, что я не уверен, где и как вообще определен 2-й интерфейс.
Эти 2 интерфейса - 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?
Я не уверен, что это лучшее решение, но я нашел способ достичь желаемого результата.
Во-первых, я считаю, что пакет 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».