LINUX.ORG.RU
ФорумAdmin

Доступ к домашнему веб-серверу, расположенному за NAT

 ,


0

2

Есть домашний Nextcloud, на который хожу и по домашнему WiFi, и из внешки. Внезапно провайдер для физических лиц прикрыл все порты для доступа из интернета, не только 25, 80, 443, а вообще все.

Набросал пока такое быстрое решение:

1. Настроил SSH-туннель между домашним сервером и VPS
ssh -N -R 80:localhost:80 -R 443:localhost:443 root@vps

Да, пока туннель от рута, потому что пробрасываются порты <1024 (но можно добавить socat).

2. Поправил DNS запись, домен теперь указывает на айпишник VPS

На удивление все работает, все веб-сервисы доступны. Даже скорость не изменилась.

Вот только перфекционизм не дает покоя, и думается мне, что можно воспользоваться какими-то специальными инструментами (OpenVPN, WireGuard, tinc) для решения такой проблемы, а не использовать SSH.

Или для небольшой нагрузки это вполне себе ок?


можно воспользоваться какими-то специальными инструментами (OpenVPN, WireGuard, tinc)

можно,но если тебя не напрягает постоянно поднимать ssh, то зачем напрягаться...

Внезапно провайдер для физических лиц прикрыл все порты для доступа из интернета, не только 25, 80, 443, а вообще все.

Так закрыл порты или за нат тебя перенесли?

jo_b1ack ★★★★★
()

Лучше нормальный VPN, конечно. Wireguard или IPSec. WG очень просто настраивается.

anonymous
()
Ответ на: комментарий от jo_b1ack

А, не так выразился, потому что гуглил решение проблемы пробиванием ната, вот в голове и осело.

В том-то и дело, что у нас белые статические айпишники, но сейчас провайдер закрыл порты.

dzd
() автор топика
Ответ на: комментарий от dzd

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

pfg ★★★★★
()
Ответ на: комментарий от pfg

Думаю, отток клиентов их не волнует, мне предлагали «перейти на изолированный вилан и тариф Премиум», там ограничений нет. Но тогда защита акаунта легла бы на меня (отбиваться от китайских ботов?).

А вообще задача с доступом к уютным домашним сервачкам в нашем городе интересна 3,5 гикам, и, думаю, все провайдеры так себя ведут.

dzd
() автор топика

Я загнал в docker стек wireguard-client + nextcloud + mariadb.

Эта связка сама подключается к серверу wireguard на VPS, а там проксируется с помощью nginx с сертификатом Let’s encrypt.

Успешно работает уже долгое время.

ololoid ★★★★
()
Ответ на: комментарий от cocucka

Лорчую, неплохой вариант для «разношерстных» ОС/девайсов.

ololoid ★★★★
()
Ответ на: комментарий от ololoid

Я загнал в docker стек wireguard-client + nextcloud + mariadb.

О, в эту сторону, пожалуй, я и направлюсь. Только у меня вместо nginx давно traefik.

dzd
() автор топика
Последнее исправление: dzd (всего исправлений: 1)
Ответ на: комментарий от dzd

Только у меня вместо nginx давно traefik.

Я старый и ленивый стал, быстро настроил то, что умею :)

А вообще, да - часто traefik советуют умные люди. Надо бы попробовать. Эх, если бы 48 часов в сутках :)

ololoid ★★★★
()

Например, с помощью PPTP, iptables и sysctl.

Нужно поднять PPTP-сервер на VPS и подключиться к нему с домашнего клиента.

После настройки и подключения к PPTP нужно выполнить проброс портов.

Вот пример проброса портов на VPS Debian (актуально для Ubuntu, а также для других систем-дистрибутивов, но с учетом различий систем-дистрибутитов могут потребоваться некоторые изменения в определенных командах):

1. Добавить в конец файла /etc/sysctl.conf следующую строку: net.ipv4.ip_forward=1.

2. Сохранить измененный файл /etc/sysctl.conf.

3. Выполнить следующую команду: sysctl -p /etc/sysctl.conf.

4. Выполнить следующую команду: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE (eth0 заменить на другое имя основного сетевого интерфейса VDS-сервера, у которого нужный публичный внешний статический IP-адрес — только если у вас имя данного сетевого интерфейса отличается от eth0).

5. Выполнить следующую команду: iptables -t nat -A PREROUTING -m tcp -p tcp -d тут_IP_адрес_VPS --dport 80 -j DNAT --to-destination тут_IP_подключенного_к_VPN_домашнего_клиента.

6. Выполнить следующую команду: iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT.

7. Выполнить следующую команду: iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT.

8. Выполнить следующую команду: iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT.

9. Выполнить следующую команду: apt install iptables-persistent.

10. Выполнить следующую команду: systemctl enable netfilter-persistent.service.

11. Выполнить следующую команду: /sbin/iptables-save > /etc/iptables/rules.v4.

minda
()
Последнее исправление: minda (всего исправлений: 4)

По-хорошему делается через wireguard. Но если тебя устраивает ssh, то и ладно. Ничего плохого в ssh кроме производительности нет.

Legioner ★★★★★
()
Ответ на: комментарий от dzd

