- Как запустить свой сервер с белым ip из локальной домашней сети
- Вступление
- Что мы имеем?
- Какая цель?
- Установка постоянного локального адреса на сервер
- Рассказываем роутеру про сервер
- Защита сервера
- SSH
- Firewall
- Fail2ban
- Теперь сделаем проверку более сложного уровня
- Источники
- Туториал: Настройка своего VPN сервера
- Основная цель
- Введение
- Шаг 1 — поиск подходящего хостинга / создание аккаунта
- Шаг 2 — покупка нужной конфигурации сервера
- Шаг 3 — установка VPN на компьютер
- Шаг 4 — установка VPN на телефон
- Заключение
- Благодарности
Как запустить свой сервер с белым ip из локальной домашней сети
Я не являюсь сетевым инженером, я просто студент, который решил записать свои действия, чтобы поделиться со знакомыми и не забыть, что я вообще делал. Буду очень рад если меня поправят в комментариях. Этот конспект написан по другим статьям с различных ресурсов, прошу поддержать авторов тех гайдов, у них некоторые моменты расписаны более подробно и возможно вам подойдет именно их статья.
Буду стараться писать очень подробно, чтобы человек, знающий столько сколько я в начале своего пути, все понял.
Вступление
Мне очень давно хотелось поднять видимый извне сервер в своей домашней локальной сети, чтобы использовать его для pet проектов или же возможно для сайта-визитки.
Возникает вопрос: почему не использовать для этого самую простую VPS и не тратить мощности своего компьютера? Ответ очень прост: статический белый ip у меня уже был и давно, а в качестве сервера я решил использовать не основной пк а старый ноутбук. Поэтому дополнительных затрат не предвиделось.
Что мы имеем?
Для справки, на момент написания публикации (2021) стоимость минимальной VPS на доверенном ресурсе — 400 руб. , стоимость белого ip у моего провайдера — 179 руб.
- Ноутбук (intel core i5 M 560 2,67 GHz, 4/60Gb) с установленной Ubuntu Server 20.04.3 (для создания установочной флешки советую использовать rufus (win) или balenaEtcher (os x)
- роутер провайдера с подключенным пакетом «статический ip адрес»
- второй компьютер для тестов (все что делается через браузер можно, конечно, сделать и на телефоне, вопрос удобства)
- хорошая музыка чтобы процесс не был скучным
Какая цель?
Сделать python3 flask (взял для простоты) сервер доступный из вне.
Установка постоянного локального адреса на сервер
Приступим. Во-первых установим постоянный ip для нашего сервера в локальной сети. По идее изначально используется DHCP (протокол, по которому каждое устройство в сети получает относительно случайный ip адрес, а нам нужен постоянный для сервера, чтобы роутер всегда знал куда отправлять внешние запросы)
- Смотрим интерфейс, который мы используем, с помощью ifconfig
- В зависимости от того какой тип соединения мы используем (кабель или wi-fi) выбираем файл в катологе /etc/netplan И настраиваем его примерно так:
network: ethernets: ethx: dhcp4: no dhcp6: no addresses: [192.168.1.200/24, ] gateway4: 192.168.1.1 nameservers: addresses: [192.168.1.1, ] version: 2
- addresses (6) — адрес нашего сервера в локальной сети, как раз то что мы делаем постоянным /24 означает маску сети (255.255.255.0), в данной ситуации первые 3 числа должны совпадать с локальным адресом роутера, а последнее число произольно. Я выбрал адрес 192.168.1.200
- gateway4 — шлюз нашей сети, то есть роутер. Его адрес 192.168.1.1, обычно он общий для всех роутеров одного провайдера, так что погуглите (иногда его адрес указывается там же где и пароль от wi-fi)
- в строке nameservers: addresses (9) указываем тот же адрес что и в gateway4 (простите, но я беспонятия что это)
- dhcp4: no и dhcp6: no указывают, что мы не будем использовать протокол DHCP
На этом этапе возможно потребуется проверка:
- На сервере: sudo tcpdump -i ethx icmp and icmp[icmptype]=icmp-echo Чтобы следить за тем кто нас пингует.
- И пингуем его с другого пк внутри локальной сети по адресу 192.168.1.200 .
Также строит проверить есть ли доступ к интернету у нашего ноутбука-сервера: используем команду ping с доменом google.com .
Все это подробно описано в этой статье для Ubuntu, для других дистрибутивов гуглите «Установка статического ip «.
Рассказываем роутеру про сервер
Теперь наш сервер знает, что мы имеем дело с постоянным ip и не используем протокол DHCP. Самое время рассказать роутеру, что внешние запросы нужно отправлять на сервер. Чтобы получить доступ к настройкам роутера вбиваем в поисковую строку его ip адрес.
- Установить DMZ зону внутри настроек роутера и указать туда локальный адрес нашего сервера. Этим действием мы делаем наш сервер публичным и теперь любой может попробовать подключиться к нему.
- Пробросить порты нужных нам ресурсов через роутер на сервер (перенаправление портов). Не забудьте порт SSH (22) и flask (5000) Попробуйте пингануть его из внешней сети.
Все норм? Теперь наш сервер виден из вне, самое время подумать о безопасности.
Защита сервера
Я буду настраивать SSH , Firewall и fail2ban по вот этому очень хорошему гайду. (еще раз, моя цель не скопипастить все что я нашел, а собрать все в одно место, чтобы не забыть) Я делаю все для Ubuntu Server, но в том гайде есть для CentOS и Red Hat.
Во-первых сделаем еще одного пользователя помимо root (1), зададим ему пароль (2) и разрешим использовать root привелегии через sudo (3):
useradd [options] passwd usermod -aG sudo
SSH
Настраивайте по инструкции в статье упомянутой выше. Там мне совсем нечего добавить, кроме подроностей о public и private ключах:
- ssh-keygen -t rsa генерирует 2 ключа открытый (тот что имеет . pub ) и приватный который (не имеет такого расширения)
- Открытый ключ отправляется на сервер в файл authorized_keys в папке /.ssh в домашней директории пользователя ( /home/username/.shh/authorized_key ) Для этого можно использовать команду:
cat ~/.ssh/id_rsa.pub | ssh root@ip-адрес-сервера 'cat >> ~/.ssh/authorized_keys'
- Закрытый ключ используется для аутентификации, скопируйте его куда-нибудь чтобы не потерять Использовать ключ для входа можно командой:
Важно отключить аутентификацию по паролю иначе мы все это делали зря.
Firewall
Используя проброс портов мы разрешаем доступ к нашему серверу лишь посредством подключений к определенным портам, но DMZ зона допускает почти все типы запросов. Используя DMZ зону нам строит поднять FireWall на сервере, который как раз и ограничит количество портов которые могут принимать внешние запросы.
Разрешим использование SSH (1) и порта 5000 (2) в ufw (Firewall), и запустим Firewall (3):
sudo ufw allow ssh sudo ufw allow 5000/tcp sudo ufw enable
Подняв FireWall важно не забыть разрешить доступ к порту SSH (22) и порту Flask (5000) (ну или другого ПО, которое мы собираемся использовать). Я забыл и долго не понимал, почему мой сервер не отвечает.
На сайте хорошо разобраны команды для управления Firewall-ом.
Fail2ban
Fail2ban ограничивает количество попыток подключения, это сильно усложнит подбор аутентификационных данных SSH.
Для начала установим его (1) и запустим (2, 3):
sudo apt install fail2ban systemctl start fail2ban systemctl enable fail2ban
Теперь можем настроить его, используя эти конфигурационные файлы: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf . Во втором находятся ограничения на количество подключений за определенный промежуток времени и время бана.
Теперь сделаем проверку более сложного уровня
sudo apt install python3 sudo apt install pip pip install flask
from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "Hello, World!
"
export FLASK_APP=server.py flask run -h -p 5000
Сервер запущен и теперь мы можем попробовать подключиться к нему с внешнего устройства прямо через строку в браузере, вводя внешний адрес нашего роутера, к примеру:
Источники
Туториал: Настройка своего VPN сервера
Я один из тех, кто использует VPN и для серфинга, и для работы.Тут нужна и скорость и бесперебойность. За последний год я перепробовал около десятка сервисов которые не могли похвастаться ни тем, ни другим. Ряд из них просто перестал работать, а некоторые и вовсе остановил работу на Российском рынке (например Касперский).
Основная цель
В связи с этим я заинтересовался поднятием своего сервиса на базе Российского хостинга с минимальным количеством приседаний и потраченных рублей.
Введение
Актуальность темы подтвержу цифрами взятыми с GoogleTrends.
Очевидно, что тренд выходит на качество новый уровень интереса. По России, плюс/минус такая-же картина. Интерес к VPN обгоняет даже React.js.
Хотя конечно есть темы и попопулярнее.
Я буду настраивать VPN на базе хостинга TimeWeb так как пользуюсь их сервисом с 2014г. Мне нравится панель, быстрая обратная связь и набор услуг которые они предоставляют
Шаг 1 — поиск подходящего хостинга / создание аккаунта
Так как я зарегистрирован и у меня есть активный «план», то я просто кликаю на кнопку «Вход для клиентов»
Затем кликаем на кнопку VDS/VPS Серверы (слева внизу)
Открывается модальное окно с запросом на регистрацию
После клика на кнопку произойдет два действия — отправится письмо на почту с данными вашего нового аккаунта и переход на страницу панели Cloud
Переходим на новое окно, я сразу переключил на темную тему (хорошо бы и на хабре такую получить). Удаляем облачный сервер который создался автоматически (в моем случае это Honest Maxwing). Иначе когда будете на этапе оплаты, то вам накинут пару десятков тысяч рублей. Я сначала не заметил и потом не сразу понял за что с меня столько хотят взять
Шаг 2 — покупка нужной конфигурации сервера
Жмем кнопку «Создать» -> «Облачный сервер». Переходим на окно конфигурации сервера. Я себе накликал следующие параметры (scalable NVMe, и плюс бэкапы)
Жмем кнопку «Заказать» и оплачиваем
Ура, у нас появился облачный сервер
На почту должно придти письмо с данными доступа
Переходим на главную страницу
Кликаем на новый сервер. Я его назвал VPN. Статистика пока по нулям
Шаг 3 — установка VPN на компьютер
Проходим на Github для того, чтобы скачать amnesia клиент. В моем случае актуальная версия — 2.1.2. Скачиваем нужный дистрибутив и устанавливаем. Вцелом там нужно кликнуть пару раз кнопку «Далее»
Появляется мастер настройки
Кликаем на кнопку «Setup your own server» и вписываем в поля данные которые пришли в последнем письме. Жмем кнопку «Connect»
Нажимаем «Run setup wizard»
Дальше жмем пару раз кнопку «Next» ничего не меняя пока не встретите кнопку «Start configuring»
Операция настройки может занять несколько минут
Как только настройка завершиться вы увидите следующее окно. Теперь нам нужно добавить новый протокол. Жмем на строчку напротив Proto
Тут стоит стрелочка напротив OpenVpn. Снимаем ее и добавляем новый — я добавлю WireGuard. Я его выбрал руководствуясь данной статьей
Протокол установлен и настроен. Возвращаемся на главную
Давайте сходим куда-нибудь, проверим
Шаг 4 — установка VPN на телефон
Устанавливаем на телефон приложение WireGuard (Iphone, Android). В моем случае я ставлю на iPhone но там нет разницы. Но прежде чем пойдем «туда», давайте сгенерируем конфиг для настройки VPN. Кликаем опять на строчку наротив Proto и кликаем на протокол WireGuard
Далее кликаем на иконку «Поделиться»
«Share for WireGuard» -> «Generate config»
Все, этот QR код не закрываем. Он нам пригодится для настройки VPN на телефоне.
Идем в магазин приложений, устанавливаем WireGuard -> «Add a tunnel» -> «Add from QR code» -> «Allow» -> называем свое соединение как вам угодно -> включаем VPN и проверяем его. Ура, работает )
Кстати, статистика в панели вашего cloud сервера уже должна обновиться. Пики показывают на тот момент где мы настраивали соединение. Потом оно так сильно уже не скачет
Заключение
В результате проделанной работы вы настроете VPN который вполне годится как для серфинга, так и для работы
Благодарности
Спасибо всем за участие, буду более ответственно подходить к теме и содержимому. Статью оставлю, будет мне напоминанием о том как писать не нужно 🙂