пятница, 30 марта 2012 г.

Простая балансировка между двумя провайдерами

Простая балансировка между двумя провайдерами
Допустим есть два провайдера, оба канала приходят в один микротик.
Необходимо сделать балансировку нагрузки на оба канала.
Ширина канала установленная провайдерами может отличаться,
поэтому может иметь смысл делить нагрузку в зависимости от скорости.
первый случай. У нас есть три физических интерфейса в два из которых заходит провайдер, один смотрит во внутреннюю сеть.
Провайдер 1 (пров1) дает нам динамический IP-адрес, пров2 дает статический.

[admin@MikroTik] > /interface print
Flags: D - dynamic, X - disabled, R - running, S - slave
# NAME TYPE MTU
0 R prov1 ether 1500
1 R prov2 ether 1500
2 R local ether 1500

Настроим получение динамического адреса:

[admin@MikroTik] > ip dhcp-client add interface=prov1

[admin@MikroTik] > ip dhcp-client enable
numbers: 0


[admin@MikroTik] > ip dhcp-client print
Flags: X - disabled, I - invalid
# INTERFACE USE ADD STATUS ADDRESS
0 prov1 yes yes bound 192.168.136.136/24

Адрес от второго провайдера вводим вручную:

[admin@MikroTik] > ip address add address=10.10.100.10/16 interface=prov2

И внутренний адрес:

[admin@MikroTik] > ip address add address=192.168.0.1/24 interface=local

Теперь настроим маршрутизацию.
Удалим все старые маршруты по умолчанию
[admin@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 10.10.0.0/16 10.10.100.10 prov2 0
1 ADC 192.168.0.0/24 192.168.0.1 local 0
2 ADC 192.168.136.0/24 192.168.136.136 prov1 0

У нас их и нет, т.к. в настройках DHCP клиента мы не поставили чек Add Default Route
Т.к в данном случае на все-равно какие пакеты куда идут, главное чтобы уходили) Просто добавим несколько gateway для маршрута по умолчанию

[admin@MikroTik] > ip route add dst-address=0.0.0.0/0 gateway=192.168.136.254,10.10.0.254

