четверг, 29 мая 2008 г.

Разделяем поток на два канала для squid

Мы все хотим экономить. В том числе и на Интернет-трафике. Типичная ситуация: организация из 30+ человек и 1 скоростной (и, соответственно, помегабайтный) канал в Интернет, отсутствие безлимитного подключения (потому что скорость его не позволит нормально работать никому). Итог: большие расходы на интернет-трафик.
Конечно, самый простой выход - считать трафик и выделять каждому пользователю по потребности. Иногда от этого страдает больше всего системный администратор. А он тут не при чем.
Итак, для решения проблемы решено подключить второй безлимитный канал на небольшой скорости. И отправить туда весь несущественный, но составляющий большую часть, трафик: картинки, видео, флешки и т.д.

Нам необходимо: сервер я двумя интерфейсами (у меня для лабы eth0 и tun1), работающий squid, фаервол iptables и пакет route2.
Пусть на eth0 (скоростной канал) IP 192.168.0.2/255.255.255.0 шлюз 192.168.0.1
tun1 (медленный) 172.16.1.2/255.255.255.252 шлюз 172.16.1.1 тип P-t-P

eth0 был настроен и работает, добавляем настройки для tun1
Прежде всего необходимо создать второй равнозначный маршрут по уполчанию. Для этого нужно создать вторую таблицу маршрутизации (потом нужный трафик мы перекинем в неё).
ip route flush table 2
ip route show table main \
>| grep -Ev ^default \
>| while read ROUTE ; \
> do ip route add table 2 $ROUTE; \
> done
ip route add default via 172.16.1.2 table 2

(или dev tun1, так как канал P-t-P)

Теперь перехватываем исходящие с IP 172.16.1.2 пакеты и:
- средствами iptables маркируем его:
iptables -t mangle -A OUTPUT -s 172.16.1.0/30 -j MARK --set-mark 2
- средствами route2 отправляем в таблицу 2
ip rule add fwmark 2 table 2
С помощью tcpdump можно посмотреть результат.

Средствами squid можно только назначить исходящий адрес, поэтому такие ухищрения. Вот кусок /etc/squid/squid.conf:

acl SLOW_DOWN urlpath_regex -i \.exe$
acl SLOW_DOWN urlpath_regex -i \.avi$
acl SLOW_DOWN urlpath_regex -i \.mp3$
acl SLOW_DOWN urlpath_regex -i \.jpg$
acl SLOW_DOWN urlpath_regex -i \.gif$
acl SLOW_DOWN urlpath_regex -i \.swf$
acl SLOW_DOWN urlpath_regex -i \.png$

tcp_outgoing_address 172.16.1.1 SLOW_DOWN
tcp_outgoing_address 192.168.0.2


Способ кривой, так как дифференцирует только на основании строки запроса. То есть txt или doc файл размером 700 мегабайт проскочит в быстрый канал. address.com/file - туда же вне зависимости от типа. Но address.com/fille.without.swf - в медленный.

четверг, 15 мая 2008 г.

Поднимаем tap0 и br0 при загрузке

Собственно, можно и скриптик сделать чтобы поднять tap0 и общединить его в мост с eth0. Однако я планирую частенько использовать gns3 в целях обучения, причём нужны связи с реальной сетью..


Debian-образные могут почитать нечто вроде руководства в файлике /usr/share/doc/bridge-utils/README.Debian.gz. Однако суть сводится к редактированию /etc/network/interfaces ручками
У меня получилось примерно так:

~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

iface eth0 inet manual
auto eth0

auto tap0
iface tap0 inet manual
up ifconfig $IFACE up

auto br0
iface br0 inet static
bridge_ports eth0 tap0
address 192.168.1.12
netmask 255.255.255.0
gateway 192.168.1.1


Ключевая фраза выделена. Без неё система будет тупо ругаться, что такого устройства не обнаружено.

вторник, 13 мая 2008 г.

Проблема с соединением dynamips (в gns3) с реальной сетью

Даже разработчики dynagen согласились, что из-за отличий в реализациях winpcap и libpcap, на некоторых сетевых картах происходят косяки: из сети виртуальную сеть видно, но с того же компа - нет. Причём только под линуксом. tcpdump показывает arp трафик, но сетевая на него не отвечает.
На тех же версиях dynamips и gns3 под виндой - всё нормально.
Такая проблема меня постигла на ноуте HP Compaq nc6120.

~# lspci grep net
02:0e.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5705M_2 Gigabit Ethernet (rev 03)


Пробовал Ubuntu 7.10, 8.04, openSUSE 10.3, Debian 4.0.
Решение нашлось (как и предполагалось) на форуме 7200emu.hacki.at. Предлагается создать виртуальный интерфейс tap0, объединить его с eth0 в мост и с этой конструкцией работать. Прежде всего
~# apt-get install bridge-utils
...
Распаковывается пакет bridge-utils (из файла .../bridge-utils_1.2-1build1_i386.deb)...
Настраивается пакет bridge-utils (1.2-1build1) ...

