Я потратил немало времени над этой ситуацией, и вот как я добился работы:
У меня есть роутер с 3 интерфейсами: 1 внутренний и два внешних:
`/interface print`
```
# NAME TYPE RX-RATE TX-RATE MTU
0 R 1-ISP1 ether 0 0 1500
1 R 2-ISP2 ether 0 0 1500
2 R 3-Internal ether 0 0 1500
3 R 1-2 Bond bonding 0 0 1500
```
Как видно выше, я создал интерфейс bonding из двух внешних адаптеров:
`/interface bonding print`
```
0 R name="1-2 Bond" mtu=1500 mac-address=XX:XX:XX:XX:XX:XX arp=enabled
slaves=ISP1,ISP2 mode=balance-rr primary=none
link-monitoring=mii-type1 arp-interval=100ms mii-interval=100ms
down-delay=100ms up-delay=100ms lacp-rate=1sec
```
Я добавил IP-адреса к интерфейсам:
`/ip address print`
```
# ADDRESS NETWORK BROADCAST INTERFACE
0 192.168.1.254/24 192.168.1.0 192.168.1.255 3-Internal
1 85.xx.xx.xx/30 85.xx.xx.xx 85.xx.xx.xx 1-2 Bond
2 195.xx.xx.xx/30 195.xx.xx.xx 195.xx.xx.xx 1-2 Bond
```
Я добавил политику Mangle для трафика. ВАЖНО! dst-address для цепочек 0 и 1 НЕ совпадают с адресами для интерфейса bonding, они находятся в разных подсетях. У меня есть /30 сеть для маршрутизации всего трафика к целевой /26 сети к Mikrotik от ISP1. То же самое касается входящего трафика от ISP2, то есть /30 сеть для маршрутизации всего трафика к целевой /27 сети от ISP2. ВАЖНО! Правило 2 и 3 применяются к трафику, генерируемому сервером во внутренней сети, чтобы направить этот тип трафика через один из ISP. "new-routing" должен быть здесь, чтобы иметь возможность направлять весь исходящий трафик через ISP по моему выбору. Также обратите внимание, что правило #2 — единственное, у которого есть "Passthrough=yes", чтобы добиться принудительной маршрутизации:
`/ip firewall mangle print`
```
0 ;;; ISP1 incoming
chain=prerouting in-interface=1-2 Bond dst-address=85.xx.xx.xx/26
connection-state=new dst-address-list=WAN-NetIT action=mark-connection
new-connection-mark=conn_ISP1 passthrough=no
1 ;;; ISP2: incoming
chain=prerouting in-interface=1-2 Bond dst-address=195.xx.xx.xx/27
connection-state=new action=mark-connection
new-connection-mark=conn_ISP2 passthrough=no
2 ;;; Internal going out
chain=prerouting in-interface=3-Internal dst-address=!192.168.0.0/16
connection-state=new action=mark-connection new-connection-mark=conn_out
passthrough=yes
3 chain=prerouting in-interface=3-Internal connection-mark=conn_out
action=mark-routing new-routing-mark=route_ISP1 passthrough=no
4 ;;; ISP1: answer to incoming
chain=prerouting in-interface=3-Internal connection-mark=conn_ISP1
action=mark-routing new-routing-mark=route_ISP1 passthrough=no
5 ;;; ISP2: answer to incoming
chain=prerouting in-interface=3-Internal connection-mark=conn_ISP2
action=mark-routing new-routing-mark=route_ISP2 passthrough=no
```
Я добавил маршруты. ВАЖНО! Маршрут #5 должен существовать, если вы хотите разрешить Mikrotik устанавливать соединения с внешними серверами, то есть для контакта с серверами NTP. В противном случае это не обязательно:
`/ip route print`
```
# DST-ADDRESS PREFSRC G GATEWAY INTERFACE ROUTING MARK
0 ADC 85.xx.xx.xx/30 85.xx.xx.xx 1-2 Bond
1 ADC 192.168.1.0/24 192.168.1.254 3-Internal
2 ADC 195.xx.xx.xx/30 195.xx.xx.xx 1-2 Bond
3 A S 0.0.0.0/0 r 85.xx.xx.xx 1-2 Bond route_ISP1
4 A S 0.0.0.0/0 r 195.xx.xx.xx 1-2 Bond route_ISP2
5 A S 0.0.0.0/0 r 85.xx.xx.xx 1-2 Bond
```
Затем я добавил много правил DNAT для направления входящего трафика к серверам во внутренней сети. Каждый сервер имеет адрес в сети 192.168.1.x с Mikrotik в качестве шлюза по умолчанию. Поскольку каждый сервер должен быть доступен через 2 разных ISP (то есть иметь 2 внешних IP-адреса), мне пришлось настроить 2 правила DNAT для каждого сервера:
```
chain=dstnat dst-address=85.xx.xx.yy
protocol=tcp dst-port=80 action=dst-nat
to-addresses=192.168.0.aa to-ports=80
chain=dstnat dst-address=195.xx.xx.zz
protocol=tcp dst-port=80 action=dst-nat
to-addresses=192.168.0.aa to-ports=80
```
Для каждого сервера, которому необходимо инициировать соединение с серверами во внешней сети (например, SMTP-сервером), мне пришлось добавить правила SNAT для каждого ISP:
```
chain=srcnat routing-mark=route_ISP1 action=src-nat to-addresses=85.xx.xx.vv to-ports=0-65535
chain=srcnat routing-mark=route_ISP2 action=src-nat to-addresses=195.xx.xx.ww to-ports=0-65535
```
В целом, это покрывает все, НО! Я не смог успешно пометить и SNAT трафик, генерируемый самим Mikrotik, чтобы устранить необходимость в дополнительном шлюзе по умолчанию в правилах маршрутизации

Может быть, кто-нибудь сможет помочь мне с этим, или это "особенность"?