Назад
Самогосподарювання за CGNAT: VPS-міст і тунель WireGuard
SiTech AI Team2 წთ. საკითხავი

Самогосподарювання за CGNAT: VPS-міст і тунель WireGuard

Через дефіцит адрес IPv4 провайдери ділять одну публічну IP між цілими районами, і переадресація портів удома більше не працює. Автор описує вихід: дешевий VPS-міст і тунель WireGuard.

Раніше достатньо було відкрити порт на домашньому маршрутизаторі й прив'язати динамічний DNS до публічної адреси, щоб запускати сервіси з дому. Дефіцит адрес IPv4 це змінив: оператори тепер ділять одну публічну адресу між цілими районами й маршрутизують запити через додатковий рівень NAT усередині власної мережі — carrier-grade NAT (CGNAT). Адреса маршрутизатора лишається приватною й транслюється на виході, тож публічна адреса належить операторові, і переадресація портів більше не працює.

У своєму блозі Девід Альварес Роса розповідає, як усе ж таки тримає сервіси вдома: вони працюють на машині середнього класу в підвалі його матері на півночі Іспанії та виходять в інтернет через дешевий VPS, який виконує роль моста у французькому дата-центрі.

Міст, а не хостинг-провайдер

Між двома машинами працює двонаправлений тунель WireGuard: він передає всі пакети на всіх портах від моста до домашньої машини і навпаки. Головна перевага в тому, що тунель ініціює саме домашній сервер, тому статична виділена IP вдома не потрібна. Купити статичну адресу в іспанського провайдера можна приблизно за 20 євро на місяць, але плата за міст — 39 мс додаткового RTT.

Конфігурація: DNAT, окрема таблиця маршрутизації та справжні IP клієнтів

На боці моста інтерфейс wg0 має адресу 10.0.0.1/24 і слухає порт 51820 з одним peer — 10.0.0.2/32. Директива PostUp через iptables встановлює правила NAT і пересилання на рівні ядра, а PostDown прибирає їх, коли тунель падає. Перші два правила виключають порт 2222 (SSH) і 51820 (сам тунель), решта пересилає весь трафік на всіх портах до домашнього сервера. Адреса призначення переписується, а джерела — ні, тому домашній сервер бачить справжні IP клієнтів.

З боку домашнього сервера wg0 має адресу 10.0.0.2/24 і Table = off; PostUp додає маршрут за замовчуванням через тунель у таблицю 200 і правило ip rule для трафіку з 10.0.0.2. Завдяки цьому відповіді йдуть назад через міст, а власний трафік домашньої машини залишається на домашньому маршрутизаторі. Після цього SSH на ssh.alvarezrosa.com портом 22 потрапляє на домашній сервер, а порт 2222 — на міст. Тунель підтримують AllowedIPs 0.0.0.0/0 і PersistentKeepalive 25.

Що може відмовити

Зламатися можуть три частини. Завдання cron на домашньому сервері перевіряє, чи SSH ще відповідає, і перезавантажує машину, якщо ні. Якщо впаде міст, автор радить запасну точку входу — наприклад, Cloudflare tunnel або Tailscale безпосередньо до домашнього сервера. Короткий розрив тунелю відновлюється сам, а триваліші збої покривають два попередні випадки.

SSiTech

SiTech — веброзробка з підтримкою AI

Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.