(или через Symantic, кому как больше нравится).

Необходимо не забыть убрать IP на eth0.
Далее запускаем GNS3 от рута (хоть и образовательная программа, однако для работы с реальной сетью без администраторских полномочий не справиться). Делаем простейшую лабу из облака и маршрутизатора. Заходим в настройки облака. Выбираем вкладку NIO TAP. В поле вбиваем tap0. Кнопаем "Добавить" и "ОК". Соединяем фастэзернетом рутер с облаком, запускаем лабу.

Дальше поднимаем интерфейс и создаём мост:
~# ifconfig tap0 up #(сам он почему-то не поднимается)
~# ifconfig tap0
tap0 Link encap:Ethernet HWaddr 00:FF:BF:D6:C0:2B
inet6 addr: fe80::2ff:bfff:fed6:c02b/64 Диапазон:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

~# brctl addbr br0
~# ifconfig br0 172.16.1.13 netmask 255.255.0.0
~# brctl addif br0 tap0
~# brctl addif br0 eth0
~# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0014c2dc56b9 no tap0
eth0

Настраиваем роутер и вуаля!

Перегрузились, а моста уже нет? Читаем тут...

понедельник, 12 мая 2008 г.

GNS3 - графический симулятор сети cisco

Про dynamips и dynagen поговорим в следующий раз. Отличные программы для обучения. Стоило ожидать, что рано или поздно для будет создан GUI для эмулятора cisco. Таковым стал GNS3. Радует, что для развёртывания какой-либо лабы не нужно знать как устроен и работает dynamips.

Есть версии и под win, и под linux. Однако под линуксом работает чутка пошустрее.
Лабы можно формировать как внутри системы, так и выводить связи наружу. Таким образом, даже не обязательно иметь железки чтобы научиться чему-либо, сделать и показать хоть и виртуальную, но работающую сеть cisco.
Работа с GNS3 не сложна. После установки и первого запуска не нужно лезть за документацией и глубоко в неё вчитываться. Интерфейс интуитивно понятен. Интерфейс поддерживает русский язык, так что немцам и французам (или у кого любой другой отличный от английского второй язык) особенно будет приятно. Сложность понимания первого запуска только лишь в том, что для запуска тестовой виртуальной сети всё-таки необходимо кое-что дополнительное: образы ПО IOS -ибо программный комплекс эмулирует аппаратную часть, используя реальный образ ПО. Однако GNS3 уже содержит в себе dynamips и все необходимые интерфейсы для управления им. Так что дополнительно найти придётся только пару образов IOS.
На сегодняшний день эмулируются следующие платформы: 1700, 2600, 2691, 3600, 3700, 7200. Что для ознакомления обычно достаточно. Поддержка платформ 2800/3800 пока отсутствует, поэтому сэмулировать VoIP-сеть не получится. Будем надеяться, что проект dynamips будет продолжать развиваться, потому что эти ограничения GNS3 - ограничения самого ядра эмуляции - динамипса.

воскресенье, 11 мая 2008 г.

Перенаправление диапазона tcp и udp портов на Cisco IOS.

Опробовано на Cisco ISR серий 800, 1800, 2800, 3800. Cкорее всего
будет работать также на других маршрутизаторах.

ip nat pool superpool 192.168.1.2 192.168.1.2 netmask 255.255.255.0 type rotary
ip nat inside destination list 101 pool superpool
access-list 101 permit udp any any range 1000 2000

четверг, 8 мая 2008 г.

Поднимаем ADSL с двумя pvc на Cisco 877.

Cisco 877 (и семейство 870 вообще) представляет собой маршрутизатор класса SMB (СБМ - средний и малый бизнес). Его позиционируют как устройство для удалённых пользователей, позволяющее создать VPN с центральным офисом чтобы работник мог работать дома. Однако его возможностей может хватить даже для создания небольшого VPN-концентратора, довольно функционального и стабильного маршрутизатора.
В моём случае получился относительно сложный случай: один местный провайдер (ЮТК Ростовэлектросвязь) предоставляет доступ и в Интернет, и к своей локальной сети серез ADSL. Организована связь довольно просто, однако для неподготовленного инженера задача окажется нетривиальной:
Организуются два канала pvc: один для доступа в Интернет, другой - сеть провайдера.
  • PVC0 (Интернет) работает в режиме PPPoE.
  • PVC1 (локальная сеть провайдера) - в режиме моста (RFC1483/2684 bridged). Может возникнуть вопрос почему, но это действительно необходимо. Левые пакеты можно зарезать акцесс-листами.
