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

Полное шифрование диска Ubuntu в Hetzner Cloud добавляет статический маршрут в initramfs

Я пытаюсь настроить Ubuntu с полным шифрованием диска поверх Hetzner Cloud. У меня все заработало кроме сетевого подключения в initramfs. Благодаря консоли пользовательского интерфейса его можно разблокировать, но мне нужен SSH (dropbear) в init. Я успешно использую ту же конфигурацию на их корневых серверах без каких-либо проблем.

Если я настрою dropbear для получения IP по dhcp, это всегда приведет к NETWORK IS UNREACHABLE. Но он получает правильные параметры от dhcp-сервера. Я обратился в службу поддержки Hetzner. Они сказали мне, что думают, что клиент DHCP не поддерживает опцию бесклассовых статических маршрутов RFC 3442, и рекомендовали добавить статический маршрут с ip r a 172.31.1.1 dev ens3. Как на этом Вопрос Я добавил маршрут, но всегда получал одну и ту же ошибку: NETWORK IS UNREACHABLE. Я пробовал устанавливать маршрут в разных скриптах, но ничего не изменилось. Я тестировал Ubuntu 16.04 и 18.04.

Я рад любым рекомендациям по этому поводу. Спасибо!

была такая же проблема / небольшая дискуссия с техподдержкой, что не может быть, что initramfs дает сбой только в экземплярах облака Hetzner, подобных этому.

Но служба поддержки Hetzner неоднократно заявляет только, что их DHCP-сервер соответствует требованиям RFC3442 который объявляет маршрут хоста по умолчанию к внутреннему облачному GW. Так что это должно быть проблема клиента initramfs dhcp, и они не могли (не стали бы?) Попытаться настроить возможно возможный ответ BootP, например. с правильным параметром IP = ...

Я предложил обновить их документацию для этого, но, похоже, «не стесняйтесь использовать нашу вики для документации» ... Ответ (маркетинг;) ...) Вот тогда не правильно:

Hetzner_OL 6 месяцев назад [-]

Спасибо за предложение о Docker / dbaas. Я передал его нашей команде разработчиков. Обычно мы не публикуем, какие новые продукты и функции мы разрабатываем, пока они не будут готовы, но мы продолжим публиковать информацию об обновлениях по мере их разработки.

Относительно DSGVO: Поддерживаете ли вы шифрование файловой системы? ->

Серверы Hetzner Cloud полностью виртуализированы. Так что заказчик может даже полностью зашифровать весь сервер. - Кэти, маркетинг, Hetzner Online

Я пытался найти вопросы / решения для этой проблемы, но единственное совпадение, которое я нашел сегодня, - это ваш вопрос;)

Указанный вами ответ для настройки интерфейса частично верен. Но из вопроса было неясно, что ему также нужен статический маршрут хоста к шлюзу, поэтому он отсутствует в ответе.

Мое быстрое решение проблемы состоит в том, чтобы вручную пропатчить необходимую функцию, подобную этой, «динамически» - вы можете проверить все свои переменные в /run/net-ens3.conf:

root@image-debian-jessie-94 ~ # diff -p /usr/share/initramfs-tools/scripts/functions{.orig,}
*** /usr/share/initramfs-tools/scripts/functions.orig   2018-07-31 12:46:40.911167456 +0200
--- /usr/share/initramfs-tools/scripts/functions        2018-07-31 12:50:30.736742035 +0200
*************** configure_networking()
*** 274,279 ****
--- 274,284 ----
                # ipconfig should have quit after first response
                . /run/net-*.conf
        fi
+
+       # Hack for Hetzner vServer static route enhanced like shown partly in this answer:
+       # https://serverfault.com/questions/909040/static-route-in-initramfs
+       ip route add ${IPV4GATEWAY}/${IPV4NETMASK} dev ${DEVICE}
+       ip route add default via ${IPV4GATEWAY} dev ${DEVICE}
  }

  # Wait for queued kernel/udev events