В том-то и дело, что у нас белые статические айпишники, но сейчас провайдер закрыл порты.

С чего ты взял, что у вас белые айпишники, если у вас порты закрыты? Белый айпишник, этот такой айпишник, который принимает соединения извне. Если ты не можешь принимать соединения, значит у тебя не белый айпишник.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

С чего ты взял, что у вас белые айпишники, если у вас порты закрыты? Белый айпишник, этот такой айпишник, который принимает соединения извне.

Который МОЖЕТ принимать соединения.

Раньше я коннектился с внешки на свой айпишник без проблем. Потом, несколько дней назад, коннектиться больше не получилось, хоть айпишник и остался прежним. Админы подтвердили закрытие доступа для физиков.

dzd
() автор топика
Ответ на: комментарий от Legioner

У ssh есть проблемы с udp, когда он работает вместо vpn. Мне нравится openvpn, а так наверное любое удобное решение подойдёт.

einhander ★★★★★
()
Ответ на: комментарий от einhander

проблемы с udp

Я так понимаю, на работу веб-сервера эти проблемы не влияют. В моем случае нужно только обеспечить доступность некоторых веб-сервисов.

dzd
() автор топика
Последнее исправление: dzd (всего исправлений: 1)
Ответ на: комментарий от dzd

Который МОЖЕТ принимать соединения.

Так ты же пишешь, что все порты закрыты. Значит соединения он принимать не может.

Раньше я коннектился с внешки на свой айпишник без проблем. Потом, несколько дней назад, коннектиться больше не получилось, хоть айпишник и остался прежним. Админы подтвердили закрытие доступа для физиков.

Жди NAT-а. IPv4 нынче денег стоит. А может у тебя уже NAT, просто делают вид, что публичный IP выдают. Выдавать-то можно что угодно.

Legioner ★★★★★
()
Ответ на: комментарий от einhander

У ssh есть проблемы с udp, когда он работает вместо vpn.

Какой у тебя юз-кейс? Засунуть udp в tcp и потом высунуть можно. Хотя да, на этом этапе я бы уже точно перешёл на что-то вроде wireguard.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

делают вид, что публичный IP выдают

Это вообще как? То есть хочешь сказать, что выдают globally routable IPv4-адрес, но на самом деле он во внутренней сети провайдера и он NATится в какой-то другой адрес?

Это бы настолько нарушало все возможные стандарты, что я даже не знаю что сказать.

intelfx ★★★★★
()
Ответ на: комментарий от dzd

Я так понимаю, на работу веб-сервера эти проблемы не влияют. В моем случае нужно только обеспечить доступность некоторых веб-сервисов.

HTTP/3 работает через UDP. Но не думаю, что пока стоит про него думать, это так, для полноты информации.

Legioner ★★★★★
()

dnat, xinetd, ipv6 поднять

sergej ★★★★★
()
Ответ на: комментарий от intelfx

Это вообще как? То есть хочешь сказать, что выдают globally routable IPv4-адрес, но на самом деле он во внутренней сети провайдера и он NATится в какой-то другой адрес?

К примеру выдают адрес, который соответствует тому адресу, который стоит на выходе. Между выходом и твоим роутером преобразуют во внутренний, но ты этого уже не видишь, на роутере ты видишь типа публичный. Просто этот публичный у всех, кого роутит за этим публичным адресом. Но они про это не знают, у них просто соединения не приходят.

Это бы настолько нарушало все возможные стандарты, что я даже не знаю что сказать.

Ну технически можно сделать. Фактически, конечно, вряд ли, это я так, фантазирую. Всё равно остаюсь при своём мнении, если соединения не приходят, значит это не белый IP, каким бы он не показывался в интерфейсе роутера.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

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

man firewall

$ ip addr | grep 2a
    inet6 2a02:2168:87f6:4c01::ffe/128 scope global dynamic noprefixroute
    inet6 2a02:2168:87f6:4c01:c687:7b16:acc:f88f/64 scope global dynamic noprefixroute

$ curl http://ipv6.icanhazip.com
2a02:2168:87f6:4c01::ffe

$ nc -l -p 12345 &
[1] 294756

$ ssh outpost.intelfx.name 'echo hi | ncat -6 2a02:2168:87f6:4c01::ffe 12345'
Ncat: Connection refused.

У меня самый что ни на есть белый адрес, но соединения не приходят. (Забудь, что это IPv6 — в контексте этого разговора IPv4 и IPv6 устроены совершенно одинаково.) ЧЯДНТ?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от dzd

Чистый веб - нет проблем, у некстклауд есть плагин talk там уже будет проблемно.

einhander ★★★★★
()
Последнее исправление: einhander (всего исправлений: 1)
Ответ на: комментарий от Legioner

Несколько лет назад делал vnp на базе ssh, телефония по туннелю работала когда как, то все нормально, то кто-то кого-то не слышит. Потом перешёл на openvpn и такая проблема ушла.

einhander ★★★★★
()
Ответ на: комментарий от intelfx

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

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

У кого-то из домашних провайдеров недавно видел, в ЛК отдельно fw включается. Т.е. услуга белый ip сама по себе, fw сам по себе.

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.