Основные моменты конфигурирования - настройка WAN-интерфейса и объединение двух интерфейсов в мост.
Так как у нас 2 PVC, то WAN-интерфейс (назвается он ATM1) необходимо поделить на два сабинтерфейса.
interface ATM0
no ip address
no atm ilmi-keepalive
dsl operating-mode auto
!
interface ATM0.1
point-to-point
pvc inet 0/1
pppoe-client dial-pool-number 1
!
!
interface ATM0.2
point-to-point
pvc zona 0/2
encapsulation aal5snap
!
bridge-group 2
!
Так как на pvc0 необходимо поднять PPPoE-клиент, поднимается логический интерфейс Dialer.
interface Dialer1
ip address negotiated
ip mtu 1492
ip nat outside
ip virtual-reassembly
encapsulation ppp
dialer pool 1
no cdp enable
ppp pap sent-username user password 7 pass
!
В локалку смотрит VLAN
interface Vlan1
no ip address
bridge-group 2
!
Для возможности объединения нескольких интерфейсов в мост необходимо поднять ещё один виртуальный интерфейс - BVI.
interface BVI2
ip address 192.168.1.1 255.255.255.0
ip nat inside
!

среда, 7 мая 2008 г.

ADSL - и сколько в этих звуках?

Кто не знает, что такое ADSL? Высокоскоростной доступ в Интернет (сравнительно с диалапом и GPRS)!
Как это работает?..
Википедия даст нам общие сведения, однако слова "технология" и "стандарты" там - основная конкретика. На этом описание технологии заканчивается.
Покопаем немного глубже.
Чтобы работал Ethernet через DSL - необходимо как минимум два устройства: DSL-модем (или роутер, кому как больше нравится) и DSLAM (DSL Access Multiplexer). Причём второй устанавливается на стороне провайдера (обычно, это местная АТС).


На этом описания технологии обычно заканчиваются. Вот у нас имеется линия, фильтруемая сплиттерами. Есть заданные рабочие частоты. Что дальше? Как пустить по этому трафик? А дальше придётся вспоминать (или учить заново) сети ATM.
ATM создаёт несколько виртуальных каналов (pvc) - это некий аналог VLAN-ов. Таким образом, на одной линии можно организовать несколько различный неконкурентных каналов. Зачем? Разные каналы можно ограничить разными скоростями (что активно используется). Например, организовать доступ к сети провайдера (разнообразные "медиазоны") на высокой скорости, в то время, как доступ в Интернет ограничить низкой скоростью.
Каждый канал ATM описывается двумя характеристиками: vpi и vci. То есть для формирования одного pvc необходимы по сути только эти две настройки.
Поверх ATM накладывается Ethernet, дальше можно использовать любые технологии более высоких уровней.
DSLAM на входе принимает несколько (от 8 до тысяч) телефонных линий, выбирает ATM-каналы, преобразует в Ethernet и отправляет полученный сигнал на встроенный свич, аплинк (их может быть несколько) которого попадает в сеть провайдера.
ADSL-роутер по идее должен работать по IP - на то он и роутер. Однако это необязательно. Его задача - преобразовать ATM в Ethernet. Всё остальное появилось из-за желания поставщиков интегрировать сервисы. Сервисы нашли своих клиентов и в итоге мы имеем несколько режимов работы для ADSL-роутера, основные из которых:
  • Мост (Bridge). ATM преобразуется в Ethernet. Работа модема незаметна + сеть клиента обединяется с сетью провайдера. Некрасиво и опасно.
  • Маршрутизатор (этот режим по-разному называется в разных вендорах) . У роутера будет 2 IP-интерфейса: WAN (Ethernet преобразуется в ATM и уходит к провайдеру) и LAN (Ethernet в локальную сеть). Настраивается маршрутизация. В подавляющем большинстве случаев используется NAT. Минус в том, что пользователь авторизуется по IP-адресу. Хорошо, если провайдер будет также учитывать MAC-адреса.
  • PPPoE. То же что и предыдущий режим, только интерфейсе WAN меджу Ethernet и IP добавляется PPPoE. Этот режим позволяет аутентифицировать устройство клиента по логину и паролю, а также формировать канал между провайдерским сервером доступа и роутером у клиента. Так мы получаем достаточный уровень защиты.
На разных pvc на одном ADSL-роутере можно использовать разные режимы работы.

Например, ЮТК (провайдер в Ростове-на-Дону) сочетает второй и третий способы для доступа к своей "медиазоне" и Интернету.

понедельник, 5 мая 2008 г.

start

Итак, теперь я "инженер-системотехник". Странное название: присутствует и "инженер", и "техник". Принято считать, что техники - работники без высшего образвания, инженеры - с высшим. Но смысл на самом деле в том, что занимаюсь в какой-то степени всем: предлагаю идеи по проектированию сетей, конфигурирую сетевые устройства, помогаю админам с линуксом и лезу в IP-телефонию. В послемнее время таких людей как я стали называть системными инженерами, или того круче системными архитекторами.
Блог называю "заметки на полях", ибо эти заметки в блокнот не запишешь..