Как лучше поймать маркированное соединение (продолжение вопроса)?

Ссылка скопирована
1 ответ

По вводным: я уже как то задавал вопрос по работе одновременно SSTP сервера и Web сервера на одном микротикеВот тут.По вводным: в прямую это сделать нельзя, тут все понятно, потому что оба сервиса сидят на одном порте (порту?) и микротику нужно как то дать понять на какой именно сервер нужно направить пакеты.
По вводным: была озвучена тут идея маркировки пакетов через чтение их заголовков где web.mydomain.com - это имя web сервера, а sstp.mydomain.com - это имя SSTP сервера. То есть нужно промаркировать пакеты с заголовком web.mydomain.com Идея разумная, нужно пробовать.

По вводным: итого: SSTP сервер на микротике на 443 порте, web сервер внутри сети по адресу 192.168.1.15. В Filter Rules открыт 443 порт с Accept. Оба сервера подняты, все работает ок, SSTP сервер виден снаружи, Web сервер виден внутри по IP, выдает тестовую страничку.
Делаю 2 правила Mangle:

add action=mark-connection chain=prerouting comment="Web server rule 0" content=web.mydomain.com disabled=no new-connection-mark=WebServer add action=mark-routing chain=prerouting comment="Web server rule 1" connection-mark=WebServer disabled=no new-routing-mark=WebServerRoute passthrough=no

По вводным: подключаюсь к web.mydomain.com - открываю статистику обеих правил - вижу что трафик идет на обеих правилах, открываю IP -> FireWall -> Connections - вижу соединения с Connection Mark - WebServer. Все работает в части маркировки пакетов.
По вводным: теперь пытаюсь направить маркированные пакеты на 192.168.1.15

По вводным: сначала пытался это сделать по уму через таблицу маршрутизации WebServerRoute и правила маршрутизации (как указано в правиле Mangle выше):

add comment=" access to WebServer" disabled=no distance=3 dst-address=0.0.0.0/0 gateway=192.168.1.15 routing-table=WebServerRoute scope=30 suppress-hw-offload=no target-scope=10

Сейчас ситуация такая: 0 эффекта, пакеты никуда не уходят. Тот же самый эффект если сделать через Routing -> Rules
По вводным: пытаюсь сделать правило NAT для ConnectionMark чтобы открыть порт 443 до 192.168.1.15 для маркированных пакетов:

add action=dst-nat chain=dstnat comment="Apache2 server" connection-mark=WebServer dst-port=443 protocol=tcp to-addresses=192.168.1.15 to-ports=443

Сейчас ситуация такая: опять открывают статистику первого правила Mangle и нового правила NAT - в правиле Mangle вижу входящие пакеты, в правиле NAT - тишина. Соответственно, сервер ничего не отдает. Маскарадинг в данном случае не делал, но он тут по идее и не нужен (?)
Сейчас ситуация такая: вопрос, ЧЯДНТ? Тут моих знаний как то не хватает. То есть мне очевидно, что миротик в прерутинге находит входящие пакеты для web.mydomain.com, отфильтровывает их и даже маркирует как мне нужно, но почему то не хочет их маршрутизировать на хост внутри сети. Что тут можно предпринять, чтобы Apache2 таки получал их и отдавал наружу тестовую страничку? Может что-то с обратным маршрутом не то, хотя тогда была бы хоть какая то входящая активность на правиле NAT, а её нет. В общем буду признателен за идеи.
Сейчас ситуация такая: uP: запустил на сервере tcpdump, посмотрел, оказывается правило маршрутизации на основе таблиц работает, и на сервер приходит запрос, но обратно он не уходит. Возможно таки да, не работает обратный маршрут, но я пока не понимаю как его правильно прописать.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Артём Dev Ответ

Если речь про MikroTik и «маркированное соединение», то ловить нужно не пакет «вручную», а правильно разнести connection-mark и routing-mark в mangle. Частая ошибка: ставят mark-routing сразу на первый попавшийся пакет, но не помечают connection-mark, из-за чего последующие пакеты идут уже не туда или правило срабатывает непредсказуемо.

Правильная схема обычно такая: сначала в prerouting помечается соединение по признаку источника, назначения, интерфейса или адрес-листа. Потом все пакеты этого соединения получают routing-mark. Если нужен policy routing, дальше создается отдельная таблица маршрутизации и маршрут с нужным gateway.

/ip firewall mangle
add chain=prerouting src-address=192.168.88.10 action=mark-connection new-connection-mark=to_wan2 passthrough=yes
add chain=prerouting connection-mark=to_wan2 action=mark-routing new-routing-mark=wan2 passthrough=no
 
/ip route
add dst-address=0.0.0.0/0 gateway=192.0.2.1 routing-table=wan2

/ip firewall mangle add chain=prerouting src-address=192.168.88.10 action=mark-connection new-connection-mark=to_wan2 passthrough=yes add chain=prerouting connection-mark=to_wan2 action=mark-routing new-routing-mark=wan2 passthrough=no /ip route add dst-address=0.0.0.0/0 gateway=192.0.2.1 routing-table=wan2

Проверять надо не только правила, но и счетчики. Если счетчик первого правила растет, а второго нет, значит connection-mark не совпадает или пакет попадает в другую цепочку. Если оба растут, но трафик не идет, смотрите route table, NAT и обратный путь.

  • не маркируйте локальный трафик роутера через prerouting: для него нужна output;
  • исключите dst-address локальных подсетей, чтобы не ломать LAN;
  • для VPN/PPPoE учитывайте, что интерфейс может подниматься позже маршрута;
  • после изменения правил смотрите connection tracking, старые соединения могут сохранять старую метку.

Для диагностики используйте Torch, Connections и логирование mangle-правила на короткое время. Если надо поймать именно конкретный поток, добавьте временный address-list или фильтр по dst-port, иначе правило будет слишком широким и начнет затрагивать лишний трафик.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно