Настройка доступа к локальноому серверу Moodle через Интернет

Настройка доступа к локальноому серверу Moodle через Интернет

by Василий Смирнов -
Number of replies: 3

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

Условная схема сети приложена в виде файла. Согласно схеме сейчас на межсетевых экранах настроен проброс портов. У пользователя, который обращается к Moodle из Интернета происходит перенаправление на локальный адрес, к которому он, естественно, не имеет доступа. В локальной сети проблем с доступом и по url и по ip нет.


Attachment Схема сети.jpg
Sum of ratings: -
In reply to Василий Смирнов

Re: Настройка доступа к локальноому серверу Moodle через Интернет

by Vadim Dvorovenko -
Picture of Developers Picture of Майнтейнер перевода
Ничего необычного в вашей схеме нет, похожая схема много у кого, нужно только правильно настраивать.

Когда используется dnat (port-forwarding), возникает следующая ситуация.
Локальный компьютер хочет обратится к сайту. Для этого он обращается к dns-серверу, который возвращает ему внешний IP. Так как это IP не локальной сети, компьютер отправляет пакеты к нему в шлюз и начинает ждать ответа от шлюза. Пакет приходит на шлюз, на котором настроено port-forwarding, и из пакета, 192.168.1.1->W.X.Y.Z он превращается в пакет, 192.168.1.1->10.1.1.3, а потом (после kerio) в 192.168.1.1->192.168.0.2. Сервер получает этот пакет, успешно его обрабатывает и шлёт обратный 192.168.0.2->192.168.1.1. Но этот пакет для локальной сети, поэтому идет по сети через коммутатор, не заходя в роутер. Компьютер ждет ответа от адреса W.X.Y.Z, а получает от 192.168.0.2. Получатель не может сопоставить ответ с запросом, и считает, что ответ не пришел.
Какие могут быть решения.
1. Маскарадить весь трафик, идущий из локальной сети и подвергающийся пробросу портов. Как именно сделать, зависит от вашего роутера, но для linux/mikrotik это одно дополнительное правило iptables. У вас два раза проброска портов, может потребоваться настройка в двух местах, а может быть хватит и в каком-то одном, нужно экспериментироваться. Минусы - весь локальный трафик будет виден серверу как приходящий с роутера. Не сможете ограничивать доступ к тестам по ip конкретных компьютеров и по логам не сможете найти, за каким из компьютеров локалки сидит пользователь. Ну и доп. нагрузка на роутер.
2. Перенести серверы в отдельную подсеть. Тогда локальный компьютер будет слать через роутер (так как сервер не в той же подсети), и сервер будет отвечать через роутер (так как получатель ответа в другой подсети). Роутер уже нормально разрулит такое подключение, все пакеты правильно вернутся обратно, и даже будут видны правильные ip получателей. Но если к moodle захочет обратиться другой сервер из той же подсети, что и сам сервер, ситуация вернётся к первому случаю, и соединения не будет. Да, локальный трафик снова будет ходить через роутер. Но всё же это позволит вам нормально изолировать сеть серверов так, чтобы хитрые студенты не могли подключиться по ssh к серверу.
3. Настроить локальный dns. Тот dns-сервер, который обслуживает запросы внутри сети (он может быть в маршрутизаторе, в kerio, в AD) должен возвращать локальный ip. Тогда весь трафик будет ходить как локальный. Главное, чтобы локальный компьютер узнал о правильном dns-сервре, например, из dhcp. Тот сервер, который знает про локальный адрес должен быть обязательно первым в списке
In reply to Vadim Dvorovenko

Re: Настройка доступа к локальноому серверу Moodle через Интернет

by Vadim Dvorovenko -
Picture of Developers Picture of Майнтейнер перевода
Понял, что не ваш случай, когда уже дописал.

В вашем случае уже сделано по п.3.
Если проблема с внешним трафиком, нужно пытаться понять, что с ним не так. Вы пишите "У пользователя, который обращается к Moodle из Интернета происходит перенаправление на локальный адрес, к которому он, естественно, не имеет доступа". Этот момент не очень понятен - ведь проброс портов именно для того и делается, чтобы некоторые порты локальных компьютеров стали доступны снаружи.
Проверьте firewall на той машине, на которой стоит moodle. В винде по умолчанию принято принимать трафик на любые порты только из локальной сети. При dnat пакет A.B.C.D->W.X.Y.Z превращется в A.B.C.D->192.168.0.2, подсети разные, поэтому такой трафик может не пройти. Попробуйте сперва совсем отключить брандмауэр на машине с iis, если поможет, то разрешите трафик на 80 порт из любого источника.

Также возможна какая-то проблема в том, что делается dnat 2 раза. Если есть возможность, дать серверу адрес в подсети 10.x и включить его в обход kerio для проверки.

Также на схеме у вас вижу такую историю, вы пробрасываете внутрь порт 81, а локально moodle работает на 80 порту. В результате локальный адрес имеет вид http://moode.college.ru, а снаружи - https://moode.college.ru:81. Moodle не умеет работать по двум разным адресам (даже если разница только в номере порта).
Когда приходит запрос на https://moode.college.ru:81, первым же ответом moodle перенаправляет на https://moode.college.ru, так как в config.php прописан именно этот адрес. Это особенность работы moodle, адрес должен полностью совпадать с прописанным в config.php, по другому никикак. Но снаружи этот адрес у вас недоступен, так как открыт именно порт 81, а не 80. Если дело именно в этом, можете перевести iis на 81 порт, поменять config.php, и ходить локально тоже на 81 порт. Также потребуется сделать замену адреса в БД, есть специальный скрипт для этого. Если у вас такая история с 81 портом из-за того, что порт 80 отдан другому сайту (например основному сайту организации), вам потребуется сервер с реверсным прокси (чтобы разруливать два доменных имени на одном порту), за которым будут уже два разных сервера. Роутеры такого не умеют. Есть классические решения, nginx, apache, iis - все это умеют. Есть и более современные - haproxy, traefic, caddy.
In reply to Василий Смирнов

Re: Настройка доступа к локальноому серверу Moodle через Интернет

by Виталий Лавров -
Picture of Эксперт по Moodle
Где dns сервер который отвечает в интернете за ваш домен? Он же явно не на WS2019.
Если во внешнем dns-сервере указать для moodle адрес w.x.y.z, то все будет работать.
В локальной сети все должны использовать dns-сервер AD в котором для moodle прописан локальный адрес.

Странная схема сети. IMHO тут лишний либо tplink, либо керио.

Нафига тут два проброса? Вы не можете прописать статический маршрут на tplink-е в сеть 192.168.0.0/24 через 10.1.1.3 и сделать проброс сразу на 192.168.0.2:80 ?
81-й порт это не опечатка? Зачем? У вас нет админа который может настроить веб-сервер с несколькими именами на 80-м порту?

Найдите нормального админа. Задача тривиальная.