Веб-сервер в локальной сети

У меня проблема с доступом к (одному из моих) веб-серверов из моей локальной сети.

У меня есть компьютер (Ubuntu), который работает как маршрутизатор, веб-сервер и т. Д. Это хорошо работает, я могу получить доступ к веб-серверу как извне, так и из внутренней сети. Я также могу получить доступ к компьютерам во внутренней сети через ssh извне (перенаправление с iptables).

Теперь у меня есть другой веб-сервер во внутренней сети. Я сделал несколько путей маршрутизации с iptables. Если я в браузере набираю some.webadress.com:40080, он должен перейти на «внутренний» веб-сервер.

Это работает:

  • Доступ к внутреннему веб-серверу с именем домена (+ порт) из внешней сети
  • Доступ к внутреннему веб-серверу с помощью внутренний IP-номер (+ порт) из внутренней сети

Это не работает:

  • Доступ к внутреннему веб-серверу с использованием доменного имени (+ порт) из внутренней сети

Я почти уверен, что часть маршрутизации работает нормально. Вопрос в том, должен ли я иметь DNS или это то, что я должен добавить / изменить в моем файле /etc/hosts?

РЕДАКТИРОВАТЬ: Некоторые пояснения. Устройство / веб-сервер, к которому у меня возникла проблема, - это веб-переключатель. Веб-переключатель - это устройство, которое позволяет управлять несколькими высоковольтными реле (например, автомобильным отопителем, внешним освещением и т. Д.) Через веб-приложение / телефон. Проблема возникает при использовании смартфона. Если я в сети 3G, я использую some.webadress.com:40080 (обратите внимание, что я использую трансляцию портов), и если я использую домашний Wi-Fi, я должен использовать 192.168.0.101:8080. Я хочу использовать some.webadress.com:40080 независимо от того, нахожусь ли я в локальной сети или во внешней сети.

(Лучшая половина в семье не так заинтересована в технических вещах, поэтому необходимость быстро менять адреса на самом деле является проблемой:)

1
задан 29 December 2012 в 15:10

3 ответа

Другие машины в вашей сети будут подключаться к веб-серверу без прохождения через ваш маршрутизатор; это в той же локальной сети. Вы должны иметь доступ к своему веб-серверу из внутренней сети напрямую, используя его IP-адрес, например, http://192.168.0.101:8080. Я предполагаю, что вы не выполняете преобразование портов, и ваш веб-сервер работает на том же порту на компьютере, на котором вы настроили маршрутизатор для переадресации.

Если это сработает, вам нужно будет только сказать своим машинам, чтобы они общались с 192.168.0.101 при определении имени some.webadress.com. Это то, что вы должны быть в состоянии настроить на локальном DNS-сервере (возможно, на вашем маршрутизаторе). Вы также должны убедиться, что ваши машины в локальной сети всегда используют этот локальный DNS-сервер.

Например, если вы настроите DNS-сервер в Ubuntu, используя dnsmasq, он загрузит файл /etc/hosts на этот компьютер по умолчанию, поэтому строка

192.168.0.101     some.webadress.com

будет достаточно.

Либо отредактируйте файл /etc/hosts на всех машинах , чтобы отменить ответ от DNS. Его гораздо сложнее поддерживать, особенно когда речь идет о большем количестве машин.

0
ответ дан 29 December 2012 в 15:10

Файл hosts будет работать хорошо, и, на мой взгляд, нет необходимости создавать DNS-сервер только для этого.

Другим способом, который вы могли бы рассмотреть, является создание псевдонима для виртуального хоста веб-сервера с использованием внутреннего имени (hostname, hostname.local или hostname.internal.domain, в зависимости от того, как настроена ваша локальная сеть), которое можно разрешить локально без DNS-сервера. Таким образом, локальные машины будут иметь доступ к нему напрямую, без использования внешнего IP / роутера.

Комментарии после разъяснения в исходном вопросе:

Если вы хотите использовать один и тот же URL-адрес в обеих сетях (3G и Wi-Fi), использование внутреннего имени, отличного от внешнего, считается правилом. как это будет другой URL.

Что вы можете сделать, это изменить файл hosts в зависимости от используемого вами соединения: один файл hosts для wifi (преобразование URL-адреса во внутренний IP-адрес сервера) и один для 3G (преобразование в внешний IP). Вы можете сделать это с помощью автоматических сценариев на компьютере (по крайней мере, под управлением Linux), но я понятия не имею о смартфоне.

Когда вы используете some.webadress.com:40080 с подключением Wi-Fi, ваш маршрутизатор не маршрутизирует внутренний трафик с использованием внешних адресов. Это одна из целей локальной сети, которая изолируется от публичной сети.

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

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

  • Другой вариант, который вы можете попробовать, это использовать порт и источник 0.0.0.0/0.0.0.0 для пересылки с использованием iptables.

0
ответ дан 29 December 2012 в 15:10

Похоже, что вы хотите достичь, это петля NAT. Нашел это руководство:

http://for-invent.com/nat-loopback-using-iptables/

Что-то в строке:

[ 110]

Не уверен на 100% в значении --dport в правиле POSTROUTING, хотя, если приведенное выше не работает, попробуйте вместо этого 40080.

Удачи.

0
ответ дан 29 December 2012 в 15:10

Другие вопросы по тегам:

Похожие вопросы: