3.237.254.197

MikroTik, Настройка и установка оборудования , Практика и программирование

MikroTik, Настройка и установка оборудования , Практика и программирование

Ситуация, когда доступны несколько провайдеров не нова, MikroTik Router OS позволяет настроить доступ сразу по нескольким сетевым интерфейсам, а так же настроить балансировку нагрузки в зависимости от ограничений, которые выставляет провайдер.

Первым шагом настроим дополнительный интерфейс. Инициализируем сам интерфейс.

[mkt@MikroTik] /interface> print 
Flags: D - dynamic, X - disabled, R - running, S - slave 
# NAME TYPE MTU 
0 R ether1 ether 1500 
1 R ether2 ether 1500 
2 X ether3 ether 1500
[mkt@MikroTik] /interface> enable 2
[mkt@MikroTik] /interface> print 
Flags: D - dynamic, X - disabled, R - running, S - slave 
# NAME TYPE MTU 
0 R ether1 ether 1500 
1 R ether2 ether 1500 
2 R ether3 ether 1500

Для удобства задаем более понятные имена интерфейсам.

[mkt@MikroTik] /interface> set ether1 name=ISP1
[mkt@MikroTik] /interface> set ether2 name=LOCAL
[mkt@MikroTik] /interface> set ether3 name=ISP2
[mkt@MikroTik] /interface> print 
Flags: D - dynamic, X - disabled, R - running, S - slave 
# NAME TYPE MTU 
0 R ISP1 ether 1500 
1 R LOCAL ether 1500 
2 R ISP2 ether 1500

Теперь назначим IP адрес новому интерфейсу.

[mkt@MikroTik] > ip address add address=192.168.222.100/24 interface=ISP2
[mkt@MikroTik] > ip address print 
Flags: X - disabled, I - invalid, D - dynamic 
# ADDRESS NETWORK BROADCAST INTERFACE 
0 192.168.1.116/24 192.168.1.0 192.168.1.255 ISP1 
1 192.168.0.1/24 192.168.0.0 192.168.0.255 LOCAL 
2 192.168.222.100/24 192.168.222.0 192.168.222.255 ISP2

Настало время изменить маршрутизацию по умолчанию. Для начала, допустим, что оба провайдера предоставляют одинаковую скорость доступа к сети Internet, значит настроим балансировку (это когда для исходящих соединений каналы чередуются), так что бы запросы распеределялись равномерно, т.е. 50/50. Прежде всего удалим старый шлюз по умолчанию.

[mkt@MikroTik] > ip route print 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE 
0 A S 0.0.0.0/0 192.168.1.249 r... 1 
1 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0 
2 ADC 192.168.1.0/24 192.168.1.116 ISP1 0 
3 ADC 192.168.222.0/24 192.168.222.100 ISP2 0
[mkt@MikroTik] > ip route remove 0
[mkt@MikroTik] > ip route print 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE 
0 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0 
1 ADC 192.168.1.0/24 192.168.1.116 ISP1 0 
2 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

И добавим новые.

[mkt@MikroTik] > ip route add dst-address=0.0.0.0/0 
gateway=192.168.1.249,192.168.222.1
[mkt@MikroTik] > ip route print 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE 
0 A S 0.0.0.0/0 192.168.1.249 r... 1 
192.168.222.1 r... 
1 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0 
2 ADC 192.168.1.0/24 192.168.1.116 ISP1 0 
3 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

Допустим,что у первого провайдера скорость доступа в два раза выше чем у второго, тогда 2/3 исходящих запросов надо направить на первого, а оставшиеся 1/3 на второго.

[mkt@MikroTik] > ip route add dst-address=0.0.0.0/0 
gateway=192.168.1.249,192.168.1.249,192.168.222.1
[mkt@MikroTik] > ip route print 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE 
0 A S 0.0.0.0/0 192.168.222.1 r... 1 
192.168.1.249 r... 
192.168.1.249 r... 
1 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0 
2 ADC 192.168.1.0/24 192.168.1.116 ISP1 0 
3 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

Это самый простой вариант конфигурации, в котором мы получаем доступ к Интернету с балансировкой нагрузки, но у этого подхода есть ряд недостатков, например, доступ через локальный NAT к локальному серверу (web, smtp, pop services, которые были настроены ранее) не работа, но не такая большая проблема, но об этом в следующий раз. После добавления второго провайдера в нашу тестовую конфигурацию возникла проблема с ответом определенных служб на желаемом канале, если вы обращаетесь к ним извне через NAT. Например, веб-сервер, выведенный через NAT на IP-адрес первого провайдера, получает запрос, но вероятность того, что ответ пройдет по нужному каналу, больше не равна 100%. Что это за веб-сервер после этого? Механизм маркировки пакетов поможет нам решить эту проблему. Таблица MANGLE предназначена для классификации и маркировки пакетов и соединений, а также для изменения заголовков пакетов. В частности, нас интересует цепочка PREROUTING, которая позволяет пометить пакет перед маршрутизацией. Попробуем разобраться с веб-сервером.

