Файл префиксов и учет российского/зарубежного трафика
Для начала необходимо пояснить суть проблемы и рассказать, зачем такой учет вообще необходим.
Зачастую бывает, что ваш провайдер выставляет вам счет за пользование интернетом, состоящий из двух цифр: стоимость российского трафика и стоимость зарубежного, т.е. результат обмена информацией с зарубежными серверами. Дело в том, что сам провайдер каким-либо образом покупает трафик у более крупных, магистральных провайдеров которые не связываются с мелкими клиентами. При этом, обмен данными с российскими серверами ведется по одним каналам связи, а для общения с зарубежными серверами используются немногочисленный зарубежные каналы. Надо сказать, что суммарная полоса пропускания данных всех российских провайдеров "за рубеж" составляет всего несколько сот мегабит на всю страну, и таких каналов не так и много (десяток, наверное). Естественно, аренда этих каналов стоит существенно дороже по сравнению с внутрироссийскими и внутримосковскими каналами. Представьте на секунду, сколько стоит проложить трансатлантический подводный оптоволоконный кабель на несколько тысяч километров? Это вам не витую пару через этаж кинуть! :) Вот почему зарубежный трафик стоит дороже российского. Вообще, процентов 80 российского трафика прокачивается через АТС номер 9, что на ул.Губкина, в Москве.
Теперь надо определить, как отличить "российский" и "зарубежный" трафик, и как это делает ваш провайдер. Все основано на глобальной маршрутизации в Интернете, которая осуществляется по протоколу BGP. Грубо говоря, все сети, подключенные к интернету, принадлежат некоей Автономной Системе (AS), которая представляет собой набор IP-сетей (адресных пространств), находящихся под единым управлением. Владелец и руководитель автономной системы определяет политику маршрутизации своих подсетей через своих соседей-провайдеров или крупных организаций, имеющих свои автономные системы. Все такие системы соединены логическими связями друг с другом так, что любая машина в интернете может быть связана с любой другой машиной посредством нескольких (3-7) автономных систем, каждая из которых образована несколькими маршрутизируемыми сетями. Более того, протокол позволяет выбирать оптимальный путь пользуясь большим количеством передаваемой между автономными системами вспомогательной информации, и т.д. Возвращаясь к нашему случаю, ваш провайдер определил маршрутизацию российского трафика (т.е. сетей, принадлежащих российским AS, их список известен) через один канал, а всего остального - через другой, и за другие деньги. Соответственно, и со своих клиентов взимается разная плата.
Теперь, если вы хотите у себя учитывать разделение трафика так, как это делает у себя ваш провайдер, вам по-хорошему надо бы поднять у себя маршрутизатор (Cisco, FreeBSD/Zebra,...), поднять на нем сессию iBGP с провайдером, получать от него таблицу роутинга (она часто меняется) и импортировать ее в вашу программу учета трафика. Существует возможность пользоваться менее точной, но более короткой базой ru-networks.txt, построенной на основании таблицы выделенных организациям блоков IP-адресов, которую у себя поддерживает RIPE. В настоящий момент она содержит в себе список около 400 сетей, которые можно назвать "Российскими". Никто не гарантирует, что ваш провайдер будет получать трафик от некоторых таких сетей не через зарубежные каналы, однако я надеюсь, что точность такого разделения будет вполне приемлемой.
Файл
ru-networks.txt находится в каталоге
addon дистрибутива. К сожалению, летом 2004 года RIPE прекратило поддержку файла, используемого скриптом для построения этого списка, так что дальнейшее расширение базы "русских сетей" нетривиально.
NeTAMS поддерживает файл префиксов в форматах:
A.B.C.D /mask
A.B.C.D/mask
A.B.C.D/masklen
A.B.C.D /masklen
(разница - в пробеле перед маской). Где mask это представление в виде X.X.X.X,
а masklen - в битовом, например: /24.
Также возможно использование символов
! - исключить сеть из списка, и
# - комментарий (работает только в начале строки).
Таким образом один и тот же файл можно использовать и для NeTAMS, и для FreeBSD:
ipfw table
Чтобы подсчитать RU трафик необходимо прописать:
policy name russian target file /usr/local/etc/ru-networks.txt
unit host name myhost ip 192.168.1.10 acct-policy russian
Помните, что совпадение пакета с прописанной сетью в файле означает совпадение политики: для подсчета зарубежного трафика используйте флаг инвертирования(
!)