Ответ
Для безопасного доступа к сервисам в локальной сети извне я использую несколько подходов, в зависимости от требований к безопасности и доступности сети.
1. Проброс портов (Port Forwarding) на маршрутизаторе: Это базовый метод, если у вас есть публичный IP-адрес и доступ к настройкам роутера.
- Назначаю целевому серверу в локальной сети статический IP (например, через DHCP-резервацию).
- На роутере настраиваю правило проброса внешнего порта (например, 2222) на внутренний адрес сервера и порт 22.
- Подключаюсь извне:
ssh user@your-public-ip -p 2222.
2. Обратный SSH-туннель (Reverse SSH Tunnel): Идеально, если локальная сеть находится за строгим NAT или фаерволом, но есть доступ к внешнему серверу (например, в облаке).
- С локальной машины устанавливаю постоянное соединение, пробрасывая её порт на внешний сервер:
ssh -N -R 2222:localhost:22 user@external-server.com - Теперь подключение к порту 2222 на
external-server.comбудет перенаправлено на SSH-демон моей локальной машины. - На практике для надёжности использую
autosshили systemd-сервис для поддержания туннеля.
3. Использование облачных туннелей (например, Cloudflare Tunnel): Современный метод, не требующий открытия входящих портов на роутере и упрощающий доступ.
- Устанавливаю
cloudflaredна локальную машину и аутентифицирую его. - Создаю туннель, который безопасно проксирует трафик:
cloudflared tunnel --url ssh://localhost:22 --hostname ssh.yourdomain.com - Подключаюсь из любой точки:
ssh user@ssh.yourdomain.com.
Критически важные меры безопасности для любого метода:
- Отказ от паролей: Использую исключительно аутентификацию по SSH-ключам (
ssh-keygen). - Защита от перебора: Настраиваю
fail2banдля автоматической блокировки IP-адресов после нескольких неудачных попыток. - Нестандартный порт: Меняю стандартный порт SSH (22) на другой, чтобы снизить шум от автоматических сканеров.
Ответ 18+ 🔞
А, ну это же классика, ёпта! Ты хочешь к своим домашним сервисам извне подлезть, как будто ты дома сидишь? Ну, вариантов есть, конечно, овердохуища, но главное — не накосячить, а то тебе потом будет хиросима и нигерсраки, когда какой-нибудь пидарас шерстяной в твою сеть ввалится.
1. Проброс портов на роутере (Port Forwarding): Это как самый прямой путь, если у тебя есть свой белый IP и ты царь и бог в настройках своего роутера. Но тут, чувак, нужно быть не распиздяем.
- Сперва привяжи своей домашней машинке в сети статичный адрес, чтобы она не прыгала. В роутере это обычно называется «резервация DHCP» — сделай и забудь.
- Потом лезь в настройки роутера, ищи «Проброс портов» или «Port Forwarding». Суть простая: говоришь ему — «Слушай, если кто-то стучится снаружи на порт, например, 2222, ты его сразу тащи на адрес
192.168.1.100на порт 22». Всё. - Подключаешься потом из кафешки:
ssh user@твой-публичный-ip -p 2222.
Но это, блядь, как выйти на балкон в трусах и кричать «Я тут!». Все сканеры интернета тебя видят. Безопасность — на нуле, если не настроить. Об этом ниже.
2. Обратный SSH-туннель (Reverse SSH Tunnel): Вот это уже хитрая жопа! Идеально, если твой провайдер тебя так засунул за NAT, что никакой проброс не работает, или ты просто бздишь дыры в роутере сверлить.
- Нужен где-то снаружи свой сервак (VPS какой-нибудь дешёвый). С домашней машины делаешь такую команду:
ssh -N -R 2222:localhost:22 user@external-server.com - Перевод на русский: «Дорогой внешний сервер, открой у себя порт 2222 и всё, что на него придет, переправляй мне домой на порт 22». И туннель готов. Теперь чтобы подключиться домой, ты коннектишься не на свой домашний IP, а на порт 2222 внешнего сервера.
- Проблема в том, что туннель может рваться. Поэтому умные люди используют
autosshили прописывают это дело как systemd-сервис, чтобы оно само поднималось. Иначе проснёшься — а доступ нет, и сидишь, как дурак.
3. Облачные туннели (типа Cloudflare Tunnel):
Это, бля, вообще магия уровня «хуй с горы». Никаких портов на роутере открывать не надо, никаких своих серверов крутить. Просто ставишь на домашнюю машину одну хуйню (cloudflared), настраиваешь, и она сама выходит в интернет и говорит облаку: «Эй, я тут, принимай трафик».
- Команда проще некуда:
cloudflared tunnel --url ssh://localhost:22 --hostname ssh.yourdomain.com - И всё. Теперь чтобы зайти домой, ты просто пишешь
ssh user@ssh.yourdomain.com. Красота, да? Но тут есть нюанс — доверия к посреднику (Cloudflare) должно быть ебать. Они весь твой трафик видят. Ну, это уже на твоей совести.
А теперь, сука, самое главное — безопасность! Какой бы метод ты не выбрал, без этого ты просто развесил ковёр с надписью «Добро пожаловать, ебаньки».
- Пароли — на хуй! Только SSH-ключи. Сгенерировал (
ssh-keygen), публичный ключ закинул на сервер, приватный бережёшь как зеницу ока. Парольную аутентификацию в настройках SSH-демона вырубаешь нахуй. Это правило номер ноль. - Защита от тупых ботов: Ставь
fail2ban. Эта штука будет смотреть логи, и если с какого IP идёт куча неудачных попыток зайти — просто заблокирует его на время на уровне фаервола. Красота. - Не светись как дурак: Меняй стандартный порт SSH (22) на какой-нибудь другой. Не то чтобы это была суперзащита, но это отсеет 99% тупых сканеров, которые ломятся только на 22-й порт. Меньше шума — спокойнее спится.
Вот и вся наука. Выбирай, что тебе ближе, но не забудь про последний раздел, а то будет тебе вилка в глаз или в жопу раз.