Допустим, мы настроили порт NAT 80 с внешнего IP-адреса 192.168.1.116 (ISP1, первый поставщик) на порт 80 веб-сервера в локальной сети, и нам нужно убедиться, что все ответы, которые будут отправляться с веб-сервера, будут проходить до шлюза первого провайдера. Вот правило для таблицы NAT.

[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.1.116 
protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.2 to-ports=80 
comment=NAT 80 port from ISP1 to local web server
[mkt@MikroTik] > ip firewall nat print 
Flags: X - disabled, I - invalid, D - dynamic 
0 chain=srcnat action=masquerade out-interface=!LOCAL
1 ;;; NAT 80 port from ISP1 to local web server 
chain=dstnat action=dst-nat to-addresses=192.168.0.2 to-ports=80 
protocol=tcp dst-address=192.168.1.116 dst-port=80

Первым делом создадим правило в таблице MANGLE.

[mkt@MikroTik] > ip firewall mangle add chain=prerouting src-address=192.168.0.2 
protocol=tcp src-port=80 action=mark-routing new-routing-mark=to-isp1
[mkt@MikroTik] > ip firewall mangle print 
Flags: X - disabled, I - invalid, D - dynamic 
0 chain=prerouting action=add-src-to-address-list protocol=tcp 
address-list=test_list address-list-timeout=0s dst-port=23
1 chain=prerouting action=mark-routing new-routing-mark=to-isp1 
passthrough=yes protocol=tcp src-address=192.168.0.2 src-port=80

Пакеты с локального адреса 192.168.0.2 с 80 порта буду маркироваться как to-isp1. Затем добавим правило в таблицу маршрутизации.

[mkt@MikroTik] > ip route add gateway=192.168.1.249 routing-mark=to-isp1
[mkt@MikroTik] > ip route print 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE 
0 A S 0.0.0.0/0 192.168.1.249 r... 1 
1 A S 0.0.0.0/0 192.168.1.249 r... 1 
192.168.1.249 r... 
192.168.222.1 r... 
2 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0 
3 ADC 192.168.1.0/24 192.168.1.116 ISP1 0 
4 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

Все, что идет с токеном to-isp1, отправляется на шлюз первого провайдера. Теперь давайте усложним ситуацию, скажем, второй провайдер предоставит на выгодных условиях большую локальную сеть по всему городу, и через эту сеть все 10 филиалов вашей компании объединятся. Все филиалы и офисы используют один и тот же сайт, но какой смысл обращаться к нему через первого провайдера, когда вы можете настроить доступ к нему почти локально. Прежде всего, мы добавляем правило к таблице NAT, согласно которому все запросы, поступившие на внешний IP-адрес, предоставленный вторым провайдером, будут перенаправлены на порт 80 локального порта веб-сервера.

[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.222.100 
protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.2 to-ports=80 
comment=NAT 80 port from ISP2 to local web server
[mkt@MikroTik] > ip firewall nat print 
Flags: X - disabled, I - invalid, D - dynamic 
0 chain=srcnat action=masquerade out-interface=!LOCAL
1 ;;; NAT 80 port from ISP1 to local web server 
chain=dstnat action=dst-nat to-addresses=192.168.0.2 to-ports=80 
protocol=tcp dst-address=192.168.1.116 dst-port=80
2 ;;; NAT 80 port from ISP2 to local web server 
chain=dstnat action=dst-nat to-addresses=192.168.0.2 to-ports=80 
protocol=tcp dst-address=192.168.222.100 dst-port=80

Следующим шагом добавим в таблицу MANGLE еще одно правило:

[mkt@MikroTik] > ip firewall mangle add chain=prerouting src-address=192.168.0.2 
protocol=tcp src-port=80 dst-address=192.168.222.0/24 action=mark-routing 
new-routing-mark=to-isp2
[mkt@MikroTik] > ip firewall mangle print 
Flags: X - disabled, I - invalid, D - dynamic 
0 chain=prerouting action=add-src-to-address-list protocol=tcp 
address-list=test_list address-list-timeout=0s dst-port=23
1 chain=prerouting action=mark-routing new-routing-mark=to-isp2 
passthrough=yes protocol=tcp src-address=192.168.0.2 
dst-address=192.168.222.0/24 src-port=80
2 chain=prerouting action=mark-routing new-routing-mark=to-isp1 
passthrough=yes protocol=tcp src-address=192.168.0.2 src-port=80

Пакеты с локального адреса 192.168.0.2 из порта 80 будут помечены как to-isp2, если они предназначены для подсети второго провайдера. Ну и в заключение, правило в таблице маршрутизации:

[mkt@MikroTik] > ip route add gateway=192.168.222.1 routing-mark=to-isp2 

[mkt@MikroTik] > ip route print 
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE 
0 A S 0.0.0.0/0 192.168.1.249 r... 1 
1 A S 0.0.0.0/0 192.168.222.1 r... 1 
2 A S 0.0.0.0/0 192.168.1.249 r... 1 
192.168.1.249 r... 
192.168.222.1 r... 
3 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0 
4 ADC 192.168.1.0/24 192.168.1.116 ISP1 0 
5 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

Теперь на запросы, полученные от первого провайдера, будет отвечать шлюз первого провайдера, а на запросы от второго провайдера и из подсети второго провайдера будет отвечать шлюз второго провайдера.