Настройка маршрутизации MikroTik для SSTP и веб-сервера
Решение проблемы одновременной работы SSTP VPN и веб-сервера на MikroTik. Настройка маркировки пакетов, NAT и обратной маршрутизации для порта 443.
Как настроить маршрутизацию маркированных пакетов для одновременной работы SSTP и веб‑сервера на MikroTik?
У меня настроен SSTP‑сервер на MikroTik на порту 443, и я пытаюсь добавить веб‑сервер внутри сети (192.168.1.15) на том же порту. Я создал правила маркировки пакетов:
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
Маркировка работает – я вижу соединения с Connection Mark – WebServer. Однако при попытке направить трафик на внутренний веб‑сервер через таблицу маршрутизации или правило NAT пакеты не доходят до сервера:
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
или
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. При этом tcpdump на сервере показывает, что запросы доходят, но ответы не уходят обратно. Возможно, проблема с обратным маршрутом. Как правильно настроить маршрутизацию и NAT для работы обоих сервисов на MikroTik?
Основная проблема заключается в неправильном порядке правил и отсутствии обратной маршрутизации для ответных пакетов. Для одновременной работы SSTP и веб‑сервера на MikroTik нужно использовать правильную последовательность правил маркировки и NAT, а также настроить обратную маршрутизацию.
Содержание
- Основные проблемы конфигурации
- Правильная последовательность правил
- Настройка маркировки пакетов
- Конфигурация NAT для веб‑сервера
- Настройка обратной маршрутизации
- Альтернативные подходы
- Полный пример конфигурации
Основные проблемы конфигурации
Как видно из вашего описания, основная проблема заключается в том, что пакеты доходят до правил маркировки, но не достигают правил NAT. Это типичная ситуация, возникающая из‑за неверного порядка обработки правил в MikroTik.
Согласно документации MikroTik, NAT обрабатывается до маршрутизации, что означает, что правила dst‑nat должны быть установлены до того, как маршрутизация начнет обрабатывать пакеты. Если вы используете passthrough=no в правилах маркировки маршрутизации, это может блокировать дальнейшую обработку пакетов.
Правильная последовательность правил
Критически важно соблюдать правильную последовательность правил в MikroTik:
- Правила Mangle (маркировка) – должны быть первыми
- Правила dst‑nat (NAT) – должны следовать за Mangle
- Правила маршрутизации – обрабатываются после NAT
- Правила src‑nat (маскарад) – для обратного трафика
Внимание: Если вы используете
passthrough=noв правилах маркировки маршрутизации, последующие правила (включая NAT) не будут обработаны для этого соединения.
Настройка маркировки пакетов
Используйте следующий подход для правильной маркировки:
# Правило для маркировки соединений на основе домена
/ip firewall mangle add chain=prerouting action=mark-connection \
comment="Web server connection mark" \
content="web.mydomain.com" \
new-connection-mark=WebServer
# Правило для маркировки маршрутизации с passthrough=yes
/ip firewall mangle add chain=prerouting action=mark-routing \
comment="Web server routing mark" \
connection-mark=WebServer \
new-routing-mark=WebServerRoute \
passthrough=yes
Ключевое отличие – использование passthrough=yes, которое позволяет пакетам продолжать обработку через следующие правила.
Конфигурация NAT для веб‑сервера
Правила dst‑nat должны быть настроены после правил маркировки, но до маршрутизации:
# Правило NAT для веб‑сервера
/ip firewall nat add chain=dstnat action=dst-nat \
comment="Apache2 server" \
connection-mark=WebServer \
dst-port=443 protocol=tcp \
to-addresses=192.168.1.15 to-ports=443
# Правило обработки SSTP VPN (без маркировки для других трафика)
/ip firewall nat add chain=dstnat action=dst-nat \
comment="SSTP VPN server" \
dst-port=443 protocol=tcp \
to-addresses=192.168.1.1 to-ports=443
Важно: Правила NAT обрабатываются в порядке их следования, поэтому SSTP правило должно быть после веб‑сервера, если вы хотите приоритезировать веб‑сервер для домена web.mydomain.com.
Настройка обратной маршрутизации
Проблема с обратными пакетами решается правильной настройкой маскарада и маршрутизации:
# Таблица маршрутизации для веб‑сервера
/ip route add route=192.168.1.15/32 gateway=192.168.1.15 \
routing-table=WebServerRoute
# Правило маскарада для обратного трафика
/ip firewall nat add chain=srcnat action=masquerade \
comment="Masquerade for WebServer traffic" \
routing-mark=WebServerRoute
Это обеспечит правильную обработку ответных пакетов от веб‑сервера обратно в интернет.
Альтернативные подходы
Использование tls-host опции
Если вы используете MikroTik версии 6.43+, можно использовать опцию tls‑host для разделения трафика:
# SSTP с указанием домена
/interface sstp-server server add enabled=yes name=vpn \
authentication=mschap2,mchap2 \
certificate=server-certificate \
tls-host=vpn.mydomain.com
Использование нескольких IP‑адресов
Как обсуждается в форуме MikroTik, идеальным решением является использование разных публичных IP‑адресов для разных сервисов:
# Пример конфигурации для разных IP
/ip address add address=203.0.113.10/24 interface=ether1-WAN1
/ip address add address=203.0.113.11/24 interface=ether1-WAN2
# NAT для веб‑сервера на первом IP
/ip firewall nat add chain=dstnat action=dst-nat \
dst-address=203.0.113.10 dst-port=443 \
to-addresses=192.168.1.15 to-ports=443
# SSTP на втором IP
/ip firewall nat add chain=dstnat action=dst-nat \
dst-address=203.0.113.11 dst-port=443 \
to-addresses=192.168.1.1 to-ports=443
Полный пример конфигурации
Вот полный пример рабочей конфигурации для решения вашей задачи:
# Создание таблицы маршрутизации
/ip route add route=192.168.1.15/32 gateway=192.168.1.15 \
routing-table=WebServerRoute
# Правила маркировки
/ip firewall mangle add chain=prerouting action=mark-connection \
content="web.mydomain.com" new-connection-mark=WebServer
/ip firewall mangle add chain=prerouting action=mark-routing \
connection-mark=WebServer new-routing-mark=WebServerRoute \
passthrough=yes
# Правила NAT (в правильном порядке!)
/ip firewall nat add chain=dstnat action=dst-nat \
connection-mark=WebServer dst-port=443 protocol=tcp \
to-addresses=192.168.1.15 to-ports=443 comment="Web server NAT"
/ip firewall nat add chain=dstnat action=dst-nat \
dst-port=443 protocol=tcp \
to-addresses=192.168.1.1 to-ports=443 comment="SSTP VPN NAT"
# Правило маскарада для обратного трафика
/ip firewall nat add chain=srcnat action=masquerade \
routing-mark=WebServerRoute comment="WebServer masquerade"
# Правила маршрутизации для ответного трафика
/ip route add route=0.0.0.0/0 gateway=192.168.1.1 \
routing-table=WebServerRoute
Источники
- MikroTik NAT Documentation
- SSTP and HTTPS coexistence - MikroTik Forum
- Firewall Marking - RouterOS Documentation
- Connection mark and routing relationships - MikroTik Forum
- Multi-IP WAN Gateway configuration
Заключение
Для успешной одновременной работы SSTP и веб‑сервера на MikroTik необходимо:
- Использовать правильную последовательность правил: Mangle → dst‑nat → маршрутизация
- Применять
passthrough=yesв правилах маркировки маршрутизации - Настроить обратную маршрутизацию с правилами маскарада
- Рассмотреть альтернативные подходы: tls‑host опцию или разные публичные IP
Если проблема сохраняется, проверьте логи с помощью /log print для отслеживания обработки пакетов и убедитесь, что правила не блокируют друг друга.