LINUX.ORG.RU

С локалхоста через интернет к себе

 , ,


2

2

Привет!

Вопрос, скорее всего, стар, как сам интернет, но ответа я так и не нашёл, либо разучился искать…

Развлекаюсь с малинкой. Хочу на ней крутить pet project.
У провайдера взят статический ip, и на раутере настроен forward 80 порта на сервачок с малинокой, на которой крутится nginx. Захожу на свой ip из браузера на телефоне - отдаётся страница. На локалхосте делаю curl servachok - вижу html.

А как можно с локалхоста получить ответ с http://<мой.статический.ип.адрес> ?

Это возможно?



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

Да, в общем случае если пакет идет с lan на lan и src/dst из внутренней сети (что не нормально т.к. такое должно через l2 идти и вообще не попадать в iptables), делается src-nat с маскардингом

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

Понял, значит изначально неправильно понял. Тогда nat loopback на маршрутизаторе надо сделать

Ну ОК. С этим надо будет ещё поиграться. Но через несколько дней, когда придёт мой роутер, т.к, провайдерский (предоставляют хомячкам) совсем никакой.

Кстати, nat loopback - это как раз то, что я искал, просто не знал как называется, спасибо.

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

Это случайно не для какой-то peer to peer связи между клиентами нужно?

Нет, просто user generated content портал. Но в глубокой разработке, больше как хобби.

Хотелось бы просто перенести его с облака в дом, но заходить по домену через dns, в том числе и с локалхоста, который висит на том-же раутере, значит имеет тот-же внешний ip.

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

Можно для локалки свой днс поднять на той же малине или роутере, который будет отдавать для нужного имени хоста внутренний ip малины. Ну а снаружи пакеты будут форвардится

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

Хотелось бы просто перенести его с облака в дом, но заходить по домену через dns

Но ведь тогда проще прописать на локалхосте этот домен в /etc/hosts либо поднять DNS-сервер в локалке, на котором будет соответствующая запись.

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

А какой роутер? Можно и на хомячковом роутере сделать программный NAT loopback, надо только на него под рутом зайти. Там telnet должен быть, даже на самом простом роутере.

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

Нашел Не получается открыть свой сайт из глобальной сети (ubuntu+apache2+ufw+wordpress) (комментарий)
https://blog.lordvan.com/blog/learned-something-new-today-hairpin-nat-with-ip...
Мне только непонятно, почему по первой ссылке он указывает в -d ту же самую сеть. Назначение же у пакетов - интернет.

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

http://0x0.st/XmAk.png
Есть локалка 192.168.100.0/24 с двумя хостами и роутером
На роутере есть внешний адрес 100.100.100.10
Настроен DNAT 100.100.100.10:80 -> 192.168.100.10:80

Что происходит когда пакет приходит из внешнего мира (с хоста 200.200.200.20):
1. Роутер: пакет приходит на адрес 100.100.100.10.
2. Роутер: отрабатывает DNAT в PREROUTING, dst адрес меняется на 192.168.100.10
3. Роутер: пакет проходит маршрутизацию и уходит в локальную сеть
4. Хост: получает пакет, обрабатывает, формирует ответ
5. Хост: смотрит в своей таблице роутинга как добраться до 200.200.200.20, не находит иного маршрута кроме def. route, отправляет ответный пакет на роутер
6. Роутер: получает ответный пакет, по таблице маршрутизации отправляет его в интернет
7. Роутер: отрабатывает скрытое правило SNAT в POSTROUTING (для всех nat правил есть скрытые обратные правила), адрес отправителя подменяется на 100.100.100.10

Что происходит когда пакет приходит из локальной сети:
1. Хост (клиент): Отправляет пакет на 100.100.100.10, исходя из таблицы роутинга пакет уходит на def. route
2. Роутер: пакет приходит на адрес 100.100.100.10
3. Роутер: отрабатывает DNAT в PREROUTING, dst адрес меняется на 192.168.100.10
4. Роутер: пакет проходит маршрутизацию и уходит в локальную сеть
5. Хост (сервер): получает пакет, обрабатывает, формирует ответ
6. Хост (сервер): смотрит в своей таблице роутинга как добраться до 192.168.100.20, находит connected маршрут и отправляетответный пакет на него с src адресом 192.168.100.10
7. Хост (клиент): получает invalid пакет с хоста 192.168.100.10 и игнорирует его продолжая ждать ответ от 100.100.100.10

Мне только непонятно, почему по первой ссылке он указывает в -d ту же самую сеть. Назначение же у пакетов - интернет.

см. пункт 3, отрабатывает DNAT и интерфейс назначения меняется с wan на lan
суть nat loopback чтобы сервер ответил не на прямую, а через роутер (на котором отработает nat и клиент получит свой пакет) поэтому добавляется правило-костыль:

iptables -t nat -A POSTROUTING -o lan -s 192.168.100.0/24 -d 192.168.100.0/24 -j MASQUERADE

«Если пакет из локалки в локалку уходит с интерфейса lan, то подменять в нем адрес источника, на локальный адрес роутера» чтобы хост (сервер) ответил роутеру, а тот уже перенаправит пакет (да тут двойной nat получается) на хост (клиент) с внешним адресом

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

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

/etc/hosts

Это первое, что в голову пришло. Но хотелось бы приходить через DNS. Чтобы быть уверенным, что всё работает как надо. И не прибегать к другим сетям.

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

Раутер - собственный брендовый провайдера. Управляется из админской провайдера, а хомячку выдали лишь только port forward,, которые не сохраняются после перезагрузки, да и вообще всё глючит. Поэтому приобрёл свой, но, выяснилось, что для того, чтобы в него воткнуть провайдерскую оптику, нужно у провайдера купить его SFP интерфейс. Возможно сегодня вечером подключу.

Купил Iskratel Innbox U92. Настроек куча. Ешё не разбирался.

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

Как вариант без nat loopback, если роутер посволяет делать несколько lan сетей, то вынеси малинку в другую сеть (на отдельный порт), тогда если dst-nat жестко не привязан к wan интерфейсу будет работать.

Купил Iskratel Innbox U92.

GPON...я в таких случаях советую брать самый простой ont настроенный в bridge и за ним ставить любой нормальный роутер...

Kolins ★★★★★
()
Последнее исправление: Kolins (всего исправлений: 1)

Меняй роутер. Твой не умеет заврочивать запросы на твой ip на сервер в локалке.

У меня та же фигня после замены hg8245 на какую-то новую безымянную фигню.

Полистай назад, там что у меня. https://forum.onliner.by/viewtopic.php?t=1347629&start=32880

Буду сегодня менять на huawei. Там все ок.

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

Всё понятно, спасибо!

«Если пакет из локалки в локалку уходит с интерфейса lan, то подменять в нем адрес источника, на локальный адрес роутера» чтобы хост (сервер) ответил роутеру, а тот уже перенаправит пакет (да тут двойной nat получается) на хост (клиент) с внешним адресом

Т.е. это команда еще говорит, чтобы когда от сервера придет ответный пакет, на котором адрес назначения роутер, а адрес источника - сервер, тогда роутер должен подменить адрес источника на 100.100.100.10, а адрес назначения - на 192.168.100.20.

damix9 ★★★
()

На роутере добавить запись DNS с локальным адресом. Будет внутри сетки отдавать правильный адрес всем клиентам.

anonymous
()

Подключил свой свежекупленный роутер и всё само заработало. Только port forward настроил. Поеду возвращать провайдерское глючное поделие.

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