Инфраструктуру как у ЦОД в рамках домашней сети.
Приветствую всех! Совсем недавно, мне в голову закралась одна не самая лучшая идея, которая уже долгое время меня беспокоила. У меня был свой BPN-сервер в Хельсинках, однако, чтобы все могли использовать его (члены семьи), приходилось делать в 3x-ui панели множество inbound, всё это работало в целом нестабильно, а встроенный в панель x-ui инструмент для блокировки рекламы, торрентов и пр. вовсе не держал планки. Посему, было принято решение организовать мини-ЦОД у себя дома.
Обращаю ваше внимание, что в рамках данной статьи я лишь приближенно объясню шаги исполнения своего "проекта". Более подробно, как устанавливать те или иные пакеты в Linux-подобных дистрибутивах - я объяснять не буду. Приступим.
Выбор серверов.
Мне необходимо было два сервера: один домашний, и один заграничный. Выбор пал на adminvps.ru (не реклама), поскольку о них шли неплохие отзывы, а в качестве локации было принято решение взять Финляндию (Хельсинки), поскольку это относительно близко к РФ, что существенно снижало задержки. Вооружившись сервером за ~1300р/мес, я отправился за поиском домашнего сервера.
Проблемой поиска стало то, что мне нужно было бюджетное решение, которое послужило бы мне долгое время. Raspberry Pi, конечно, неплохое решение, но учитывая нагрузку, я взял с маркетплейса Ozon сервер за весьма дипломатичную цену в 14.000р (ссылка, НЕ РЕКЛАМА)
Данный мини-ПК обладает весьма неплохими характеристиками, и в целом может выдержать нагрузку, которая будет описана ниже. Учитывая наличие возможности PXE-загрузки, установка OC не стала проблемой. Поставил туда Zorin OS (не реклама).
Основное оборудование.
В качестве роутера, который позже превратился лишь в DHCP сервер, я взял TS-4022, от Ростелекома (увы, иного выбора не дано, поскольку роутеров с PON достаточно мало).
Далее, я присвоил серверу статический IP-адрес: 192.168.1.100 (к примеру), после чего принялся за установку основного ПО.
Для круглосуточного доступа к серверу, даже за пределами домашней сети, я приобрел у того же РТК - Статический IP, сделав маршрутизацию для VNC-сервера. После этого, я поставил себе новую цель: сделать сервер - шлюзом.
На заграничный сервер, как упоминалось ранее, я установил 3x-ui, и создал inbound на VLESS-конфигурации, после чего установил на домашний сервер Nekobox, добавил конфигурацию и запустил TUN-интерфейс с вышеуказанной конфигурацией.
Моей целью было сделать так, чтобы маршрутизация в локальной сети выглядела так:
[Устройства в сети] --> [Zorin OS (192.168.1.100)] --> [Nekobox (VLESS)] --> [Интернет] и аналогично в обратную сторону: [Интернет] --> [Nekobox (VLESS)] --> [Zorin OS (192.168.1.100)] --> [Устройства в сети].
Для начала, я включил IP forwarding в /etc/sysctl.conf изменив параметр "net.ipv4.ip_forward" с "0" = "1"
Вслед за этим, я настроил iptables для NAT
Первой командой, я очистил предыдущие правила (это опционально), в качестве TUN интерфейса от Nekobox у меня выступал neko-tun, у вас оно может быть другим, проверяйте через "ip a". Далее я разрешил трафик от локальной сети к VLESS, у меня интерфейс назывался "eno1", у вас может иначе. Обратите внимание на команду выше.
Далее, в роутере, в разделе с настройкой DHCP, я выбрал "Адрес шлюза": "192.168.1.100" - теперь трафик будет идти через сервер.
В качестве проверки, я отредактировал на телефоне, в подключении к Wi-Fi шлюз на заявленный выше, и бинго - у нас IP заграничного сервера, т.е. VLESS (ifconfig.me - в помощь, не реклама)
Если всё работает так, как указанно у меня - значит можно сохранять настройки.
В качестве DNS, я выбрал Cloudflare (к ним, почему-то, у меня доверия больше, чем к тому же Google):
Далее, я решил установить Pi-hole, для блокировки рекламы
После установки, скрипт покажет ссылку на панель управления + пароль (подключиться можно также из локальной сети по IP-адресу машины, в моем случае 192.168.1.100).
Для логирования трафика, что рекомендовано (позже скажу зачем), я выбрал пакет ntopng. Веб-интерфейс немного сложный, но если почитать документацию, то разобраться в целом можно.
После установки, доступ осуществляется по http://IP:3000, логин и пароль по умолчанию admin.
Также, что хочу сказать. Pi-hole, из коробки блокирует >220.000 рекламных доменов, однако, можно добавить следующие репозитории с листом для блокировки в Pi-hole веб-интерфейсе. Для этого, после авторизации, нужно перейти в раздел "lists" и там, в области "Add a new subsribed list" поочередно добавить следующие домены:
После добавления, нужно внести изменения, чтобы Pi-hole скачал базы.
Полностью от рекламы не избавит, но меньше её станет в разы. Вплоть до >837.000 рекламных доменов будет заблокировано, что в 4 раза больше заводского.
Немного пояснений.
Логирование трафика я посоветовал не зря. Если трафик у вас ограничивается провайдером или же хостером зарубежного сервера, то логирование будет весьма кстати. Таким образом, вы сможете заранее просматривать кто из локальной сети "скушал" больше всего трафика и на что именно: YouTube, Telegram и так далее. Ntopng также отображает на что ушёл трафик и при необходимости, можно заблокировать определенные ресурсы и его дочерние сервера, а также ограничить скорость тому или иному пользователю локальной сети (полезно, если использует много людей).
Опционально.
Чтобы я мог понимать, кто есть кто в моей локальной сети, я прибег к тому, что заранее подключил всех членов семьи к Wi-Fi и Ethernet, после чего присвоил и им статические IP-адреса.
В моём случае, присвоение шло по логике:
К сожалению, в таком случае, приходится вручную забивать параметры, нежели просто ввести пароль от Wi-Fi и всё. В настройках нужно выбрать "Статический IP", а далее:
Если вы всё сделали верно, то все устройства могут использовать один inbound вашего заграничного сервера, поскольку весь трафик будет фильтроваться и идти через один домашний сервер.
Напомню также, что у вас должен быть установлен:
И в настройках IPv4 для домашнего сервера в качестве шлюза выбран IP-адрес роутера.
В моём случае, конфигурация основного проводного подключения на Zorin OS сервере была такой:
На клиентских устройствах в локальной сети, к примеру, будет так:
Напомню, что в зависимости от роутера, может быть и другая маска подсети, а также шлюз и IP-адрес роутера.
Выше показана таблица, аналогичная IP-калькулятору, с информацией по каждому из типовых IP-адресов, маски подсети, которые обычно назначаются в домашних и офисных сетях.
Бонус.
Как мы все знаем, такие компании, как: VK LLC, GosUslugi и тому подобные конторы не особо одобряют подключение из Хельсинок, Франкфурта и других стран ;), а потому, в настройках маршрутизации Nekobox можно внести следующие IP-адреса и домены, которые будут идти напрямую через IP-адрес который вам выдан провайдером, чтобы избежать конфликтов при работе.
IP-адреса:
Домены:
Также, вот таблица по нагрузке. Кому-то может пригодиться.
В целом, при перегрузе сети, ничего критичного не произойдёт конечно, но неудобства будут: подвисания, долгие загрузки страниц, повышение пинга и прочее. При таких случаях, лучше апгрейдить железо, делать больше 1 Gbps подключение по кабелям и урезать скорость самим устройствам в локальной сети.
Заключение.
Теперь у вас дома есть небольшой ЦОД, как у меня. Вместо мини-ПК можно взять и какой-нибудь старый ноут, или ненужный ПК. В общем, всё на ваше усмотрение, главное это наличие системы Linux на отдельном устройстве, роутер и локальная сеть.
Надеюсь, кому-то пригодиться эта статья:) Всем удачки!