NAT или правильный проброс портов

Обсуждение ПО и его настройки
Ответить
alterak
Сообщения: 83
Зарегистрирован: 07 авг 2017, 12:29

На данный момент сделано так
 Правило

Код: Выделить всё

add action=dst-nat chain=dstnat comment="WS02 (web 80)" dst-port=80 \
    in-interface=pppoe-rostel protocol=tcp to-addresses=192.168.1.6 to-ports=\
    80
add action=dst-nat chain=dstnat comment="WS02 (web 443)" dst-port=443 \
    in-interface=pppoe-rostel protocol=tcp to-addresses=192.168.1.6 to-ports=\
    443
т.е все приходящие по 80 и 443 портам запросы сразу же улетают на сервер с адресом 192.168.1.6. У меня несколько доменов и все крутятся на одном веб сервере. Все бы хорошо, но как быть если я хочу развернуть еще один веб сервер и мне нужно что бы запросы по определенным доменам направлялись на второй веб сервер с другим IP?

Если следовать моей логике, то... В сети должен обязательно быть DNS сервер, который и будет обрабатывать и направлять все запросы на нужные сервера. Ок, ведь в микротике есть DNS, в котором можно указать статику... Делаю так:
Меняю в NAT адрес на 192.168.1.1, т.е теперь все запросы по портам 80 и 443 должны искать днс на самом микротике. Далее захожу DNS -> Static и вручную добавляю маршрут, в котором указываю нужный адрес сайта и уже новый IP. Данная схема работает, но только в локальной сети... а вот из из интернета не желает-(.

Подскажите, как правильно реализовать такую схему, что бы НЕ разграничивать по различным портам типа 8001, 8002, 8003 и.т.п?


w03zd8rc
Сообщения: 9
Зарегистрирован: 24 авг 2018, 11:02

Пробросом портов такое не сделать (уж тем более если Вы используете https)
Для этого в сети можно развернуть отдельный сервер с минимальными ресурсами (на виртуалке например), там поднять nginix или apache которые уже и будут решать, куда перенаправлять по именам, на какие сервера.
У меня это делает nginix, поэтому приведу пример для него:

Код: Выделить всё

server {
    listen 80;
    server_name server1.net;
    location / {
        proxy_pass http://192.168.1.6:80;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


alterak
Сообщения: 83
Зарегистрирован: 07 авг 2017, 12:29

w03zd8rc писал(а): 24 авг 2018, 11:08 Для этого в сети можно развернуть отдельный сервер с минимальными ресурсами (на виртуалке например), там поднять nginix или apache которые уже и будут
Ну у меня в локальной сети есть 2 вирт. машины на которых и вертятся 2 веб сервера,
1 - основной с несколькими доменами
2 - новый, на который я и хочу перенести определенные домены.
На обоих серверах установлен NGINX.

Но смысла вашего решения я так и не понял... сами настройки nginx тут вряд ли помогут,
- Ведь если я в интернете набираю адрес своего домена ustim.ru, то попадаю на микрот, который правилом NAT меня направляет на 1-й сервер (192.168.1.6)
- Если я набираю любой другой свой домен - тоже попадаю на микрот, который опять же направляет меня на тот же веб сервер. Потому что срабатывает правило для 80 и 443 порта - тут все верно.

Но мне нужно разграничивать определенные домены на определенные сервера.

Хотя... вероятно вы имели ввиду создать отдельный сервер с NGINX, направлять все веб запросы на него через NAT, а он в свою очередь средствами proxy уже будет перенаправлять на нужный веб сервер. Мне кажется уж лучше и проще создать свой DNS сервер на том же bind9, указать его в микротике как основной... и пусть он разруливает запросы.


w03zd8rc
Сообщения: 9
Зарегистрирован: 24 авг 2018, 11:02

alterak писал(а): 24 авг 2018, 11:26 Хотя... вероятно вы имели ввиду создать отдельный сервер с NGINX, направлять все веб запросы на него через NAT, а он в свою очередь средствами proxy уже будет перенаправлять на нужный веб сервер.
Да, именно это я и имел ввиду, видимо забыл уточнить.
alterak писал(а): 24 авг 2018, 11:26 Мне кажется уж лучше и проще создать свой DNS сервер на том же bind9, указать его в микротике как основной... и пусть он разруливает запросы.
Смотрите как получается: есть глобальные dns-сервера. У Вашего микротика адрес внешний один. Когда посетитель запрашивает у dns Ваш сервер - ему возвращается внешний адрес, посетитель попадает на микротик, микротик перенаправляет его на внутренний адрес за дст-натом. Глобальный dns, при любом раскладе (даже если Вы будете иметь свой сервер dns, который будет "делиться" с глобальными своими записями) не сможет посетителю вернуть внутренний адрес сервера - только внешний микротика. А вот когда посетитель уже заломится на микротик (а далее на сервер), он говорит ему "я пришёл на такое то доменное имя" - и сервер уже отдаёт ему страницу (ну или передаёт дальше на другой сервер согласно записям - если делать как я выше писал).
Тут либо делать так, либо иметь ещё один адрес для другого сервера.
В случае с https получается немного сложнее: пакет приходит зашифрованный, и сервер nginix не узнает, на какое доменное имя должен уйти пакет, пока не расшифрует его. Таким образом, если у Вас сервер, на который посетитель пытается попасть по https, находится на другой машине, нежели будет ngnix, который будет это всё "разруливать", то Вам надо будет сертификаты прописывать на nginix, чтоб получилась цепочка: 1) nginix получает пакет, 2) расшифровывает, 3) смотрит на какое доменное надо отправить этот пакет (на другой сервер), 4) зашифровывает (можно и этим же), 5) отправляет
В большинстве случаев 4 пункт можно пропустить - nginix будет слать по 80 порту на тот сервер.

Но, что то, от темы микротиков мы ушли.

Ах да, забыл добавить - локальный dns сервер поможет только для Вашей локальной сети, ибо только им он будет раздавать локальные адреса.


w03zd8rc
Сообщения: 9
Зарегистрирован: 24 авг 2018, 11:02

Для https я делаю так:

Код: Выделить всё

server {
    listen 443 ssl;
    server_name server1.net;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl on;

     ssl_certificate /etc/nginx/ssl/wildcard/server1.net.crt;
     ssl_certificate_key /etc/nginx/wildcard/server1.net.key;
     
    location / {
        proxy_pass http://192.168.1.6:80;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

http://mikrotik-pro.ru/2017/07/25/mikro ... ip-adrese/
Такой вариант не поможет?


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить