Представляю третью статью из серии, ориентированных на «продолжающих» системных администраторов, для опытных я вряд ли открою что-то новое.
В этих статьях мы рассмотрим построение интернет шлюза на linux, позволяющего связать несколько офисов компании, и обеспечить ограниченный доступ в сеть, приоритетзацию трафика (QoS) и простую балансировку нагрузки с резервированием канала между двумя провайдерами.
Конкретно в этой части:
- QoS во всю ширь в Shorewall
- Более подробная настройка Shorewall
- Раскидывание трафика по каналам в соответствии с протоколами
- Костыли, без них, никуда
А в первой части были рассмотрены:
- Простейшая настройка Shorewall
- Ужасно сложная настройка dnsmasq
- Не менее сложная настройка OpenVPN
- И для многих продолжающих админов нетипичная, динамическая маршрутизация, на примере OSPF
А во второй:
- Более подробная настройка Shorewall
- Страшный и не понятный QoS
- Балансировка нагрузки и резервирование
Планирование классификации трафика
Все, что описано дальше, это просто моё видение вопроса, ваше мнение может (и по хорошему должно быть) другим.
Итак, выделим несколько видов трафика:
- Служебный трафик (DNS, ICMP, TCP/ACK)
- Туннельный трафик
- Voip трафик
- Административный (SSH и т.п.)
- Пользовательский
- Высоко приоритетный
- Обычный
- Низко приоритетный
- VPN Трафик
В свою очередь, пользовательский трафик, внутри каждого класса, мы поделим между некоторыми службами.
Осознать всю непростую конфигурацию можно посмотрев на картинку (левый верхний угол: родительский класс, правый верхний: приоритет, по нижним углам: минимальная и максимальная скорость):
Разруливать мы будем трафик на не очень то и быстром канале в 1 мбит (подумать только, не так давно и 128 кбит было круто), точнее на двух (чтобы было поинтереснее)!
Правила работают таким образом: если у класса есть несколько дочерних классов, с одинаковым приоритетом, то при расчете, кому сколько полосы дать сверх лимита, будет использована пропорция от минимальных скоростей этих классов. Если приоритеты не одинаковы, то они войдут в расчет как дополнительный весовой коэффициент. Сверх минимальной полосы, выделенной у класса, есть ещё некая не распределенная полоса, она может быть использована, если канал свободен в достаточной мере. В большинстве случаев я указывал для этой полосы ключевое значение full (максимум родительского класса).
Для повышения эффективности использования канала, не стоит делить его между всеми классами по минимальной доступной скорости. В такой конфигурации, перераспределение скорости будет идти с очень большой задержкой (SIP, а точнее RTP этому несказанно обрадуется). В любом случае, скорость перераспределяется с некоторой задержкой, и она больше всего зависит от видов протоколов используемых пользователями. К примеру, torrent, отожравший доступный максимум, крайне медленно сходит с занимаемой полосы (до минут), проблема из-за большого числа источников трафика до нашего сервера (пока они все среагируют на снижение скорости…).
Но хватит лирики, начнем (часть конфигов мы используем из прошлых статей, если что-то мной не настроено здесь, вы знаете где искать):
Объявим переменные:
# # Shorewall -- /etc/shorewall/params # # Assign any variables that you need here. # # It is suggested that variable names begin with an upper case letter # to distinguish them from variables used internally within the # Shorewall programs # # Example: # # NET_IF=eth0 # NET_BCAST=130.252.100.255 # NET_OPTIONS=routefilter,norfc1918 # # Example (/etc/shorewall/interfaces record): # # net $NET_IF $NET_BCAST $NET_OPTIONS # # The result will be the same as if the record had been written # # net eth0 130.252.100.255 routefilter,norfc1918 # ############################################################################### IF_RED1=eth0 # Шлюзы одинаковые, так как работаем в лаборатории, и оба интерфейса смотрят в одну сеть GW_RED1=192.168.10.1 IF_RED2=eth2 GW_RED2=192.168.10.1 IF_GRN=eth1 NET_GRN=172.16.0.0/23 IF_TUN=tap+ # Тут у нас костыли из-за не полной поддержки ipset во всех местах, обещают исправить в ближайших релизах IP_SLOW=172.16.0.45 IP_SLOW_SPEC=172.16.0.45 IP_VIP=172.16.0.46 IP_VIP_SPEC=172.16.0.46 IP_NORMAL=$NET_GRN IP_NORMAL_SPEC=172.16.0.47 #LAST LINE -- DO NOT REMOVE
Объявим провайдеров:
# # Shorewall -- /etc/shorewall/providers # # For information about entries in this file, type "man shorewall-providers" # # For additional information, see http://shorewall.net/MultiISP.html # ############################################################################################ #NAME NUMBER MARK DUPLICATE INTERFACE GATEWAY OPTIONS COPY pr1 1 0x10000 - $IF_RED1 GW_RED1 track,balance=1 pr2 2 0x20000 - $IF_RED2 GW_RED2 track,balance=1 # Этот раздел раскрою чуть позже. Это костылики :) tap0 4 0x30000 - tap0 - loose tap1 3 0x40000 - tap1 - loose
# # Shorewall -- /etc/shorewall/interfaces # # For information about entries in this file, type "man shorewall-interfaces" # # The manpage is also online at # http://www.shorewall.net/manpages/shorewall-interfaces.html # ############################################################################### ?FORMAT 2 ############################################################################### #ZONE INTERFACE OPTIONS red $IF_RED1 dhcp,routeback,optional red $IF_RED2 dhcp,routeback,optional grn $IF_GRN dhcp,routeback,optional tun tap0 dhcp,routeback,optional tun tap1 dhcp,routeback,optional
Сделаем кой чего, во время запуска:
# # Shorewall -- /etc/shorewall/init # # Add commands below that you want to be executed at the beginning of # a "shorewall start", "shorewall-reload" or "shorewall restart" command. # # For additional information, see # http://shorewall.net/shorewall_extension_scripts.htm # ############################################################################### modprobe ifb numifbs=3 ip link set ifb0 up ip link set ifb1 up ip link set ifb2 up ipset -N ip_vip iphash ipset -N ip_vip_spec iphash ipset -N ip_normal iphash ipset -A ip_normal $NET_GRN ipset -N ip_normal_spec iphash ipset -N ip_slow iphash ipset -N ip_slow_spec iphash
# # Shorewall -- /etc/shorewall/started # # Add commands below that you want to be executed after shorewall has # been completely started, reloaded or restarted. The difference between # this extension script and /etc/shorewall/start is that this one is # invoked after the 'shorewall' chain has been created (thus # signaling that the firewall is completely up). # # This script should not change the firewall configuration directly but # may do so indirectly by running /sbin/shorewall with the 'nolock' # option. # # See http://shorewall.net/shorewall_extension_scripts.htm for additional # information. # ############################################################################### IPROUTE='/usr/sbin/ip' IFS=$'\n' for line in $(grep tap /etc/shorewall/providers | grep loose);do IFS=$' \t\n' read -r -a line_ <<< "$line" $IPROUTE route del default table ${line_[1]} >/dev/null 2>&1 done
Дополним политику маршрутизации (необходимость этого шага раскрою ниже):
# # Shorewall -- /etc/shorewall/rtrules # # For information about entries in this file, type "man shorewall-rtrules" # # For additional information, see http://www.shorewall.net/MultiISP.html # #################################################################################### #SOURCE DEST PROVIDER PRIORITY MASK 0.0.0.0/0 0.0.0.0/0 tap0 19001 0.0.0.0/0 0.0.0.0/0 tap1 19002
Объявим кучу классов для трафика:
# # Shorewall -- /etc/shorewall/tcclasses # # For information about entries in this file, type "man shorewall-tcclasses" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ############################################################################### #INTERFACE:CLASS MARK RATE: CEIL PRIORITY OPTIONS # DMAX:UMAX INCLUDE tcclasses.1 INCLUDE tcclasses.2 INCLUDE tcclasses.3 INCLUDE tcclasses.4 INCLUDE tcclasses.5 INCLUDE tcclasses.6
# # Shorewall -- /etc/shorewall/tcclasses # # For information about entries in this file, type "man shorewall-tcclasses" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ############################################################################### #INTERFACE:CLASS MARK RATE: CEIL PRIORITY OPTIONS # DMAX:UMAX # Выделяем трафик, который попал на интерфейс локальной сети # В этом классе будет весь трафик из интернета 1:1:2 - 1mbit 2mbit 1 # В этом от локальной сети 1:1:3 - 998mbit 999mbit 2 # Выделим для ACK пакетов широкую полосу. Минимальная предполагает, что есть # только TCP трафик с максимальным MTU (меньше всего пакетов ACK), и для # плохово варианта, берем что у нас все пакеты в четверь от MTU (пакетов ACK больше), # еще выделим поток пакетов до одного получателя 1:2:4 - full*64/1500 full*64*4/1500 1 tcp-ack # Для SSH у нас два класса, первый, для коротких пакетов (в основном команды) 1:2:5 - 32kbit 128kbit 2 # Второй для длинных пакетов (для передачи файлов к примеру) 1:2:6 - 32kbit full*9/10 5 flow=dst # Отдельная полоса для DNS и ICMP, 1:2:7 - 32kbit 128kbit 3 # позволит уменьшить задержки на запросах DNS 1:7:8 - 16kbit full 1 # и сделает PING интереснее 1:7:9 - 16kbit full 1 # Тут выделяем отдельную полосу для VoIP трафика 1:2:A - 180kbit 180kbit 1 # Это для чистого SIP (один канал u(a)law), используем еще и маркировку пакетов от nf_conntrack_sip 1:A:B 1 90kbit full 1 # Это для SIP в VPN тунеле (межофисный трафик) 1:A:C - 90kbit full 1 # Выделяем пользовательский трафик 1:2:D - 252kbit full 4 # Класс обычного пользовательского трафика 1:D:E - 100kbit full 2 # Тут живет VPN (который запускает пользователь) 1:D:F - 32kbit full 1 # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются) 1:E:10 - 25kbit full 1 flow=dst # Для RDP 1:E:12 - 15kbit full 2 flow=dst # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы 1:E:13 - 15kbit full 3 flow=dst # Для почтового трафика оперативность обычно менее важна 1:E:14 - 10kbit full 4 flow=dst # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar) 1:E:16 - 25kbit full 2 flow=dst # Сюда упадет все, что мы не классифицировали явно 1:E:17 - 10kbit full 5 default,flow=dst # Класс VIP пользовательского трафика (VIP-ов у нас обычно не много), им приоритет выше 1:D:18 - 60kbit full 1 # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются) 1:18:19 - 20kbit full 1 # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы 1:18:1A - 10kbit full 3 # Для почтового трафика оперативность обычно менее важна 1:18:1B - 10kbit full 4 # Сюда поместим трафик VIP специального сервиса 1:18:1C - 20kbit full 2 # Класс наказанных пользователей 1:D:1D - 60kbit full 3 # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются) 1:1D:1E - 20kbit full 1 # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы 1:1D:1F - 10kbit full 3 # Для почтового трафика оперативность обычно менее важна 1:1D:20 - 10kbit full 4 # Сюда поместим трафик специального сервиса, пускай мучаются 1:1D:21 - 20kbit full 2
# # Shorewall -- /etc/shorewall/tcclasses.2 # # For information about entries in this file, type "man shorewall-tcclasses" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ############################################################################### #INTERFACE:CLASS MARK RATE: CEIL PRIORITY OPTIONS # DMAX:UMAX # Выделяем трафик, который попал на интерфейс локальной сети # В этом классе будет весь трафик из интернета 2:1:2 - 1mbit 1mbit 1 # В этом от локальной сети 2:1:3 - 999mbit 999mbit 2 # Выделим для ACK пакетов широкую полосу. Минимальная предполагает, что есть # только TCP трафик с максимальным MTU (меньше всего пакетов ACK), и для # плохово варианта, берем что у нас все пакеты в четверь от MTU (пакетов ACK больше), # еще выделим поток пакетов до одного получателя 2:2:4 - full*64/1500 full*64*4/1500 1 tcp-ack # Для SSH у нас два класса, первый, для коротких пакетов (в основном команды) 2:2:5 - 32kbit 128kbit 2 # Второй для длинных пакетов (для передачи файлов к примеру) 2:2:6 - 32kbit full*9/10 5 flow=nfct-src # Отдельная полоса для DNS и ICMP, 2:2:7 - 32kbit 128kbit 3 # позволит уменьшить задержки на запросах DNS 2:7:8 - 16kbit full 1 # и сделает PING интереснее 2:7:9 - 16kbit full 1 # Тут выделяем отдельную полосу для VoIP трафика 2:2:A - 180kbit 180kbit 1 # Это для чистого SIP (один канал u(a)law), используем еще и маркировку пакетов от nf_conntrack_sip 2:A:B 1 90kbit full 1 # Это для SIP в VPN тунеле (межофисный трафик) 2:A:C - 90kbit full 1 # Выделяем пользовательский трафик 2:2:D - 252kbit full 4 # Класс обычного пользовательского трафика 2:D:E - 100kbit full 2 # Тут живет VPN (который запускает пользователь) 2:D:F - 32kbit full 1 # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются) 2:E:10 - 25kbit full 1 flow=nfct-src # Для RDP 2:E:12 - 15kbit full 2 flow=nfct-src # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы 2:E:13 - 15kbit full 3 flow=nfct-src # Для почтового трафика оперативность обычно менее важна 2:E:14 - 10kbit full 4 flow=nfct-src # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar) 2:E:16 - 25kbit full 2 flow=nfct-src # Сюда упадет все, что мы не классифицировали явно 2:E:17 - 10kbit full 5 default,flow=nfct-src # Класс VIP пользовательского трафика (VIP-ов у нас обычно не много), им приоритет выше 2:D:18 - 60kbit full 1 # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются) 2:18:19 - 20kbit full 1 # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы 2:18:1A - 10kbit full 3 # Для почтового трафика оперативность обычно менее важна 2:18:1B - 10kbit full 4 # Сюда поместим трафик VIP специального сервиса 2:18:1C - 20kbit full 2 # Класс наказанных пользователей 2:D:1D - 60kbit full 3 # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются) 2:1D:1E - 20kbit full 1 # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы 2:1D:1F - 10kbit full 3 # Для почтового трафика оперативность обычно менее важна 2:1D:20 - 10kbit full 4 # Сюда поместим трафик специального сервиса, пускай мучаются 2:1D:21 - 20kbit full 2
# # Shorewall -- /etc/shorewall/tcclasses.3 # # For information about entries in this file, type "man shorewall-tcclasses" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ############################################################################### #INTERFACE:CLASS MARK RATE: CEIL PRIORITY OPTIONS # DMAX:UMAX # Выделим для ACK пакетов широкую полосу. Минимальная предполагает, что есть # только TCP трафик с максимальным MTU (меньше всего пакетов ACK), и для # плохово варианта, берем что у нас все пакеты в четверь от MTU (пакетов ACK больше), # еще выделим поток пакетов до одного получателя 3:1:4 - full*64/1500 full*64*4/1500 1 tcp-ack # Для SSH у нас два класса, первый, для коротких пакетов (в основном команды) 3:1:5 - 32kbit 128kbit 2 # Второй для длинных пакетов (для передачи файлов к примеру) 3:1:6 - 32kbit full*9/10 5 flow=dst # Отдельная полоса для DNS и ICMP, 3:1:7 - 32kbit 128kbit 3 # позволит уменьшить задержки на запросах DNS 3:7:8 - 16kbit full 1 # и сделает PING интереснее 3:7:9 - 16kbit full 1 # Тут выделяем отдельную полосу для VoIP трафика 3:1:A - 180kbit 180kbit 1 # Это для чистого SIP (один канал u(a)law), используем еще и маркировку пакетов от nf_conntrack_sip 3:A:B 1 90kbit full 1 # Это для SIP в VPN тунеле (межофисный трафик) 3:A:C - 90kbit full 1 # Выделяем пользовательский трафик 3:1:D - 252kbit full 4 # Класс обычного пользовательского трафика 3:D:E - 100kbit full 2 # Тут живет VPN (который запускает пользователь) 3:D:F - 32kbit full 1 # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются) 3:E:10 - 25kbit full 1 flow=dst # Для RDP 3:E:12 - 15kbit full 2 flow=dst # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы 3:E:13 - 15kbit full 3 flow=dst # Для почтового трафика оперативность обычно менее важна 3:E:14 - 10kbit full 4 flow=dst # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar) 3:E:16 - 25kbit full 2 flow=dst # Сюда упадет все, что мы не классифицировали явно 3:E:17 - 10kbit full 5 default,flow=dst
# # Shorewall -- /etc/shorewall/tcclasses.4 # # For information about entries in this file, type "man shorewall-tcclasses" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ############################################################################### #INTERFACE:CLASS MARK RATE: CEIL PRIORITY OPTIONS # DMAX:UMAX # Выделим для ACK пакетов широкую полосу. Минимальная предполагает, что есть # только TCP трафик с максимальным MTU (меньше всего пакетов ACK), и для # плохово варианта, берем что у нас все пакеты в четверь от MTU (пакетов ACK больше), # еще выделим поток пакетов до одного получателя 4:1:4 - full*64/1500 full*64*4/1500 1 tcp-ack # Для SSH 4:1:6 - 32kbit full*9/10 5 flow=nfct-src # Отдельная полоса для DNS и ICMP, 4:1:7 - 32kbit 128kbit 3 # позволит уменьшить задержки на запросах DNS 4:7:8 - 16kbit full 1 # и сделает PING интереснее 4:7:9 - 16kbit full 1 # Тут выделяем отдельную полосу для VoIP трафика 4:1:A - 180kbit 180kbit 1 # Это для чистого SIP (один канал u(a)law), используем еще и маркировку пакетов от nf_conntrack_sip 4:A:B 1 90kbit full 1 # Это для SIP в VPN тунеле (межофисный трафик) 4:A:C - 90kbit full 1 # Выделяем пользовательский трафик 4:1:D - 252kbit full 4 # Класс обычного пользовательского трафика, другого здесь нет. 4:D:E - 100kbit full 2 # Тут живет VPN (который запускает пользователь) 4:D:F - 32kbit full 1 # Для RDP 4:E:12 - 15kbit full 2 flow=nfct-src # Для HTTP(S) 4:E:13 - 25kbit full 3 flow=nfct-src # Для почтового трафика оперативность обычно менее важна 4:E:14 - 15kbit full 4 flow=nfct-src # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar) 4:E:16 - 25kbit full 2 flow=nfct-src # Сюда упадет все, что мы не классифицировали явно 4:E:17 - 10kbit full 5 default,flow=nfct-src
# # Shorewall -- /etc/shorewall/tcclasses.5 # # For information about entries in this file, type "man shorewall-tcclasses" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ############################################################################### #INTERFACE:CLASS MARK RATE: CEIL PRIORITY OPTIONS # DMAX:UMAX # Выделим для ACK пакетов широкую полосу. Минимальная предполагает, что есть # только TCP трафик с максимальным MTU (меньше всего пакетов ACK), и для # плохово варианта, берем что у нас все пакеты в четверь от MTU (пакетов ACK больше), # еще выделим поток пакетов до одного получателя 5:1:4 - full*64/1500 full*64*4/1500 1 tcp-ack # Для SSH у нас два класса, первый, для коротких пакетов (в основном команды) 5:1:5 - 32kbit 128kbit 2 # Второй для длинных пакетов (для передачи файлов к примеру) 5:1:6 - 32kbit full*9/10 5 flow=dst # Отдельная полоса для DNS и ICMP, 5:1:7 - 32kbit 128kbit 3 # позволит уменьшить задержки на запросах DNS 5:7:8 - 16kbit full 1 # и сделает PING интереснее 5:7:9 - 16kbit full 1 # Тут выделяем отдельную полосу для VoIP трафика 5:1:A - 180kbit 180kbit 1 # Это для чистого SIP (один канал u(a)law), используем еще и маркировку пакетов от nf_conntrack_sip 5:A:B 1 90kbit full 1 # Это для SIP в VPN тунеле (межофисный трафик) 5:A:C - 90kbit full 1 # Выделяем пользовательский трафик 5:1:D - 252kbit full 4 # Класс обычного пользовательского трафика 5:D:E - 100kbit full 2 # Тут живет VPN (который запускает пользователь) 5:D:F - 32kbit full 1 # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются) 5:E:10 - 25kbit full 1 flow=dst # Для RDP 5:E:12 - 15kbit full 2 flow=dst # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы 5:E:13 - 15kbit full 3 flow=dst # Для почтового трафика оперативность обычно менее важна 5:E:14 - 10kbit full 4 flow=dst # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar) 5:E:16 - 25kbit full 2 flow=dst # Сюда упадет все, что мы не классифицировали явно 5:E:17 - 10kbit full 5 default,flow=dst
# # Shorewall -- /etc/shorewall/tcclasses.6 # # For information about entries in this file, type "man shorewall-tcclasses" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ############################################################################### #INTERFACE:CLASS MARK RATE: CEIL PRIORITY OPTIONS # DMAX:UMAX # Выделим для ACK пакетов широкую полосу. Минимальная предполагает, что есть # только TCP трафик с максимальным MTU (меньше всего пакетов ACK), и для # плохово варианта, берем что у нас все пакеты в четверь от MTU (пакетов ACK больше), # еще выделим поток пакетов до одного получателя 6:1:4 - full*64/1500 full*64*4/1500 1 tcp-ack # Для SSH 6:1:6 - 32kbit full*9/10 5 flow=nfct-src # Отдельная полоса для DNS и ICMP, 6:1:7 - 32kbit 128kbit 3 # позволит уменьшить задержки на запросах DNS 6:7:8 - 16kbit full 1 # и сделает PING интереснее 6:7:9 - 16kbit full 1 # Тут выделяем отдельную полосу для VoIP трафика 6:1:A - 180kbit 180kbit 1 # Это для чистого SIP (один канал u(a)law), используем еще и маркировку пакетов от nf_conntrack_sip 6:A:B 1 90kbit full 1 # Это для SIP в VPN тунеле (межофисный трафик) 6:A:C - 90kbit full 1 # Выделяем пользовательский трафик 6:1:D - 252kbit full 4 # Класс обычного пользовательского трафика, другого здесь нет. 6:D:E - 100kbit full 2 # Тут живет VPN (который запускает пользователь) 6:D:F - 32kbit full 1 # Для RDP 6:E:12 - 15kbit full 2 flow=nfct-src # Для HTTP(S) 6:E:13 - 25kbit full 3 flow=nfct-src # Для почтового трафика оперативность обычно менее важна 6:E:14 - 15kbit full 4 flow=nfct-src # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar) 6:E:16 - 25kbit full 2 flow=nfct-src # Сюда упадет все, что мы не классифицировали явно 6:E:17 - 10kbit full 5 default,flow=nfct-src
Если глянуть на описания, можно заметить, что одинакового очень много. Небольшая разница в использовании flow (группировки трафика в потоки). Сами потоки позволяют бороться с таким явлением: один юзер устанавливает кучу соединений с разными адресами, и без потоков, он в рамках класса отжимает трафик у всех остальных. Вся тема в том, что без потоков, дележка идет по непосредственным соединениям, у кого их больше, тот в целом больше на себя одеяло и оттащил.
Еще небольшая особенность, внешний интерфейс (как физический, так и IFB), ничего не знает о структуре внутренней сети (если используется NAT), поэтому часть детальной классификации отсутствует.
Теперь будем трафик классифицировать (для классов с ACK и MARK, описывать мы ничего не будем, соответствующий трафик сам туда упадет) и фильтровать.
Запасемся подсказками:
# # Shorewall -- /etc/shorewall/mangle # # For information about entries in this file, type "man shorewall-mangle" # # See http://shorewall.net/traffic_shaping.htm for additional information. # For usage in selecting among multiple ISPs, see # http://shorewall.net/MultiISP.html # # See http://shorewall.net/PacketMarking.html for a detailed description of # the Netfilter/Shorewall packet marking mechanism. # #################################################################################################################################################### #ACTION SOURCE DEST PROTO DEST SOURCE USER TEST LENGTH TOS CONNBYTES HELPER PROBABILITY DSCP # PORT(S) PORT(S) # Важно, последнее совпадение и будет означать конечную классификацию! # Восстановим метку пакета из метки соединения (если она сейчас 0) RESTORE 0.0.0.0/0 0.0.0.0/0 all - - - 0 # Прекращаем дальнейшую обработку, если метка уже стоит CONTINUE 0.0.0.0/0 0.0.0.0/0 all - - - !0 # Установим метку для всех SIP пакетов, включая RTP MARK(1) 0.0.0.0/0 0.0.0.0/0 all - - - - - - - sip # Если SIP трафик идет до нашей внутренней сети (к примеру в другой филиал), логическим И соеденить метку пакета и нашего тунеля MARK(|0x40000) 172.16.0.0/12 172.16.0.0/12 all - - - - - - - sip MARK(|0x40000) 172.16.0.0/12 172.16.0.0/12 udp 4569 SAVE 0.0.0.0/0 0.0.0.0/0 all - - - !0 INCLUDE mangle.1 INCLUDE mangle.3 INCLUDE mangle.5
# # Shorewall -- /etc/shorewall/mangle.1 # # For information about entries in this file, type "man shorewall-mangle" # # See http://shorewall.net/traffic_shaping.htm for additional information. # For usage in selecting among multiple ISPs, see # http://shorewall.net/MultiISP.html # # See http://shorewall.net/PacketMarking.html for a detailed description of # the Netfilter/Shorewall packet marking mechanism. # #################################################################################################################################################### #ACTION SOURCE DEST PROTO DEST SOURCE USER TEST LENGTH TOS CONNBYTES HELPER PROBABILITY DSCP # PORT(S) PORT(S) # Важно, последнее совпадение и будет означать конечную классификацию! # Класс обычного пользовательского трафика # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются), тут все, что от 0 до 256kb CLASSIFY(1:10) - +ip_normal tcp - 80,443 - - - - 0:262144 # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы, # тут все, что от 256kb CLASSIFY(1:13) - +ip_normal tcp - 80,443 - - - - 262145: # Для почтового трафика оперативность обычно менее важна CLASSIFY(1:14) - +ip_normal tcp - 25,110,143,465,587,993,995,2525,4190 # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar, с порта 32765) CLASSIFY(1:16) - +ip_normal_spec tcp - 32765 # Класс VIP пользовательского трафика (VIP-ов у нас обычно не много), им приоритет выше # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются) CLASSIFY(1:19) - +ip_vip tcp - 80,443 - - - - 0:262144 # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы CLASSIFY(1:1A) - +ip_vip tcp - 80,443 - - - - 262145: # Для почтового трафика оперативность обычно менее важна CLASSIFY(1:1B) - +ip_vip tcp - 25,110,143,465,587,993,995,2525,4190 # Сюда поместим трафик VIP специального сервиса CLASSIFY(1:1C) - +ip_vip_spec tcp - 32765 # Класс наказанных пользователей # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются) CLASSIFY(1:1E) - +ip_slow tcp - 80,443 - - - - 0:262144 # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы CLASSIFY(1:1F) - +ip_slow tcp - 80,443 - - - - 262145: # Для почтового трафика оперативность обычно менее важна CLASSIFY(1:20) - +ip_slow tcp - 25,110,143,465,587,993,995,2525,4190 # Сюда поместим трафик специального сервиса, пускай мучаются CLASSIFY(1:21) - +ip_slow_spec tcp - 32765 # Тут живет VPN (который запускает пользователь) CLASSIFY(1:F) - - udp - 1194 # Это для IAX2 CLASSIFY(1:B) - - udp - 4569 # Это для SIP в VPN тунеле (межофисный трафик) CLASSIFY(1:C) - - udp - 40032 # RDP CLASSIFY(1:12) - - tcp - 3389 CLASSIFY(1:12) - - udp - 3389 # позволит уменьшить задержки на запросах DNS CLASSIFY(1:8) - - udp - 53 CLASSIFY(1:8) - - tcp - 53 # и сделает PING интереснее CLASSIFY(1:9) - - icmp echo-request,echo-reply # Для SSH у нас два класса, первый, для коротких пакетов (в основном команды) CLASSIFY(1:5) - - tcp - 22 - - 0:512 # Второй для длинных пакетов (для передачи файлов к примеру) CLASSIFY(1:6) - - tcp - 22 - - 513: CLASSIFY(1:3) $NET_GRN $NET_GRN
# # Shorewall -- /etc/shorewall/mangle.3 # # For information about entries in this file, type "man shorewall-mangle" # # See http://shorewall.net/traffic_shaping.htm for additional information. # For usage in selecting among multiple ISPs, see # http://shorewall.net/MultiISP.html # # See http://shorewall.net/PacketMarking.html for a detailed description of # the Netfilter/Shorewall packet marking mechanism. # #################################################################################################################################################### #ACTION SOURCE DEST PROTO DEST SOURCE USER TEST LENGTH TOS CONNBYTES HELPER PROBABILITY DSCP # PORT(S) PORT(S) # Важно, последнее совпадение и будет означать конечную классификацию! # Класс обычного пользовательского трафика # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются), тут все, что от 0 до 256kb CLASSIFY(3:10) - - tcp 80,443 - - - - - 0:262144 # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы, # тут все, что от 256kb CLASSIFY(3:13) - - tcp 80,443 - - - - - 262145: # Для почтового трафика оперативность обычно менее важна CLASSIFY(3:14) - - tcp 25,110,143,465,587,993,995,2525,4190 # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar, с порта 32765) CLASSIFY(3:16) - - tcp 32765 # Тут живет VPN (который запускает пользователь) CLASSIFY(3:F) - - udp 1194 # Это для IAX2 CLASSIFY(3:B) - - udp 4569 # Это для SIP в VPN тунеле (межофисный трафик) CLASSIFY(3:C) - - udp 40032 # RDP CLASSIFY(3:12) - - tcp 3389 CLASSIFY(3:12) - - udp 3389 # позволит уменьшить задержки на запросах DNS CLASSIFY(3:8) - - udp 53 CLASSIFY(3:8) - - tcp 53 # и сделает PING интереснее CLASSIFY(3:9) - - icmp echo-request,echo-reply # Для SSH у нас два класса, первый, для коротких пакетов (в основном команды) CLASSIFY(3:5) - - tcp 22 - - - 0:512 # Второй для длинных пакетов (для передачи файлов к примеру) CLASSIFY(3:6) - - tcp 22 - - - 513:
# # Shorewall -- /etc/shorewall/mangle.5 # # For information about entries in this file, type "man shorewall-mangle" # # See http://shorewall.net/traffic_shaping.htm for additional information. # For usage in selecting among multiple ISPs, see # http://shorewall.net/MultiISP.html # # See http://shorewall.net/PacketMarking.html for a detailed description of # the Netfilter/Shorewall packet marking mechanism. # #################################################################################################################################################### #ACTION SOURCE DEST PROTO DEST SOURCE USER TEST LENGTH TOS CONNBYTES HELPER PROBABILITY DSCP # PORT(S) PORT(S) # Важно, последнее совпадение и будет означать конечную классификацию! # Класс обычного пользовательского трафика # Для HTTP(S) с короткими пакетами, выделим приоритет больше (будет казаться, # что странички быстрее открываются), тут все, что от 0 до 256kb CLASSIFY(5:10) - - tcp 80,443 - - - - - 0:262144 # Для HTTP(S) с длинными пакетами, дольше будут грузится картики и большие страницы, # тут все, что от 256kb CLASSIFY(5:13) - - tcp 80,443 - - - - - 262145: # Для почтового трафика оперативность обычно менее важна CLASSIFY(5:14) - - tcp 25,110,143,465,587,993,995,2525,4190 # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar, с порта 32765) CLASSIFY(5:16) - - tcp 32765 # Тут живет VPN (который запускает пользователь) CLASSIFY(5:F) - - udp 1194 # Это для IAX2 CLASSIFY(5:B) - - udp 4569 # Это для SIP в VPN тунеле (межофисный трафик) CLASSIFY(5:C) - - udp 40032 # RDP CLASSIFY(5:12) - - tcp 3389 CLASSIFY(5:12) - - udp 3389 # позволит уменьшить задержки на запросах DNS CLASSIFY(5:8) - - udp 53 CLASSIFY(5:8) - - tcp 53 # и сделает PING интереснее CLASSIFY(5:9) - - icmp echo-request,echo-reply # Для SSH у нас два класса, первый, для коротких пакетов (в основном команды) CLASSIFY(5:5) - - tcp 22 - - - 0:512 # Второй для длинных пакетов (для передачи файлов к примеру) CLASSIFY(5:6) - - tcp 22 - - - 513:
# # Shorewall -- /etc/shorewall/tcfilters # # For information about entries in this file, type "man shorewall-tcfilters" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ######################################################################################################## #INTERFACE: SOURCE DEST PROTO DEST SOURCE TOS LENGTH PRIORITY #CLASS PORT(S) PORT(S) # Важно, первое совпадение и будет означать конечную классификацию! INCLUDE tcfilters.2 INCLUDE tcfilters.4 INCLUDE tcfilters.6
# # Shorewall -- /etc/shorewall/tcfilters.2 # # For information about entries in this file, type "man shorewall-tcfilters" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ######################################################################################################## #INTERFACE: SOURCE DEST PROTO DEST SOURCE TOS LENGTH PRIORITY #CLASS PORT(S) PORT(S) # Важно, первое совпадение и будет означать конечную классификацию! 2:3 $NET_GRN $NET_GRN # Для SSH 2:6 - - tcp 22 # позволит уменьшить задержки на запросах DNS 2:8 - - udp 53 2:8 - - tcp 53 # и сделает PING интереснее 2:9 - - icmp echo-request,echo-reply # RDP 2:12 - - tcp 3389 2:12 - - udp 3389 # Это для IAX2 2:B - - udp 4569 # Это для SIP в VPN тунеле (межофисный трафик) 2:C - - udp 40032 # Тут живет VPN (который запускает пользователь) 2:F - - udp 1194 # Класс наказанных пользователей # Для HTTP(S) 2:1F $IP_SLOW 0.0.0.0/0 tcp 80,443 # Для почтового трафика оперативность обычно менее важна 2:20 $IP_SLOW - tcp 25,110,143,465,587,993,995,2525,4190 # Сюда поместим трафик специального сервиса, пускай мучаются 2:21 $IP_SLOW_SPEC - tcp 32765 # Класс VIP пользовательского трафика (VIP-ов у нас обычно не много), им приоритет выше # Для HTTP(S) 2:1A $IP_VIP - tcp 80,443 # Для почтового трафика оперативность обычно менее важна 2:1B $IP_VIP - tcp 25,110,143,465,587,993,995,2525,4190 # Сюда поместим трафик VIP специального сервиса 2:1C $IP_VIP_SPEC - tcp 32765 # Класс обычного пользовательского трафика # Для HTTP(S) 2:13 $IP_NORMAL - tcp 80,443 # Для почтового трафика оперативность обычно менее важна 2:14 $IP_NORMAL - tcp 25,110,143,465,587,993,995,2525,4190 # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar, с порта 32765) 2:16 $IP_NORMAL_SPEC - tcp 32765
# # Shorewall -- /etc/shorewall/tcfilters.4 # # For information about entries in this file, type "man shorewall-tcfilters" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ######################################################################################################## #INTERFACE: SOURCE DEST PROTO DEST SOURCE TOS LENGTH PRIORITY #CLASS PORT(S) PORT(S) # Важно, первое совпадение и будет означать конечную классификацию! # Так как в tcfilters работа с длинной пакета упрощенная, то и классификацию по длинне мы не сделаем 4:6 - - tcp - 22 # позволит уменьшить задержки на запросах DNS 4:8 - - udp - 53 4:8 - - tcp - 53 # и сделает PING интереснее 4:9 - - icmp echo-request,echo-reply # RDP 4:12 - - tcp - 3389 4:12 - - udp - 3389 # Это для IAX2 4:B - - udp - 4569 # Это для SIP в VPN тунеле (межофисный трафик) 4:C - - udp - 40032 # Тут живет VPN (который запускает пользователь) 4:F - - udp - 1194 # Класс обычного пользовательского трафика, причем без суб-классов, так как это внешний интерфейс, # о внутренней сети он ничего не знает. Для HTTP(S) 4:13 - - tcp - 80,443 # Для почтового трафика оперативность обычно менее важна 4:14 - - tcp - 25,110,143,465,587,993,995,2525,4190 # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar, с порта 32765) 4:16 - - tcp - 32765
# # Shorewall -- /etc/shorewall/tcfilters.6 # # For information about entries in this file, type "man shorewall-tcfilters" # # See http://shorewall.net/traffic_shaping.htm for additional information. # ######################################################################################################## #INTERFACE: SOURCE DEST PROTO DEST SOURCE TOS LENGTH PRIORITY #CLASS PORT(S) PORT(S) # Важно, первое совпадение и будет означать конечную классификацию! # Так как в tcfilters работа с длинной пакета упрощенная, то и классификацию по длинне мы не сделаем 6:6 - - tcp - 22 # позволит уменьшить задержки на запросах DNS 6:8 - - udp - 53 6:8 - - tcp - 53 # и сделает PING интереснее 6:9 - - icmp echo-request,echo-reply # RDP 6:12 - - tcp - 3389 6:12 - - udp - 3389 # Это для IAX2 6:B - - udp - 4569 # Это для SIP в VPN тунеле (межофисный трафик) 6:C - - udp - 40032 # Тут живет VPN (который запускает пользователь) 6:F - - udp - 1194 # Класс обычного пользовательского трафика, причем без суб-классов, так как это внешний интерфейс, # о внутренней сети он ничего не знает. Для HTTP(S) 6:13 - - tcp - 80,443 # Для почтового трафика оперативность обычно менее важна 6:14 - - tcp - 25,110,143,465,587,993,995,2525,4190 # Сюда поместим трафик специального сервиса (к примеру, трансляцию Webinar, с порта 32765) 6:16 - - tcp - 32765
После перезапуска у нас заработает шейпинг!
Странные костыли
Собственно с применением OSPF многое стало лучше, но осталось одно не маленькое Но! Связь по VoIP между филиалами. С VPN все хорохо, и шифрует, и множественные пути дает (спасибо OSPF), но как шейпить VoIP, да так, что-бы голоса не заикались, ведь о данных, по понятным причинам, мы ничего не знаем, классифицировать шифрованный трафик не можем (но вот ребята из Cisco сделали реализацию)? Если VoIP идет у нас через внешнюю сеть, то проблемы нет (кроме не полного шифрования у IAX2 и отсутствия удобной маршрутизации альтернативных каналов). Поэтому направим VoIP в отдельный туннель! И тут привет от OSPF, маршрут строится либо через оба туннеля (если у них одинаковый вес), или через тот, где вес ниже (это тот, который у нас без телефонии).
Тут нам на помощь придет вот такой костыль:
#!/bin/bash METRIC_BOOST=$1 IP_INTERVAL=$2 IPROUTE='/usr/sbin/ip' function search_and_del() { # $1 - TABLE # $2 - DST # $3 - VIA # $4 - METRIC TABLE=$1 declare -a DST=("${!2}") declare -a VIA=("${!3}") declare -a METRIC=("${!4}") # Ищем маршруты, которые отсутсвуют в маршрутизации OSPF IFS=$'\n' for line in $(${IPROUTE} route show table $TABLE);do IFS=$' \t' read -r -a line_ <<< "$line" CONT=0 for i in "${!DST[@]}"; do if [ "${line_[0]}" = "${DST[$i]}" ]; then if [ "${line_[6]}" -eq "${METRIC[$i]}" ] && [ "${line_[2]}" = "${VIA[$i]}" ];then CONT=1 continue fi fi done [ "$CONT" -eq "0" ] && eval "${IPROUTE} route del $line table $TABLE" done } DST_='' METRIC_='' DEV_='' DST='' VIA_PRIM='' VIA_SEC='' METRIC_PRIM='' METRCI_SEC='' TABLE_PRIM='' TABLE_SEC='' COUNT=0 # Найдем таблицы маршрутизации while IFS=$' \t' read -r -a line_; do if [[ $(( $(echo ${line_[4]} | sed -e 's/[a-zA-Z]*//') % 2)) == 0 ]];then TABLE_PRIM=${line_[1]} else TABLE_SEC=${line_[1]} fi done < <(grep tap /etc/shorewall/providers | grep loose) # Если номеров таблиц нет, то пропускаем кофигурацию полностью [ -z "$TABLE_PRIM" ] || [ -z "$TABLE_SEC" ] && exit 0 # Получаем маршруты от OSPF while IFS=$' \t' read -r -a line_; do # Ищем записи маршрутов в полном формате (по позиции слова via) if [ "${line_[3]}" == "via" ]; then # Запомним парметры для слдующих строк в сокращенном формате DST_=${line_[1]} METRIC_=${line_[2]} # Займемся только активными маршрутами if [ "${line_[$(( ${#line_[@]} -2 ))]}" != "inactive," ]; then DEV_=$(echo ${line_[$(( ${#line_[@]} -2 ))]} | sed -e "s/,//") if [[ $(( $(echo $DEV_ | sed -e 's/[a-zA-Z]*//') % 2)) == 0 ]];then DST[$COUNT]=$(echo ${line_[1]} | sed -e "s/\/32//") VIA_PRIM[$COUNT]=$(echo ${line_[$(( ${#line_[@]} -3 ))]} | sed -e "s/,//") METRIC_PRIM[$COUNT]=$(echo ${line_[2]} | sed -e "s/\[[0-p]*\///" | sed -e "s/\]//") # Важно использовать статические адреса для OpenVPN клиентов,и важно, чтобы они шли с фиксированным # шагом относительно основного соединения, в моем случае это 128 (так как сеть /25) IFS=$'.' read -r -a IP <<< ${VIA_PRIM[$COUNT]} VIA_SEC[$COUNT]="${IP[0]}.${IP[1]}.${IP[2]}.$(( ${IP[3]} + $IP_INTERVAL ))" METRIC_SEC[$COUNT]=$(( ${METRIC_PRIM[$COUNT]} + $METRIC_BOOST )) COUNT=$(($COUNT + 1 )) fi fi else # Аналогичная обработка для сокращенного формата, используем данные от предыдущего шага if [ "${line_[$(( ${#line_[@]} -2 ))]}" != "inactive," ]; then DEV_=$(echo ${line_[$(( ${#line_[@]} -2 ))]} | sed -e "s/,//") if [[ $(( $(echo $DEV_ | sed -e 's/[a-zA-Z]*//') % 2)) == 0 ]];then DST[$COUNT]=$(echo $DST_ | sed -e "s/\/32//") if [ "${line_[0]}" == "via" ]; then VIA_PRIM[$COUNT]=$(echo ${line_[1]} | sed -e "s/,//") else VIA_PRIM[$COUNT]=$(echo ${line_[2]} | sed -e "s/,//") fi METRIC_PRIM[$COUNT]=$(echo $METRIC_ | sed -e "s/\[[0-p]*\///" | sed -e "s/\]//") IFS=$'.' read -r -a IP <<< ${VIA_PRIM[$COUNT]} VIA_SEC[$COUNT]="${IP[0]}.${IP[1]}.${IP[2]}.$(( ${IP[3]} + $IP_INTERVAL ))" METRIC_SEC[$COUNT]=$(( ${METRIC_PRIM[$COUNT]} + $METRIC_BOOST )) COUNT=$(($COUNT + 1 )) fi fi fi done < <(/usr/bin/vtysh -c 'show ip route ospf' | grep via | grep tap | grep -v -e 'directly connected') # Найдем несуществующие маршруты для основного и дополнительного тунеля search_and_del $TABLE_PRIM DST[@] VIA_PRIM[@] METRIC_PRIM[@] search_and_del $TABLE_SEC DST[@] VIA_SEC[@] METRIC_SEC[@] # Прибьем шлюз по умолчанию для обоих тунелей ${IPROUTE} route del default table $TABLE_PRIM >/dev/null 2>&1 ${IPROUTE} route del default table $TABLE_SEC >/dev/null 2>&1 # Пройдемся по массиву маршрутов, и добавим их в таблицы основного и дополнительного тунеля for i in "${!DST[@]}"; do [ -z ${DST[$i]} ] || [ -z ${VIA_PRIM[$i]} ] || [ -z ${METRIC_PRIM[$i]} ] && continue ${IPROUTE} route replace ${DST[$i]} via ${VIA_PRIM[$i]} table $TABLE_PRIM metric ${METRIC_PRIM[$i]} >/dev/null 2>&1 # Так как OSPF строит маршруты и до конечной точки тунеля, то в маршрутах для вторичного тунеля появляется маршрут "сам к себе" if [ "${DST[$i]}" = "${VIA_SEC[$i]}" ]; then # Поэтому мы "развернем" маршруты ${IPROUTE} route replace ${VIA_PRIM[$i]} via ${DST[$i]} table $TABLE_SEC metric ${METRIC_SEC[$i]} >/dev/null 2>&1 else ${IPROUTE} route replace ${DST[$i]} via ${VIA_SEC[$i]} table $TABLE_SEC metric ${METRIC_SEC[$i]} >/dev/null 2>&1 fi # Удалим маршруты из таблицы main ${IPROUTE} route del ${DST[$i]} via ${VIA_PRIM[$i]} metric ${METRIC_PRIM[$i]} >/dev/null 2>&1 done
Этот скрипт копирует маршруты, анонсированные OSPF в отдельную таблицу маршрутизации, и создает дополнительные маршруты, через второй туннель, до тех-же сетей, что нам анонсировал OSPF. А Shorewall создает для нас правила маршрутизации и дополнительные таблицы. А что-бы трафик телефонии бежал в этот туннель, мы его помечаем специальной меткой.
В policy routing можно увидеть такое:
Routing Rules 0: from all lookup local 999: from all lookup main 10000: from all fwmark 0x10000/0xff0000 lookup pr1 10001: from all fwmark 0x20000/0xff0000 lookup pr2 10002: from all fwmark 0x40000/0xff0000 lookup tap1 10003: from all fwmark 0x30000/0xff0000 lookup tap0 19001: from all lookup tap0 20000: from 192.168.10.37 lookup pr1 20000: from 192.168.10.36 lookup pr2 32765: from all lookup balance 32766: from all lookup main 32767: from all lookup default
Трафик отмеченный меткой побежит через соответствующую таблицу, а если маршрута там нет (бывает и такое), пробежит и через туннель для обычных данных (такой запасной вариант).
Осталось только добавить этот скрипт в cron:
# Example of job definition:
# .—————- minute (0 — 59)
# | .————- hour (0 — 23)
# | | .———- day of month (1 — 31)
# | | | .——- month (1 — 12) OR jan,feb,mar,apr…
# | | | | .—- day of week (0 — 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/1 * * * * root /usr/local/bin/ospf_alt_route.sh 1 128
P.S.
Обновлены:
- Скрипт для замены маршрутов
- Задание cron
- rtrules
- Добавлен файл started
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
ссылка на оригинал статьи https://habrahabr.ru/post/277983/
Добавить комментарий