Инфраструктуру как у ЦОД в рамках домашней сети.

Приветствую всех! Совсем недавно, мне в голову закралась одна не самая лучшая идея, которая уже долгое время меня беспокоила. У меня был свой 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

iptables -t nat -F iptables -F iptables -t nat -A POSTROUTING -o neko-tun -j MASQUERADE iptables -A FORWARD -i eno1 -o neko-tun -j ACCEPT iptables -A FORWARD -i neko-tun -o eno1 -m state --state RELATED,ESTABLISHED -j ACCEPT

Первой командой, я очистил предыдущие правила (это опционально), в качестве TUN интерфейса от Nekobox у меня выступал neko-tun, у вас оно может быть другим, проверяйте через "ip a". Далее я разрешил трафик от локальной сети к VLESS, у меня интерфейс назывался "eno1", у вас может иначе. Обратите внимание на команду выше.

Далее, в роутере, в разделе с настройкой DHCP, я выбрал "Адрес шлюза": "192.168.1.100" - теперь трафик будет идти через сервер.

В качестве проверки, я отредактировал на телефоне, в подключении к Wi-Fi шлюз на заявленный выше, и бинго - у нас IP заграничного сервера, т.е. VLESS (ifconfig.me - в помощь, не реклама)

Если всё работает так, как указанно у меня - значит можно сохранять настройки.

sudo apt install iptables-persistent sudo netfilter-persistent save sudo sysctl -p

В качестве DNS, я выбрал Cloudflare (к ним, почему-то, у меня доверия больше, чем к тому же Google):

1.1.1.1 и 1.0.0.1

Далее, я решил установить Pi-hole, для блокировки рекламы

curl -sSL https://install.pi-hole.net | bash

После установки, скрипт покажет ссылку на панель управления + пароль (подключиться можно также из локальной сети по IP-адресу машины, в моем случае 192.168.1.100).

Для логирования трафика, что рекомендовано (позже скажу зачем), я выбрал пакет ntopng. Веб-интерфейс немного сложный, но если почитать документацию, то разобраться в целом можно.

sudo apt install ntopng

После установки, доступ осуществляется по http://IP:3000, логин и пароль по умолчанию admin.

Также, что хочу сказать. Pi-hole, из коробки блокирует >220.000 рекламных доменов, однако, можно добавить следующие репозитории с листом для блокировки в Pi-hole веб-интерфейсе. Для этого, после авторизации, нужно перейти в раздел "lists" и там, в области "Add a new subsribed list" поочередно добавить следующие домены:

https://big.oisd.nl https://small.oisd.nl https://nsfw.oisd.nl https://nsfw-small.oisd.nl

После добавления, нужно внести изменения, чтобы Pi-hole скачал базы.

sudo pihole -g

Полностью от рекламы не избавит, но меньше её станет в разы. Вплоть до >837.000 рекламных доменов будет заблокировано, что в 4 раза больше заводского.

Инфраструктуру как у ЦОД в рамках домашней сети.

Немного пояснений.

Логирование трафика я посоветовал не зря. Если трафик у вас ограничивается провайдером или же хостером зарубежного сервера, то логирование будет весьма кстати. Таким образом, вы сможете заранее просматривать кто из локальной сети "скушал" больше всего трафика и на что именно: YouTube, Telegram и так далее. Ntopng также отображает на что ушёл трафик и при необходимости, можно заблокировать определенные ресурсы и его дочерние сервера, а также ограничить скорость тому или иному пользователю локальной сети (полезно, если использует много людей).

Опционально.

Чтобы я мог понимать, кто есть кто в моей локальной сети, я прибег к тому, что заранее подключил всех членов семьи к Wi-Fi и Ethernet, после чего присвоил и им статические IP-адреса.

В моём случае, присвоение шло по логике:

192.168.0.1хх - для домашних ПК, подключенных по Ethernet (в т.ч. сервер) 192.168.0.6x - для телефонов подключенных по Wi-Fi 192.168.0.7х - для планшетов, ноутбуков и пр. 192.168.0.1х - для более низкоуровневых устройств, по типу доп. роутеров или роботов-пылесосов.

К сожалению, в таком случае, приходится вручную забивать параметры, нежели просто ввести пароль от Wi-Fi и всё. В настройках нужно выбрать "Статический IP", а далее:

