Если руками - никакой формулы там нет, я просто держу в голове несколько правил.
Первым делом выбираю MTU, а не паддинги. Потому что чем больше MTU, тем меньше места остаётся под паддинг: пакет с обвесом должен влезть в 1500 байт, и на MTU 1420 под паддинг остаётся всего байт 20, а на 1280 - все 150. Если перебрать, каждый большой пакет начнёт фрагментироваться, а это и медленно, и заметно - ровно то, от чего мы прячемся.
S1-S4 ставлю одинаковые, где-то от 15 до того потолка, что получился выше. Меньше 12 нельзя вообще - оттуда берётся nonce для шифрования заголовков. И одна ловушка: S2 не должно быть равно S1 + 56, иначе сервер не сможет отличить один тип пакета от другого. Конфиг при этом запишется без ошибок, просто хендшейк никогда не случится.
Jc беру случайное от 4 до 12, Jmin = 8, Jmax = 80 - это из документации, трогать незачем. H1-H4 оставляю 1, 2, 3, 4. В 3.x заголовок и так шифруется, снаружи его не видно, так что случайные числа там ничего не добавляют - только ещё четыре значения, которые должны совпасть у всех клиентов.
Ключ HeaderProtectionKey - openssl rand -base64 32, один на сервер, и тот же самый у всех клиентов. RandomTrailers = true тоже с обеих сторон, иначе сервер молча выкинет хендшейк. DisableCookies = true - только на своей стороне, для домашнего сервера нормально. Тайминги не трогаю вообще, дефолты WireGuard годами работают. Разве что PersistentKeepalive = "22-30", чтобы у всех не было ровно 25.
В панели github.com/mycelium-mesh/amneziawg-ui есть генератор, который под выбранный MTU сразу выдаёт правильный набор, ключ берёт откуда надо и раздаёт клиентам те же значения, так что ничего не разъедется.
Я с 2023 года ни разу не сталкивался с блокировками. Палит не недостаточно случайный Jc, а одинаковые длины пакетов и порт 51820. Убрали это - и дальше просто работает VPN. Единственное исключение - Китай. Там обфускация не помогает: гасят не протокол, а IP - соединение начинает отваливаться по таймауту и с каждым разом поднимается всё хуже. Спасают только два сервера на разных адресах, которые чередуешь: пока сидишь на одном, второй отлёживается.
По API - он там уже есть: фронтенд сам ходит только через REST, своего внутреннего протокола нет. Basic auth, и всё доступно: серверы, клиенты, старт/стоп, трафик, выдача конфигов и vpn://-ссылок,suspend/activate. Полный список эндпоинтов - в DOCS.md, раздел "Эндпоинты API". Из планов -отдельный токен вместо пароля и OpenAPI-спека, чтобы удобнее работать с tg-ботами
Если руками - никакой формулы там нет, я просто держу в голове несколько правил.
Первым делом выбираю MTU, а не паддинги. Потому что чем больше MTU, тем меньше места остаётся под паддинг: пакет с обвесом должен влезть в 1500 байт, и на MTU 1420 под паддинг остаётся всего байт 20, а на 1280 - все 150. Если перебрать, каждый большой пакет начнёт фрагментироваться, а это и медленно, и заметно - ровно то, от чего мы прячемся.
S1-S4ставлю одинаковые, где-то от 15 до того потолка, что получился выше. Меньше 12 нельзя вообще - оттуда берётся nonce для шифрования заголовков. И одна ловушка:S2не должно быть равноS1 + 56, иначе сервер не сможет отличить один тип пакета от другого. Конфиг при этом запишется без ошибок, просто хендшейк никогда не случится.Jcберу случайное от 4 до 12,Jmin= 8,Jmax= 80 - это из документации, трогать незачем.H1-H4оставляю 1, 2, 3, 4. В 3.x заголовок и так шифруется, снаружи его не видно, так что случайные числа там ничего не добавляют - только ещё четыре значения, которые должны совпасть у всех клиентов.Ключ
HeaderProtectionKey-openssl rand -base64 32, один на сервер, и тот же самый у всех клиентов.RandomTrailers = trueтоже с обеих сторон, иначе сервер молча выкинет хендшейк.DisableCookies = true- только на своей стороне, для домашнего сервера нормально. Тайминги не трогаю вообще, дефолты WireGuard годами работают. Разве чтоPersistentKeepalive = "22-30", чтобы у всех не было ровно 25.В панели github.com/mycelium-mesh/amneziawg-ui есть генератор, который под выбранный MTU сразу выдаёт правильный набор, ключ берёт откуда надо и раздаёт клиентам те же значения, так что ничего не разъедется.
Я с 2023 года ни разу не сталкивался с блокировками. Палит не недостаточно случайный Jc, а одинаковые длины пакетов и порт 51820. Убрали это - и дальше просто работает VPN. Единственное исключение - Китай. Там обфускация не помогает: гасят не протокол, а IP - соединение начинает отваливаться по таймауту и с каждым разом поднимается всё хуже. Спасают только два сервера на разных адресах, которые чередуешь: пока сидишь на одном, второй отлёживается.
По API - он там уже есть: фронтенд сам ходит только через REST, своего внутреннего протокола нет. Basic auth, и всё доступно: серверы, клиенты, старт/стоп, трафик, выдача конфигов и vpn://-ссылок,suspend/activate. Полный список эндпоинтов - в DOCS.md, раздел "Эндпоинты API". Из планов -отдельный токен вместо пароля и OpenAPI-спека, чтобы удобнее работать с tg-ботами
По каскаду - даже не думал пока что