Полное шифрование диска Ubuntu в Hetzner Cloud с добавлением добавления статического маршрута в initramfs
Я пытаюсь настроить Ubuntu с полным шифрованием диска поверх Hetzner Cloud. У меня все работает, кроме сетевого подключения в initramfs. Благодаря UI-консоли его можно разблокировать, но мне нужен SSH (dropbear) в init. Я успешно использую ту же конфигурацию на своих корневых серверах без проблем.
Если я установлю dropbear, чтобы получить IP по dhcp, всегда приводя к NETWORK IS UNREACHABLE
, Но он получает правильные параметры с сервера DHCP. Я попросил поддержки Хецнера. Они сказали мне, что думают, что клиент dhcp не поддерживает RFC 3442 Classless Static Routes Option, и порекомендовали добавить статический маршрут с ip r a 172.31.1.1 dev ens3
, Как и в этом вопросе я добавил маршрут, но всегда получал одну и ту же ошибку: NETWORK IS UNREACHABLE
, Я проверил, чтобы установить маршрут в разных скриптах, но ничего не изменилось. Я тестировал Ubuntu 16.04 и 18.04.
Я рад любым рекомендациям по этому поводу. Спасибо!
1 ответ
Была такая же проблема / небольшая дискуссия с техподдержкой, что не может быть, что initramfs дает сбой только в таких экземплярах облака Гетцнера, как этот.
Но служба поддержки Hetzner повторяет только то, что их DHCP-сервер совместим с RFC3442, который объявляет маршрут хоста по умолчанию к внутреннему облачному GW. Так что это должно быть проблемой клиента initramfs dhcp, и они не могли (не так ли) попытаться настроить возможный ответ BootP, например, с правильным параметром IP=....
Я предложил обновить их документацию для этого, но кажется, что "не стесняйтесь использовать нашу вики для документации" ... Ответ (маркетинг;) ...) здесь тогда не верен:
Hetzner_OL 6 месяцев назад [-]
Спасибо за предложение о Docker/dbaas. Я передал это нашей команде разработчиков. Обычно мы не публикуем, какие новые продукты и функции мы разрабатываем, пока они не будут готовы, но мы будем продолжать публиковать информацию об обновлениях по мере их разработки.
Относительно DSGVO: Поддерживаете ли вы шифрование файловой системы? ->
Облачные серверы Hetzner полностью виртуализированы. Таким образом, клиент может даже полностью зашифровать весь сервер. --Кати, Маркетинг, 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://faultserver.ru/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 могут / должны иметь службу менеджера ключей, которая может это прозрачно.;)
Ответ Хаджо начинается с правильного пути, но он пропускает несколько ключевых вещей. Вот как я получил это для работы на Ubuntu Bionic без необходимости исправления каких-либо файлов (то есть этот метод не подвержен сбоям при обновлении):
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
Вызвать
configure_networking
функционировать прямо перед добавлением маршрута. Это приводит к тому, что конфигурация сети по умолчанию происходит первой, что в противном случае может привести к сбою любых настроек, созданных сценарием, если он будет запущен позже. Функция создает несколько файлов в/run/
, которые заставляют второй вызов (из хука busybox-initramfs) ничего не делать.configure_networking
Добавьте статические маршруты, как в ответе 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-маршруты
#!/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 /etc/initramfs-tools/scripts/init-premount/static-маршруты
Основываясь на других ответах, следующий скрипт, помещенный в качестве исполняемого файла в / 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", которая действительно изменила мою настройку.