192.168.х.ххх (смотря что вы присвоили роутером) 255.255.255.0 (это 24 префикс, маска сети) 192.168.1.100 (в моём случае, это IP-адрес сервера домашнего, который я использую как шлюз) DNS-сервера: 1.1.1.1 и 1.0.0.1 (здорово, если есть возможность выбора TLS или DoH для DNS)

Если вы всё сделали верно, то все устройства могут использовать один inbound вашего заграничного сервера, поскольку весь трафик будет фильтроваться и идти через один домашний сервер.

Напомню также, что у вас должен быть установлен:

sudo apt install net-tools # нужен для работы Ntopng)

И в настройках IPv4 для домашнего сервера в качестве шлюза выбран IP-адрес роутера.

В моём случае, конфигурация основного проводного подключения на Zorin OS сервере была такой:

192.168.1.100 # статический IP-адрес от роутера 255.255.255.0 # маска сети, с 24 префиксом 192.168.1.1 # шлюз, IP-адрес роутера 1.1.1.1 # DNS №1 1.0.0.1 # DNS №2

На клиентских устройствах в локальной сети, к примеру, будет так:

192.168.1.120 # статический IP-адрес от роутера 255.255.255.0 # маска сети, с 24 префиксом 192.168.1.100 # шлюз, IP-адрес домашнего сервера 1.1.1.1 # DNS №1 1.0.0.1 # DNS №2

Напомню, что в зависимости от роутера, может быть и другая маска подсети, а также шлюз и IP-адрес роутера.

Инфраструктуру как у ЦОД в рамках домашней сети.

Выше показана таблица, аналогичная IP-калькулятору, с информацией по каждому из типовых IP-адресов, маски подсети, которые обычно назначаются в домашних и офисных сетях.

10.0.0.1 # у CPE от Yota например. Держите это в уме.​

Бонус.

Как мы все знаем, такие компании, как: VK LLC, GosUslugi и тому подобные конторы не особо одобряют подключение из Хельсинок, Франкфурта и других стран ;), а потому, в настройках маршрутизации Nekobox можно внести следующие IP-адреса и домены, которые будут идти напрямую через IP-адрес который вам выдан провайдером, чтобы избежать конфликтов при работе.

IP-адреса:

87.240.128.0/18 93.186.224.0/20 95.142.192.0/20 95.213.0.0/17 185.32.248.0/22 79.137.139.0/24 79.137.164.0/24 79.137.180.0/24 79.137.183.0/24 87.240.166.0/24 87.240.167.0/24 91.231.132.0/24 93.186.232.0/21 95.142.200.0/24 95.213.44.0/24 95.213.45.0/24 185.32.250.0/24 185.131.68.0/23 95.108.128.0/17 141.8.128.0/18 37.140.128.0/18 37.9.64.0/18 5.255.192.0/18 5.45.192.0/18 77.88.0.0/18 93.158.128.0/18 178.154.128.0/19 178.154.160.0/19 213.180.192.0/19 84.252.160.0/19 87.250.224.0/19 92.255.112.0/20 178.154.131.0/24 185.32.187.0/24 213.180.199.0/24 37.9.112.0/24 5.255.197.0/24 5.255.255.0/24 5.45.202.0/24 5.45.205.0/24 5.45.213.0/24 5.45.215.0/24 77.88.44.0/24 77.88.55.0/24 77.88.8.0/24 87.250.247.0/24 87.250.255.0/24

Домены:

vk.com *.vk.com vkontakte.ru *.vkontakte.ru m.vk.com cs[0-9].vk.com yandex.ru *.yandex.ru ya.ru *.ya.ru music.yandex.ru *.music.yandex.ru gosuslugi.ru *.gosuslugi.ru

Также, вот таблица по нагрузке. Кому-то может пригодиться.

Инфраструктуру как у ЦОД в рамках домашней сети.

В целом, при перегрузе сети, ничего критичного не произойдёт конечно, но неудобства будут: подвисания, долгие загрузки страниц, повышение пинга и прочее. При таких случаях, лучше апгрейдить железо, делать больше 1 Gbps подключение по кабелям и урезать скорость самим устройствам в локальной сети.

Заключение.

Теперь у вас дома есть небольшой ЦОД, как у меня. Вместо мини-ПК можно взять и какой-нибудь старый ноут, или ненужный ПК. В общем, всё на ваше усмотрение, главное это наличие системы Linux на отдельном устройстве, роутер и локальная сеть.

Надеюсь, кому-то пригодиться эта статья:) Всем удачки!

Начать дискуссию