2 провайдера и непонятки с серверами

Тема в разделе "Маршрутизация", создана пользователем Darkcat, 4 окт 2016.

  1. Darkcat

    Darkcat Новый участник

    Добрый день. Настроил (вроде как) работу с двумя провайдерами.
    Код:
    /ip firewall nat
    add action=masquerade chain=srcnat comment=Internet src-address=10.0.0.0/24
    
    /ip firewall mangle
    add action=mark-connection chain=input comment=Beeline in-interface=Internet1 \
        new-connection-mark=c_beeline passthrough=yes
    add action=mark-routing chain=output comment=Beeline connection-mark=c_beeline \
        new-routing-mark=r_beeline passthrough=yes
    add action=mark-connection chain=input comment=MGTS in-interface=Internet2 \
        new-connection-mark=c_mgts passthrough=yes
    add action=mark-routing chain=output comment=MGTS connection-mark=c_mgts \
        new-routing-mark=r_mgts passthrough=yes
    
    /ip route
    add comment=Beeline distance=1 gateway=95.31.0.1 routing-mark=r_beeline
    add comment=MGTS distance=1 gateway=95.165.128.1 routing-mark=r_mgts
    add comment="Beeline backup" distance=2 gateway=95.31.0.1
    add comment="MGTS backup" distance=3 gateway=95.165.128.1
    
    Internet1 = Beeline = 95.31.1.XXX/19
    Internet2 = MGTS = 95.165.132.XXX/19

    Сервер тимспика внутри сети
    Код:
    /ip firewall nat
    add action=netmap chain=dstnat comment=TeamSpeak dst-port=9987 log=yes \
        log-prefix=ts_ protocol=udp to-addresses=10.0.0.2 to-ports=9987
    add action=netmap chain=dstnat comment=TeamSpeak dst-port=10011 log=yes \
        log-prefix=ts_ protocol=tcp to-addresses=10.0.0.2 to-ports=10011
    add action=netmap chain=dstnat comment=TeamSpeak dst-port=30033 log=yes \
        log-prefix=ts_ protocol=tcp to-addresses=10.0.0.2 to-ports=30033
    add action=netmap chain=dstnat comment=TeamSpeak dst-port=41144 log=yes \
        log-prefix=ts_ protocol=tcp to-addresses=10.0.0.2 to-ports=41144
    
    Firewall
    Код:
    /ip firewall filter
    add action=fasttrack-connection chain=forward connection-state=\
        established,related
    add action=accept chain=input comment="user - vpn" dst-port=1723 protocol=tcp
    add action=accept chain=input comment="user - vpn" protocol=gre
    add action=accept chain=input protocol=icmp
    add action=accept chain=forward connection-state=established,related
    add action=accept chain=input connection-state=established,related
    add action=accept chain=input comment="Web control" dst-port=8080 log=yes \
        log-prefix=webcontrol_ protocol=tcp
    add action=accept chain=input comment=TeamSpeak dst-port=9987 log=yes \
        log-prefix=ts_ protocol=udp
    add action=accept chain=input comment=TeamSpeak dst-port=10011,30033,41144 log=\
        yes log-prefix=ts_ protocol=tcp
    add action=drop chain=input comment="Incoming block" in-interface=Internet1
    add action=drop chain=input comment="Incoming block" in-interface=Internet2
    add action=drop chain=forward comment="Invalid block" connection-nat-state=\
        !dstnat connection-state=new in-interface=Internet1
    add action=drop chain=forward comment="Invalid block" connection-nat-state=\
        !dstnat connection-state=new in-interface=Internet2
    
    Добился того, что снаружи видно сам роутер (через обоих провайдеров) и можно подключиться по VPN. Но сервисы внутри сети работают только через одного провайдера, по двум последним записям роутинга (которые backup). Причем если их выключить, то и изнутри перестает работать интернет. В статистике соединения и маршруты делают вид что помечаются... Что я делаю не так?
     
  2. Илья Князев

    Илья Князев Администратор Команда форума

    Не маркируете исходящие с серверов.
    Начните с моей презентации и видео на MUM2015
    http://mum.mikrotik.com/2015/RU/agenda последняя в списке.
     
  3. Darkcat

    Darkcat Новый участник

    Прочитал, не помогло. Сделал так:
    Код:
    /ip firewall mangle
    add action=mark-routing chain=prerouting comment=Beeline connection-mark=c_beeline new-routing-mark=\
        r_beeline passthrough=no
    add action=mark-routing chain=output comment=Beeline connection-mark=c_beeline new-routing-mark=\
        r_beeline passthrough=no
    add action=mark-routing chain=prerouting comment=MGTS connection-mark=c_mgts new-routing-mark=r_mgts \
        passthrough=no
    add action=mark-routing chain=output comment=MGTS connection-mark=c_mgts new-routing-mark=r_mgts \
        passthrough=no
    add action=mark-connection chain=input comment=Beeline in-interface=Internet1 new-connection-mark=\
        c_beeline passthrough=no
    add action=mark-connection chain=prerouting comment=Beeline in-interface=Internet1 \
        new-connection-mark=c_beeline passthrough=no
    add action=mark-connection chain=input comment=MGTS in-interface=Internet2 new-connection-mark=c_mgts \
        passthrough=no
    add action=mark-connection chain=prerouting comment=MGTS in-interface=Internet2 new-connection-mark=\
        c_mgts passthrough=no
    
    /ip route
    add check-gateway=ping comment=Beeline distance=2 gateway=95.31.0.1 routing-mark=r_beeline
    add check-gateway=ping comment=MGTS distance=2 gateway=95.165.128.1 routing-mark=r_mgts
    add check-gateway=ping comment="Backup Beeline" distance=3 gateway=95.31.0.1
    add check-gateway=ping comment="Backup MGTS" distance=4 gateway=95.165.128.1
    
    Теперь хотябы ошибка стабильна.
    1. Если включены первые 2 маршрута, вторые 2 выключены - входящие работают на оба адреса, но не работает интернет изнутри сети.
    2. Если выключить первые 2 маршрута, включить вторые 2 - работает интернет изнутри, входящие работают только на первый адрес (его маршрут активен).
    3. Если включено все - работает интернет и входящие на первый адрес (как и п.2).

    Подозреваю, что не все маршруты я маркирую. В списке соединений марки c_ стоят везде.
     
  4. Darkcat

    Darkcat Новый участник

    Вощем победил сам. Маркировалось лишнее.
    Код:
    /ip firewall mangle
    add action=mark-connection chain=prerouting comment=Beeline dst-address=95.31.1.XXX in-interface=\
        Internet1 new-connection-mark=c_beeline passthrough=no
    add action=mark-connection chain=prerouting comment=MGTS dst-address=95.165.132.XXX in-interface=\
        Internet2 new-connection-mark=c_mgts passthrough=no
    add action=mark-routing chain=prerouting comment=MGTS connection-mark=c_mgts new-routing-mark=r_mgts \
        passthrough=no
    add action=mark-routing chain=prerouting comment=Beeline connection-mark=c_beeline new-routing-mark=\
        r_beeline passthrough=no
    add action=mark-routing chain=prerouting new-routing-mark=r_main passthrough=no src-address=10.0.0.0/24
    
    /ip route
    add check-gateway=ping comment=Beeline distance=2 gateway=95.31.0.1 routing-mark=r_beeline
    add check-gateway=ping comment=MGTS distance=2 gateway=95.165.128.1 routing-mark=r_mgts
    add check-gateway=ping comment="balance route" distance=2 gateway=\
        95.31.0.1,95.31.0.1,95.31.0.1,95.165.128.1 routing-mark=r_main
    
    Зафиксировал маркировку входящих пакетов помимо интерфейса еще и адресом назначения и распихал по своим маршрутам.
    Принудительно промаркировал все что изнутри сети и отправил на общий маршрут.
    Скорости у меня 100/30, так что шлюзы поставил 3/1.

    Ну и теперь изнутри сети сервисы по внешним адресам недоступны.
     
  5. Илья Князев

    Илья Князев Администратор Команда форума

    Вот здесь надо добавить in-interface. Иначе у вас пакет идущий внутрь сети будет отмаркирован и уйдет на default-gateway
     
  6. Darkcat

    Darkcat Новый участник

    да, методом тыка разобрался.

    И осталась одна проблема - теперь снаружи недоступен сам роутер. Соединение нужное я вылавливаю, маркирую. А что дальше с ним делать? Марку роутинга ставлю или не ставлю - толку нет. Пакеты пропадают...
     
  7. Илья Князев

    Илья Князев Администратор Команда форума