Ничего необычного в вашей схеме нет, похожая схема много у кого, нужно только правильно настраивать.
Когда используется 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. Тот сервер, который знает про локальный адрес должен быть обязательно первым в списке