#dc09ru #postmortem

Yesterday I did some changes in dc09.ru infrastructure that caused a long downtime, resolved at 18:51 UTC+3.

Before, there were two VPS each with an IPv4 address (it's expensive) and each with nginx reverse proxy sharing the same TLS certificates from Let's Encrypt by copying certs from 1st server to the 2nd by SSH (it's potentially unsafe and was not tested at all).

Now, nginx with TLS is only on the 1st VPS. As for web services on the 2nd, their TCP ports are forwarded to 1st by OpenSSH thanks to its amazing feature (client is started with `-L` flag from 1st VPS, connects to sshd on 2nd).

IPv4 for the second server can be removed, this will save me 150 RUB per month (it's 3 loafs of bread; or $1.57, but doesn't make sense with the current currency rate), because SSH connection is done over IPv6.

And what caused a downtime? It was Timeweb's buggy control panel and my incompetence in networking, more precisely in properly setting up IPv6 on Alpine. Everything was working only after I had installed dhcpcd instead of trying to configure network manually.

#постмортем

Вчера делал некоторые изменения в инфре dc09.ru, из-за чего долгое время сервер был недоступен, до 18:51 по МСК.

Раньше было 2 впски, каждая с IPv4-адресом (что дорого) и каждая с реверс-прокси nginx, с одинаковыми TLS-сертификатами от Let's Encrypt, которые передавались с первого сервера на второй по ссш (что потенциально небезопасно и вообще не тестировалось).

Теперь nginx с TLS-сертами стоит только на первом VPS. TCP-порты сервисов со второго VPS пробрасываются на первый через OpenSSH благодаря его крутой фиче (на первом запускается клиент с флагом `-L`, подключается к sshd на втором).

IPv4 у второй впски теперь можно убрать, сэкономлю 150 рублей в месяц, ибо SSH-подключение у меня по IPv6.

Причина даунтайма: баганая панель управления у Timeweb и моя некомпетентность в сетях, точнее в правильной настройке IPv6 на Alpine. Заработало только когда я наконец поставил dhcpcd вместо попыток настроить сеть вручную.
@darkcat09 почему передача файлов по SSH потенциально небезопасно? И что мешало на каждом сервере получать отдельный сертификат?

ssh не умеет в udp, это надо учитывать, что-то может из-за этого не работать, скорость будет низкой. Ссш для таких махинаций как мне кажется не предназначен, я бы поднял wireguard для этого.

Я ipv6 по вики настаивал -
https://wiki.alpinelinux.org/wiki/Configure_Networking#IPv6_Static_Address_Configuration
Configure Networking - Alpine Linux

@vlnst
Это был самописный баш-скрипт, коннектящийся по ssh / перекидывающий серты по scp. Никто его аудит не проводил :) Я даже не тестировал в реальных условиях. И даже шеллчек по нему не прогнал.

Что мешало получить отдельный серт: у меня не по отдельным доменам, а по wildcard-у `*.dc09.ru`, ибо задолбался на каждый новый сервис вызывать certbot и обновлять сертификат. Ну и как-то смысл тащить этот питоновый скрипт на второй сервер, когда на первом уже есть, причём с вилдкардом.

Сервисы на UDP у меня только на s1.
На s2 чисто хттп-прокси всякие, типа пайпеда и сёркснга. Не на http3, так что TCP.

Я проверял скорость через iperf3. Wireguard выдавал прямо ооочень плохие результаты, не выше 300 мбит/с, когда канал гигабитный. Форвард по SSH -- весь 1 гбит/с.

IPv6 я тоже по вики настраивал. То ли gateway неправильно указал, то ли другая какая причина, но к внешним серверам (curl ipv6.icanhazip.com) коннект шёл, всё прекрасно, а к s2 в той же подсети было unreachable. То есть доки дистрибутива не помогут, когда не разбираешься / когда кривые руки :) Лучше DHCP сразу юзать.

@darkcat09

scpНу, оно по-моему достаточно секьюрное.И даже шеллчек по нему не прогнал.А эт зря) я на все скрипты шелчек гоняю. Перфекционизм не лечится... по wildcard-у *.dc09.ru, ибо задолбался на каждый новый сервис вызывать certbot и обновлять сертификатУ меня тоже по wildcard, я получаю через API провайдера, в моём случае это njal.la, на оба сервера получаю разные вайдкарт серты. Использую acme.sh, но по-моему это же можно и через certbot делать.Ну и как-то смысл тащить этот питоновый скрипт на второй сервер, когда на первом уже есть, причём с вилдкардом.Да, в этом, наверное, есть смыслСервисы на UDP у меня только на s1.На s2 чисто хттп-прокси всякие, типа пайпеда и сёркснга. Не на http3, так что TCP.
Понятно, ну, надеюсь, никаких проблем не будет из-за этого.
Форвард по SSH -- весь 1 гбит/с.Очень странно. SSH же TCP, как он может быть быстрее UDP?но к внешним серверам (curl ipv6.icanhazip.com) коннект шёл, всё прекрасно, а к s2 в той же подсети было unreachableУ меня тоже траблы были, но я на провайдера списал просто)Лучше DHCP сразу юзать.Это если он работает ещё...