У меня устройство MikroTik RouterOS 6.23, и моя сеть выглядит следующим образом:
Router
|
|-- bridge1_LAN (wlan1 + ether1) (192.168.0.210) -- LAN (192.168.0.0/24)
| Here is where computers are. Those include some servers and some users.
| Users should be able to navigate always, and servers should
| be reachable online always.
|
|-- ether2_ADSL (192.168.2.2) -- ADSL router (192.168.2.1) -- WAN
| Users should navigate through here because there is no traffic limit.
| Incoming traffic should work exactly as with ether3_3G, as a temporary
| backup solution in case it fails.
|
|-- ether3_3G (192.168.3.2) -- 3G router (192.168.3.1) -- WAN
This connection has a traffic limit, but faster upload rate, so it's
mainly for incoming traffic. In case ether2_ADSL fails, this should be
used as a temporary backup connection for outgoing traffic.
Теперь соответствующая конфигурация:
/ip firewall mangle
# This rule is disabled because, when enabled, users cannot browse Internet
add action=mark-routing chain=prerouting connection-mark=no-mark disabled=yes \
in-interface=ether2_ADSL new-routing-mark=to_ether2_ADSL passthrough=no
# This marks all traffic coming from ether3_3G to get out through there too
add action=mark-routing chain=prerouting in-interface=ether3_3G \
new-routing-mark=to_ether3_3G passthrough=no
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether2_ADSL
add action=masquerade chain=srcnat out-interface=ether3_3G
# This is just an example web server listening in port 8069, for testing purposes
add action=dst-nat chain=dstnat comment="Test server" dst-port=8069 \
in-interface=ether2_ADSL protocol=tcp to-addresses=192.168.0.156 \
to-ports=8069
add action=dst-nat chain=dstnat comment="Test server" dst-port=8069 \
in-interface=ether3_3G protocol=tcp to-addresses=192.168.0.156 \
to-ports=8069
/ip route
# Outgoing traffic by routing-mark
add check-gateway=ping distance=10 gateway=192.168.3.1 routing-mark=\
to_ether3_3G
add check-gateway=ping distance=10 gateway=192.168.2.1 routing-mark=\
to_ether2_ADSL
# Outgoing traffic by default
add check-gateway=ping distance=20 gateway=192.168.2.1
add check-gateway=ping distance=30 gateway=192.168.3.1
В этой конфигурации весь трафик уходит ether3_3G только если ether2_ADSL терпит неудачу, и ether2_ADSL в противном случае (в большинстве случаев).
Теперь проблема в том, что входящие соединения работают только через ether2_ADSL. Подключения, входящие от ether3_3G всегда застревать syn received
штат.
Мне кажется, что входящие соединения от ether3_3G достигают целевого сервера, но ответ проходит через ether2_ADSL и поэтому рукопожатие TCP никогда не завершается. Фактически, если я физически отключу ether2_ADSL кабель, затем все подключения к / от ether3_3G начать работать ОК.
Как я могу это исправить?
Вам нужно будет пометить соединения, исходящие от ether3_3G, чтобы затем вы могли пометить ответы, которые будут перенаправлены обратно через ether3_3G.
Вот пример конфигурации (не тестировался)
/ip firewall mangle
add action=mark-connection chain=prerouting comment="Mark connection so packets from 3G get returned to 3G properly" disabled=no in-interface=ether3_3G new-connection-mark=3g-packets passthrough=no
add action=mark-routing chain=prerouting connection-mark=3g-packets disabled=no new-routing-mark=3g-packets passthrough=no
add action=mark-routing chain=output connection-mark=3g-packets disabled=no new-routing-mark=3g-packets passthrough=no
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.3.1 routing-mark=3g-packets
Первое правило поместит connection-mark
на любом пакете, приходящем с интерфейса ether3_3G.
Второе и третье правила будут «ловить» ответы на основе этой метки соединения, а затем помещать routing-mark
по этим соединениям.
Второе правило предназначено для пакетов, которые по существу пересылаются, а третье правило - для ответов, которые отправляет сам маршрутизатор (например, пинги).
Наконец, статический маршрут в конце будет маршрутизировать пакеты с соответствующей меткой маршрутизации через интерфейс ether3_3G.