Зачем это может понадобится...
Размещать дома любые тяжёлые узлы, не раскошеливаясь на аренду сервера сопоставимого с домашним компом. Снимать сервер с 64 оперативки это не дёшево, добавить в свой комп оперативки - затея беспроигрышная.
В чём отстой...
Диванный дата-центр, а может быть даже "сервер от слова серить" (по тому что в туалете), не даст гарантий работы и доступности 24 на 7. Может отвалиться интернет и вырубиться электричество.
Можно преодолеть отстой...
Современные компы и ноуты можно настроить включаться при подаче питания. Ноутбук может выключаться скриптом при разряде аккумулятора.
Наглядно о втором варианте (всё делается мышкой по инструкциям от DDNS сервисов)...
Наглядно о третьем...
Как видите, я не делаю доступным из интернета сам роутер, только серверный компик (Mac Mini на серванте).
Общая рекомендация будет пожалуй в том, чтобы отключить раздачу случайных адресов в домашней сети. Или выключить DHCP или оставить, но задавать IP устройствам вручную.
Как работает связка... Домашний комп соединяется с сервером по SSH обратным туннелем, сервер проксирует запросы к тяжёлому узлу на комп.
Это может показаться жутко сложным... Но... Это одна маленькая команда в терминале.
Туннель это как вход по SSH для управления сервером...
name - имя пользователя (под которым "заходите" на сервер)
server - IP сервера
~/.ssh/key - путь до файла ключа (вместо пароля)
22 - стандартный порт SSH соединения (если переназначали - замените своим)
Вся магия прокладки туннеля это дописать к команде входа немного буковок с циферками.
666 - принимающий запросы порт сервера (направляйте в этот порт запросы от сервера к дому)
8080 - порт дома (дом принимает запросы этим портом)
Вкусовщина (в примере я написал словами вместо цифр, чтобы цифры портов были заметнее глазу).
hostname - хост сервера (альтернатива 0.0.0.0)
localhost - хост дома (альтернатива 127.0.0.1)
Я бы написал для облегчения понятности длинными флагами (--port вместо -p), но длинных флагов у команды ssh нету... Только короткие... Это грустненько.
Кроме команды ещё нужно обратить внимание на парочку настроек SSH в файле /etc/ssh/sshd_config (разрешить туннели, разрешить форвардинг, ограничить максимум сессий до достаточного вам количества).
После настроек на забудьте перезапустить демона sshd.
Соединять можно что угодно, хоть клиент на сервере с базой данных дома. В простой пример приведу серверный NGINX проксирующий запросы в туннель к сайту дома. Обойтись можно единственной proxy_pass директивой.
Чтобы не было такого "все пользователи с одинакового айпишника заходят"
настройте NGINX на VDS передавать реальные айпишники. Это вообще не обязательно, это если вы хотите правильную статистику.
Размещать дома любые тяжёлые узлы, не раскошеливаясь на аренду сервера сопоставимого с домашним компом. Снимать сервер с 64 оперативки это не дёшево, добавить в свой комп оперативки - затея беспроигрышная.
В чём отстой...
Диванный дата-центр, а может быть даже "сервер от слова серить" (по тому что в туалете), не даст гарантий работы и доступности 24 на 7. Может отвалиться интернет и вырубиться электричество.
Можно преодолеть отстой...
Современные компы и ноуты можно настроить включаться при подаче питания. Ноутбук может выключаться скриптом при разряде аккумулятора.
Как сделать свой комп доступным из интернета...
Есть несколько путей с разной сложностью и ценой.- доплачивать провайдеру за выделенный IP адрес и открытые порты
- проложить путь через сервисы DDNS
- использовать такую функцию роутера
- арендовать самый дешёвый VDS и соединить его с домашним компом
Наглядно о втором варианте (всё делается мышкой по инструкциям от DDNS сервисов)...
Наглядно о третьем...
Как видите, я не делаю доступным из интернета сам роутер, только серверный компик (Mac Mini на серванте).
Общая рекомендация будет пожалуй в том, чтобы отключить раздачу случайных адресов в домашней сети. Или выключить DHCP или оставить, но задавать IP устройствам вручную.
Дешёвый VDS связанный с домашним компом
Мне этот вариант видится как самый лучший. Это не бесплатно, но дёшево позволяет разворачивать любые узлы. На слабом серверочке можно разместить сайт, а оттуда проложить домой связь с тяжёлым и прожорливым узлом. Если домашний узел недоступен, на сайте можно сделать заглушку... Чтобы хоть что-то показывать пользователям.Как работает связка... Домашний комп соединяется с сервером по SSH обратным туннелем, сервер проксирует запросы к тяжёлому узлу на комп.
Это может показаться жутко сложным... Но... Это одна маленькая команда в терминале.

Bash:
ssh name@server -i ~/.ssh/key -p 22 -v -R hostname:666:localhost:8080
Туннель это как вход по SSH для управления сервером...
name - имя пользователя (под которым "заходите" на сервер)
server - IP сервера
~/.ssh/key - путь до файла ключа (вместо пароля)
22 - стандартный порт SSH соединения (если переназначали - замените своим)
Вся магия прокладки туннеля это дописать к команде входа немного буковок с циферками.
666 - принимающий запросы порт сервера (направляйте в этот порт запросы от сервера к дому)
8080 - порт дома (дом принимает запросы этим портом)
Вкусовщина (в примере я написал словами вместо цифр, чтобы цифры портов были заметнее глазу).
hostname - хост сервера (альтернатива 0.0.0.0)
localhost - хост дома (альтернатива 127.0.0.1)
Я бы написал для облегчения понятности длинными флагами (--port вместо -p), но длинных флагов у команды ssh нету... Только короткие... Это грустненько.
Кроме команды ещё нужно обратить внимание на парочку настроек SSH в файле /etc/ssh/sshd_config (разрешить туннели, разрешить форвардинг, ограничить максимум сессий до достаточного вам количества).
Код:
PermitTunnel yes
AllowTcpForwarding yes
MaxSessions 10
Соединять можно что угодно, хоть клиент на сервере с базой данных дома. В простой пример приведу серверный NGINX проксирующий запросы в туннель к сайту дома. Обойтись можно единственной proxy_pass директивой.
NGINX:
location ~ / {
proxy_pass http://127.0.0.1:666;
}
Чтобы не было такого "все пользователи с одинакового айпишника заходят"

NGINX:
location ~ / {
proxy_pass http://127.0.0.1:666;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
}