[admin@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.136.254... 1
10.10.0.254 rea...
1 ADC 10.10.0.0/16 10.10.100.10 prov2 0
2 ADC 192.168.0.0/24 192.168.0.1 local 0
3 ADC 192.168.136.0/24 192.168.136.136 prov1 0

Так это выглядит в winbox



Пакеты будут идти как на первый так и на второй шлюз.
Например может быть так что первый провайдер предоставляет больший канал, поэтому большую часть трафика нужно посылать через него.
Поэтому маршрут по умолчанию будет другого вида:
[admin@MikroTik] > ip route add dst-address=0.0.0.0/0 gateway=192.168.136.254, 192.168.136.254, 10.10.0.254

Из трех пакетов два пойдут на 192.168.136.254, можно так поделить соотношение и 80\20 и 60\40.

Второй случай, у вас есть внутренние ресурсы, которые доступны извне. Я об этом писал уже здесь.
Понятно что обращение к ним будет скорее всего через второго провайдера который дал статический адрес.
Настраивается это также как и в том самом посте.
Сначала сделаем проброс портов, пусть у нас будет почтовый сервер SMTP с адресом 192.168.0.10

[admin@MikroTik] > ip firewall nat add chain=dstnat dst-address=10.10.100.10 protocol=tcp dst-port=25 action
=dst-nat to-addresses=192.168.0.10 to-ports=25


Теперь настроим mangle, чтобы пакеты маркировались
Маркировка пакетов идущих с почтового сервера

[admin@MikroTik] > ip firewall mangle add chain=prerouting src-address=192.168.0.10 protocol=tcp src-port=25 action=mark-routing new-routing-mark=inprov2

Вносим изменения в таблицу маршрутизации, чтобы все промаркированные пакеты шли через провайдера 2

[admin@MikroTik] > ip route add gateway=10.10.0.254 routing-mark=inprov2

В случае с почтовым сервером это почти обязательно делать, т.к. на той стороне почтовик может зарезать все пакеты, подумав "отправил по одному адресу, а валятся совсем с другого".

EoIP на Mikrotik

EoIP туннель на микротике.
Объединяем удаленные филиалы.

Есть куча вариантов объединения удаленных филиалов, можно делить и на подсети, можно использовать общее адресное пространство.
Также много и способов организации каналов передачи данных между этими филиалами,
тут вам и обычные PPP протоколы pptp,l2tp,openvpn и множество дополнительных туннелей, например IPIP и EoIP(все в терминологии mikrotik).
Хочу сейчас остановиться на последнем, а именно на Ethernet over IP (EoIP).
Из названия видно, что такой туннель позволяет сэмулировать сеть на втором уровне модели OSI используя сетевой уровень.
Понятнее можно представить, что обычный IP протокол работает поверх Ethernet. А тут все почти наоборот. Это дает возможность объеденить разные точки в один широковещательный домен пробрасывая тунель через IP сети.
В примере будет два удаленных офиса, между которыми находится один роутер провайдера. Таких роутеров может быть сколько угодно, и не от одного провайдера расположенных на значительном удалении друг от друга.
Главное чтобы между офисами был канал связи, а через сколько хопов он проходит уже неважно.
Для простоты будет один роутер.

Итак, имеем два роутера R1 и R2, между ними R3. Нам нужно объденить офис 1 и офис 2 между собой, и сделать так чтобы у них была единая адресация сети 192.168.100.0/24.
Первоначальные настройки для R1
[admin@MikroTik] > /ip address add address=10.10.38.101/8
[admin@MikroTik] > /ip address add address=192.168.100.1/24


настройки для R2
[admin@MikroTik] > /ip address add address=11.10.24.101/8
[admin@MikroTik] > /ip address add address=192.168.100.2/24


настройки для R3
[admin@MikroTik] > /ip address add address=10.10.38.100/8
[admin@MikroTik] > /ip address add address=11.10.24.100/8


Адреса теперь есть, осталось прописать маршруты.
R1:
/ip route add dst-address=11.0.0.0/8 gateway=10.10.38.100
R2:
/ip route add dst-address=10.0.0.0/8 gateway=11.10.24.100

Проверяем доступность с роутера R2

[admin@MikroTik] > tool traceroute 10.10.38.101
ADDRESS STATUS
1 11.10.24.100 1ms 1ms 1ms
2 10.10.38.101 2ms 1ms 1ms


Можно уже создавать туннели EoIP
R1:
/interface eoip add remote-address=11.10.24.101 tunnel-id=10 disabled=no

R2:
/interface eoip add remote-address=10.10.38.101 tunnel-id=10 disabled=no

remote-address это адрес удаленного роутера с которым мы хотим создать туннель
tunnel-id идентификатор туннеля одинаковый с обоих сторон
disabled=no указывает на то что мы создаем туннель который сразу будет активным
еще есть другие параметры, например name, но в данном примере роутер поставил имя по умолчанию.
Для R2 я сделал несколько скриншотов, того как создается туннель через winbox
Если все сделано верно, то туннель поднимается. Проверить статус можно через команду





[admin@MikroTik] > /interface eoip print
Flags: X - disabled, R - running
0 R name="eoip-tunnel1" mtu=1500 mac-address=02:84:56:52:3F:AD arp=enabled
remote-address=10.10.38.101 tunnel-id=10


Буква R говорит что связь есть и туннель работает.
Скриншот с winbox


Дальше нам нужно объединить как раз таки в одну сеть два филиала.
Для этого создадим мост между интерфейсами EoIP и ethernet интерфейсами роутеров.
R1:
/interface bridge add
/interface bridge port add bridge=bridge1 interface=ether1
/interface bridge port add bridge=bridge1 interface= eoip-tunnel1


R2:
/interface bridge add
/interface bridge port add bridge=bridge1 interface=ether1
/interface bridge port add bridge=bridge1 interface= eoip-tunnel1


Для R2 используя winbox




Проверяем настройки моста и портов,туннеля на R1 и R2

[admin@MikroTik] > /interface bridge print
Flags: X - disabled, R - running
0 R name="bridge1" mtu=1500 arp=enabled mac-address=FE:31:4C:F1:2C:A7
protocol-mode=none priority=0x8000 auto-mac=yes
admin-mac=00:00:00:00:00:00 max-message-age=20s forward-delay=15s
transmit-hold-count=6 ageing-time=5m

/interface bridge port print


Для тестирования я сделал на каждом роутере по одному адресу из сети 192.168.100.0/24.
Сделаем ping с обоих роутеров по их внутренним локальным адресам, а также traceroute чтобы было видно что эти хосты видят друг друга как в одном сегменте.

R1:
[admin@MikroTik] /tool> flood-ping 192.168.100.2
sent: 2
received: 1
min-rtt: 1
avg-rtt: 1
max-rtt: 1

sent: 500
received: 500
min-rtt: 0
avg-rtt: 0
max-rtt: 2

[admin@MikroTik] /tool> traceroute 192.168.100.2
ADDRESS STATUS
1 192.168.100.2 1ms 1ms 1ms


R2:
[admin@MikroTik] /tool> flood-ping 192.168.100.1
sent: 2
received: 1
min-rtt: 1
avg-rtt: 1
max-rtt: 1

sent: 500
received: 500
min-rtt: 0
avg-rtt: 0
max-rtt: 2

[admin@MikroTik] /tool> traceroute 192.168.100.1
ADDRESS STATUS
1 192.168.100.1 4ms 3ms 2ms




Ну вот вроде и все. EoIP довольно хорош и прост. единственное что туннель отъедает часть ширины канала, но чем-то придется платить за удобство.

четверг, 29 марта 2012 г.

VRRP пример 2

В первом примере было только отказоустойчивое решение, когда падал один роутер вся нагрузка переходила на резервный.
Часто нельзя позволить держать два мощных роутера и при этом задействовать по сути только один.
Как пример можно представить себе сеть с двумя группами хостов подключенных в разные коммутаторы.



Добавим к примеру 1 еще один виртуальный роутер с VRID 200.
Основные отличия от примера 1,это то что мы уже не будем использовать дополнительный виртуальный IP адрес 192.168.100.3
Виртуальными адресами роутеров будут их реальные адреса.
Так, для VRID 100 это будет ip адрес R1 192.168.100.1
для VRID 200 это будет ip адрес R2 192.168.100.2
принцип тотже, при падении R1 все пакеты идущие на 192.168.100.1 будут заворачиваться на R2.
Аналогично, при падении R2 все пакеты идущие на 192.168.100.2 будут заворачиваться на R1.


Настройка для R1:
[admin@MikroTik] > /ip address add address=192.168.100.1/24 interface=ether1
[admin@MikroTik] > /interface vrrp add interface=ether1 vrid=100 priority=250

[admin@MikroTik] > /interface vrrp add interface=ether1 vrid=200 priority=100
[admin@MikroTik] > /ip address add address=192.168.100.2/24 interface=vrrp2




Настройка для R2:
[admin@MikroTik] > /ip address add address=192.168.100.2/24 interface=ether1
[admin@MikroTik] > /interface vrrp add interface=ether1 vrid=100 priority=100


[admin@MikroTik] > /interface vrrp add interface=ether1 vrid=200 priority=254
[admin@MikroTik] > /ip address add address=192.168.100.1/24 interface=vrrp2

Получим :
R1
/interface vrrp print
Flags: X - disabled, I - invalid, R - running, M - master, B - backup
0 RM name="vrrp1" mtu=1500 mac-address=00:00:5E:00:01:64 arp=enabled interface=ether1 vrid=100 priority=254
interval=1 preemption-mode=yes authentication=none password="" on-backup="" on-master=""

1 B name="vrrp2" mtu=1500 mac-address=00:00:5E:00:01:C8 arp=enabled interface=ether1 vrid=200 priority=100
interval=1 preemption-mode=yes authentication=none password="" on-backup="" on-master=""


R2

/interface vrrp print
Flags: X - disabled, I - invalid, R - running, M - master, B - backup
0 B name="vrrp1" mtu=1500 mac-address=00:00:5E:00:01:64 arp=enabled
interface=ether1 vrid=100 priority=100 interval=1 preemption-mode=yes
authentication=none password="" on-backup="" on-master=""

1 RM name="vrrp2" mtu=1500 mac-address=00:00:5E:00:01:C8 arp=enabled
interface=ether1 vrid=200 priority=254 interval=1 preemption-mode=yes
authentication=none password="" on-backup="" on-master=""

Видим, что MAC адреса вне зависимости от того, что используются реальные адреса прописанные на интерфейсах роутеров имеют вид присущий VRRP.
При пинге 192.168.100.1 разрешаться будет MAC приписанный интерфейсу, а при переключении на R2 будет уже разрешаться MAC адрес виртуального роутера.
До падения R1:

C:\Documents and Settings\Администратор>arp -a

Интерфейс: 192.168.100.10 --- 0x10003
IP-адрес Физический адрес Тип
192.168.136.1 00-50-56-c0-00-08 динамический

C:\Documents and Settings\Администратор>ping 192.168.100.1

Обмен пакетами с 192.168.100.1 по с 32 байт данных:

Ответ от 192.168.100.1: число байт=32 время<1мс TTL=64
Ответ от 192.168.100.1: число байт=32 время<1мс TTL=64

Статистика Ping для 192.168.100.1:
Пакетов: отправлено = 2, получено = 2, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек
Control-C
^C
C:\Documents and Settings\Администратор>arp -a

Интерфейс: 192.168.100.10 --- 0x10003
IP-адрес Физический адрес Тип
192.168.100.1 00-0c-29-4e-49-d5 динамический
192.168.136.1 00-50-56-c0-00-08 динамический


После падения R1:

C:\Documents and Settings\Администратор>ping 192.168.100.1

Обмен пакетами с 192.168.100.1 по с 32 байт данных:

Ответ от 192.168.100.1: число байт=32 время=2мс TTL=64
Ответ от 192.168.100.1: число байт=32 время<1мс TTL=64

Статистика Ping для 192.168.100.1:
Пакетов: отправлено = 2, получено = 2, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 0мсек, Максимальное = 2 мсек, Среднее = 1 мсек
Control-C
^C
C:\Documents and Settings\Администратор>arp -a

Интерфейс: 192.168.100.10 --- 0x10003
IP-адрес Физический адрес Тип
192.168.100.1 00-00-5e-00-01-64 динамический
192.168.100.2 00-0c-1b-2c-3d-4f динамический
192.168.136.1 00-50-56-c0-00-08 динамический


Ну, вроде все замечательно, имеем для виртуальных роутера из R1 и R2.
R1 является master для VRID 100 и backup для VRID 200
R2 является backup для VRID 100 и master для VRID 200
Таким образом если у половины хостов в сети шлюзом прописан R1, у другой R2, то помимо отказоустойчивости мы еще получим и "равномерную" нагрузку на оба роутера.
Для этого конечно можно пойти и прописать половине хостов один шлюз,другой половине другой. Долго не так ли?
Есть выход, использовать атрибуты DHCP. На первой картинке видно, что хосты подключены в разные свитчи, которые могут являться DHCP-relay.
В настройках DHCP сервера, можно каждому такому relay приписать свой пул выдаваемых адресов. Проще говоря, хосты подключенные к первому свитчу получат адреса из одного пула, а подключенные ко второму из другого.
При этом подсеть у них будет одна,главное чтобы области(пулы) не пересекались.

VRRP на Mikrotik' ах

Что такое VRRP? Можно почитать хотя бы на xgu.ru тут
Кратко:"VRRP (Virtual Router Redundancy Protocol) — сетевой протокол,
предназначенный для увеличения доступности маршрутизаторов выполняющих роль шлюза по умолчанию.
Это достигается путём объединения группы маршрутизаторов в один виртуальный маршрутизатор
и назначения им общего IP-адреса, который и будет использоваться как шлюз по умолчанию для компьютеров в сети. "
Проще говоря VRRP используется для создания отказоустойчивого и производительного "кластера", если проводить аналогию с серверами.
Чаще всего резервируется шлюз по умолчанию, настроенный через DHCP на рабочих станциях и серверах.
Например, есть два маршрутизатора, один основной, а другой резервный. Резервных может быть несколько, переключение происходит по приоритету.
Так вот, при падении основного резервный подхватывает все пакеты идущие на шлюз по умолчанию.
Пример1. Два маршрутизатора подключенных к двум внешним каналам, отказоустойчивое решение с основным и резервным маршрутизатором.


VRRP пример 1

Сделаем настройки на первом роутере

[admin@MikroTik] > /ip address add address=192.168.100.1/24 interface=ether1
[admin@MikroTik] > /interface vrrp add interface=ether1 vrid=100 priority=250
[admin@MikroTik] > /ip address add address=192.168.100.3/24 interface=vrrp1


На втором делаем аналогичные настройки, только другой IP-адрес

[admin@MikroTik] > /ip address add address=192.168.100.2/24 interface=ether1
[admin@MikroTik] > /interface vrrp add interface=ether1 vrid=100
[admin@MikroTik] > /ip address add address=192.168.100.3/24 interface=vrrp1


VRID- идентификатор группы роутеров или идентификатор виртуального роутера.
priority- роутер с большим приоритетом будет выбран основным(Master), а с меньшим резервным(Slave, backup)
По умолчанию приоритет 100, поэтому на втором роутере его можно не менять.

Также пример используя GUI winbox для R2

Добавляем IP-адрес



Создаем VRRP-интерфейс с заданными атрибутами.





Добавляем виртуальный IP-адрес на интерфейсе vrrp



Проверить можно уже когда будет создан VRRP-интерфейс на обоих роутерах в окне Interfaces.
На основном роутере будет RM router master, а на резервном B.



Также через командную строку:
R1
/interface vrrp print
Flags: X - disabled, I - invalid, R - running, M - master, B - backup
0 RM name="vrrp1" mtu=1500 mac-address=00:00:5E:00:01:64 arp=enabled interface=ether1 vrid=100 priority=250
interval=1 preemption-mode=yes authentication=none password="" on-backup="" on-master=""


R2
/interface vrrp print
Flags: X - disabled, I - invalid, R - running, M - master, B - backup
0 B name="vrrp1" mtu=1500 mac-address=00:00:5E:00:01:64 arp=enabled
interface=ether1 vrid=100 priority=100 interval=1 preemption-mode=yes
authentication=none password="" on-backup="" on-master=""

Как видно и MAC-адрес у них один, что логично конечно. Все пакеты в штатном режиме будут идти через R1. R2 никакой деятельности по маршрутизации пакетов вести не будет, пока доступен Master.

Теперь протестируем это, на тестовой машине с адресом 192.168.100.10 шлюз по умолчанию стоит 192.168.100.3
Подключение по локальной сети - Ethernet адаптер:

DNS-суффикс этого подключения . . :
IP-адрес . . . . . . . . . . . . : 192.168.100.10
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз . . . . . . . . . . : 192.168.100.3


Начинаем пинговать и потом гасим основной роутер R1

C:\Documents and Settings\Администратор>ping -t 192.168.100.3

Обмен пакетами с 192.168.100.3 по с 32 байт данных:

Ответ от 192.168.100.3: число байт=32 время=1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время=1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64
Превышен интервал ожидания для запроса.
Ответ от 192.168.100.3: число байт=32 время=8мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время=2мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время=1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время=2мс TTL=64
Ответ от 192.168.100.3: число байт=32 время=1мс TTL=64
Ответ от 192.168.100.3: число байт=32 время<1мс TTL=64

Статистика Ping для 192.168.100.3:
Пакетов: отправлено = 19, получено = 18, потеряно = 1
(5% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 0мсек, Максимальное = 8 мсек, Среднее = 0 мсек
Control-C


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

Еще пара атрибутов настройки VRRP-интерфейса
interval- интервал опроса роутерами друг друга принадлежащим одному VRID, по умолчанию 1 сек.
password-пароль для атуентификации роутеров между собой. Т.к. VRRP уязвим в плане безопасности, можно ввести пароль.
Для этого ставим к примеру simple- атуентификацию и вписываем пароль на всех роутерах. Те роутеры где не будет пароля. либо не тот участвовать в создании виртуального роутера не будут.
В качестве полезности: VRRP не работает через VLAN, что конечно огорчает. Однако сам VLAN можно уместить вовнутрь VRRP ;)

ps Будут еще примеры на тему VRRP...

вторник, 6 марта 2012 г.

Подзапустил блог

Эх.. неужели как обычно, я утоплю в бездну еще один блог?)
Нужно отучиваться делать поспешные выводы основанные на эмоциях, это вредно для карьеры.
Стоит больше выдерживать паузу, и не рубить с плеча. Потом просто ты можешь оказаться уже не нужным.