Протестировано и отлично работает у меня. Я мог настроить / сделать снимок самого маленького изображения.

Зашифрованный моментальный снимок составляет ~ 18 ГБ по сравнению с 0,5 ГБ незашифрованного, но цена моментального снимка все еще прекрасна по сравнению с улучшенной безопасностью (обычно системы на основе Openstack могут / должны иметь службу диспетчера ключей, которая может это прозрачно;)

Ответ jajo начинается с правильного пути, но он упускает из виду несколько ключевых моментов. Вот как я заставил это работать на Ubuntu Bionic без необходимости исправлять какие-либо файлы (это означает, что этот метод не может быть нарушен обновлением):

  1. initramfs-tools сценарии должны начинаться с некоторого шаблона, который подключается к его системе; в противном случае скрипт запустится во время генерации initramfs, чего мы не хотим:

    #!/bin/sh
    PREREQ=""
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
    prereqs)
        prereqs
        exit 0
        ;;
    esac
    
    . /scripts/functions
    # Begin real processing below this line
    
  2. Вызвать configure_networking прямо перед добавлением маршрута. Это приводит к тому, что сначала выполняется конфигурация сети по умолчанию, которая в противном случае сбила бы любые настройки, созданные скриптом, если бы он был запущен позже. Функция создает несколько файлов в /run/, которые заставляют второй вызов (из ловушки busybox-initramfs) ничего не делать.

    configure_networking
    
  3. Добавьте статические маршруты, как в ответе jajo. Если вы не настраиваете IP-адрес, например, параметр командной строки ядра, затем добавьте его сюда.

    ip route add 1.2.3.4 dev ens3
    ip route add default via 1.2.3.4 dev ens3
    
    exit 0                   
    

Как и в ответе jojo, указанный выше файл следует поместить в /etc/initramfs-tools/scripts/init-premount/static-routes, и сделал исполняемым.

Еще одна вещь, которую стоит отметить, это то, что klibc имеет недавно реализованный поддержка RFC3442 (бесклассовые статические маршруты в DHCP); поэтому, если ваш провайдер услуг объявляет о необходимости этих маршрутов в своей конфигурации DHCP, возможно, вам может не понадобиться этот сценарий в последних версиях Debian / Ubuntu.

Для тех, кто сталкивался с этой веткой:

По крайней мере, в Debian Stretch работает более общая конфигурация (которая не сломается при обновлении пакета). Мы просто настраиваем сеть статически с помощью скрипта в init-premount:

vi / etc / initramfs-tools / scripts / init-premount / static-routes

#!/bin/sh 
# /etc/initramfs-tools/scripts/init-premount/static-routes

# to avoid race condition
# we have to wait until the automatic network configuration via dhcp
# is finished
sleep 15

ip a add 192.168.0.18/32 dev eth0
ip route add 192.168.178.1 dev eth0
ip route add default via 192.168.178.1 dev eth0

exit 0

chmod 755 / и т.д. / initramfs-tools / scripts / init-premount / static-routes

Основываясь на других ответах, следующий скрипт, помещенный в качестве исполняемого файла в / etc / initramfs-tools / scripts / init-premount /, наконец, заставил его работать с Hetzner Cloud Server Ubuntu 20.04:

#!/bin/sh
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case $1 in
prereqs)
    prereqs
    exit 0
    ;;
esac

. /scripts/functions
# Begin real processing below this line
# /etc/initramfs-tools/scripts/init-premount/static-routes

configure_networking

ip route add 172.31.1.1/32 dev ens3 
ip route add default via 172.31.1.1 dev ens3 

exit 0

Помните, что необходимо вручную установить ISO-образ устаревшего сервера Ubuntu 20.04 и выполнить команду update-initramfs -u -k all после размещения скрипта.

Действительно важная строка - это "configure_networking", которая действительно изменила мою установку.