738 читателей, 186 постов
Администрация
Модераторы
Рынок телекоммуникаций, в том числе широкополосный доступ: статистика, анализ.
Вprotocols bgp
neighbor 195.xxx.xxx.226 { export [ default-originate reject ];
В policy options
policy-statement default-originate {
from {
route-filter 0.0.0.0/0 exact;
}
then accept;
}, это чтобы отдать только маршрут по умолчанию
policy-statement reject {
then reject;
} , а это чтобы отбросить все остальные маршруты.defaultrouter="195.xxx.xxx.225" #маршрут по умолчанию
gateway_enable="YES" #включаем режим пересылке пакетов между интерфейсами
hostname="gw2.xxx.ru" #задаем имя маршрутизатора
# em0 – внешний интерфейс в влане c внутренним bgp
ifconfig_em0="up"
ifconfig_em0="inet 195.xxx.xx.231 netmask 255.255.255.240" #освновной IP адрес
ifconfig_em0_alias0="inet 195.xxx.xxx.232 netmask 255.255.255.255" #дополнительные IP.
ifconfig_em0_alias1="inet 195.xxx.xxx.233 netmask 255.255.255.255" #алиасы
ifconfig_em0_alias2="inet 195.xxx.xxx.234 netmask 255.255.255.255"
#em1 – внутренняя сеть, в моем случае это vlan между шейперами и l3 коммутаторами
ifconfig_em1="up"
ifconfig_em1="inet 195.xxx.xxx.193 netmask 255.255.255.248"#ipfw firewall , этим мы будем шейпить пользователей
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_FORWARD
options DUMMYNET
options HZ=2000
# pf, а этим мы будем NAT-ить локальные IP
device pf
device pflog
device pfsyncfirewall_enable="YES"
pf_enable="YES"
pf_rules="/etc/pf.conf"
#!/bin/sh , указываем путь к командному интерпретатору
/sbin/ipfw -q flush
/sbin/ipfw -q pipe flush , очищаем правила файрвола и очереди dummynet при старте
fwcmd="/sbin/ipfw -q" , Задаем путь к ipfw и опцию с которой запускаться. –q говорит файрволу о том, чтобы он не спрашивал подтверждения
WAN_IP = 195.xxx.xxx.231, указываем основной IP адрес внешнего интерфейса
IBGP_NET = 195.xx.xx.224/xx
LAN_IP = 10.249.0.0/16 , указываем диапазон наших внутренних сетей
${fwcmd} add 10 allow ip from any to any via lo0 , задаем правило разрешающее все на
loopback интерфейсe
${fwcmd} add 11 allow ip from me to me , разрешаем пакеты с этого хоста на этот хост
${fwcmd} add 12 allow icmp from any to me, разрешаем icmp на этот хост
${fwcmd} add 20 allow tcp from table(1) to me dst-port 22 , разрешаем подключаться к шейперу
по протоколу ssh с IP адресов указанных в таблице 1. Занести адрес в эту таблицу можно
командой ipfw table 1 add <ip_address>
${fwcmd} add 21 deny tcp from any to me dst-port 22 , окончательно запрещаем ssh. Под это
правило попадут все, кто не в таблице 1
${fwcmd} add 30 pipe tablearg ip from any to table(2) out via em1
${fwcmd} add 31 pipe tablearg ip from table(3) to any in via em1 , выпускаем пользователей из таблиц 2 и 3 в интернет и указываем им конкретный пайп дамминета для шейпинга. Номер пайпа указываем при добавлении пользователя в таблицу, каждая таблица для определенного типа трафика (2 для входящего к клиенту, 3 – для исходящего). Добавление пользователя в таблицу происходит командами ipfw table 2 add <ip клиента> <номер пайпа> и ipfw table 2 add <ip клиента> <номер пайпа>
Если вы хотите редиректить заблокированных пользователей, то необходимо будет добавить редирект на
локальный веб-сервер (например nginx)
${fwcmd} add 38 fwd 127.0.0.1,3128 tcp $LAN_NET to not me dst-port 80
${fwcmd} add 39 allow tcp from any $LAN_NET src-port 80
${fwcmd} add 40 deny all from $LAN_NET to not me
${fwcmd} add 41 deny all from not me to $LAN_NET , блокируем пакеты к нашим сетям. Под эти правила попадут те пользователи которые отстутствут в таблице 2 и таблице 3
${fwcmd} add 50 allow ip from me to any keep-state , разрешаем полный доступ исходящим соединениям с этого сервера и сохраняем их состояние.
${fwcmd} add 51 allow tcp from $IBGP_NET to $WAN_IP dst-port 179 , разрешаем хостам находяшимся в vlan со внутренним BGP устанавливать с нами соединение на 179 порт (bgp протокол)
${fwcmd} add 52 allow ospf from 195.xxx.xxx.192/29 to any , разрешаем ospf с определенной сети
Теперь мы задаем пайпы дамминета, собственно сам шейпинг
Примерно вот так:
#Speed 15Mbps, Для игр
${fwcmd} pipe 1 config mask dst-ip 0xffffffff bw 16000Kbit/s
${fwcmd} pipe 101 config mask src-ip 0xffffffff bw 16000Kbit/s
#Speed 20Mbps, Для отдыха
${fwcmd} pipe 2 config mask dst-ip 0xffffffff bw 21000Kbit/s
${fwcmd} pipe 102 config mask src-ip 0xffffffff bw 21000Kbit/s
#Speed 3Mbps, Для новичков
${fwcmd} pipe 3 config mask dst-ip 0xffffffff bw 3500Kbit/s
${fwcmd} pipe 103 config mask src-ip 0xffffffff bw 3500Kbit/s
nterface em0
ip address 195.xx.xxx.231/xxx
description ibgp
!
interface em1
ip address 195.xxx.xxx.193/29
description ospf
!
! Static routes.
!
ip route 10.0.0.0/8 Null0 254
ip route 79.142.80.132/30 195.xxx.xxx.238
ip route 94.124.180.57/30 195.xxx.xxx.225hostname gw2.xxx.ru
password rxxxx
enable password rxxxxx
log file /var/log/quagga/bgpd.log
!
router bgp 3333
bgp router-id 195.xxx.xxx.231
bgp log-neighbor-changes
network 195.xxx.xxx.192/29
neighbor 195.xxx.xxx.225 remote-as 3333
neighbor 195.xxx.xxx.225 description j4350-1
neighbor 195.xxx.xxx.225 next-hop-self
neighbor 195.xxx.xxx.238 remote-as 3333
neighbor 195.xxx.xxx.238 description j4350-2
neighbor 195.xxx.xxx.238 next-hop-self
!
Hostname gw2.xxx.ru
password xxx
enable password xxxx
log file /var/log/quagga/ospfd.log
!
interface em1
!
router ospf
ospf router-id 195.xxx.xxx.193
network 195.xxx.xxx.192/29 area 0.0.0.0
default-information originate metric 100
!
line vtyneighbor 195.xxx.xxx.195 remote-as 3333
neighbor 195.xxx.xxx.195 description sw-c3560-xxx.ru
neighbor 195.xxx.xxx.195 default-originatenet.inet.ip.forwarding=1 #разрешаем пересылку пакетов между интерфейсами
net.inet.ip.fw.one_pass=1 #разрешаем однопроходный режим ipfw
net.inet.icmp.bmcastecho=0 #не отвечаем на пинг на широковещательный адрес
net.inet.tcp.blackhole=2 #отбрасываем пакеты на закрытый порт (не слушаемый никем)
net.inet.udp.blackhole=1 # отбрасываем пакеты на закрытый порт (не слушаемый никем)
net.inet.ip.dummynet.io_fast=1 #новое поведение dummynet( шейпирование канала)
net.inet.icmp.drop_redirect=1 #дропаем icmp редиректы
net.inet.icmp.log_redirect=1 #пишем icmp редиректы в log, бывает полезно
net.inet.ip.redirect=0 # если 0, то нет реакции на ICMP REDIRECT пакеты
net.inet.ip.dummynet.expire=0 # в случае кратковременного прекращения трафика пользователя не
#выносим его из очереди
net.inet.ip.dummynet.hash_size=16384 # размер хэш-таблицы, используемой dummynet для
#хранения очередей. Увеличение этого значение ускоряет работу
#dummynet при большом #количестве очередей, естественно в
# обмен на оперативную памятьuser nobody;
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 35;
server {
listen 3128;
server_name wkt_router;
charset windows-1251;
access_log /dev/null;
rewrite ^(.*) blocked.wktnet.ru/index.htm permanent;
}
}
router ospf 1
router-id 195.xxx.xxx.195
log-adjacency-changes
network 10.249.33.0 0.0.0.255 area 0.0.0.0
network 10.249.42.0 0.0.0.255 area 0.0.0.0
network 10.249.51.0 0.0.0.255 area 0.0.0.0
network 10.249.55.0 0.0.0.255 area 0.0.0.0router bgp 3333
bgp log-neighbor-changes
network 10.249.33.0 255.255.255.0
redistribute ospf 1
neighbor 195.xxx.xxx.193 remote-as 3333
neighbor 195.xxx.xxx.193 description gw

cat /etc/rc.firewall
#!/bin/sh
#Flush all firewall rules
/sbin/ipfw -q flush
/sbin/ipfw -q pipe flush
#Setting firewall path and options for working with rules
fwcmd="/sbin/ipfw -q"
#variables
IBGP_NET="195.93.xxx.xxx/28" #iBGP network (vlan9)
WAN_IP="195.93.xxx.xxx" #Primary WAN ip address
LAN_IP="195.93.xxx.xxx" #Primary LAN ip address
###System rules
${fwcmd} add 10 allow ip from any to any via lo0 #do not filter loobpack
${fwcmd} add 11 allow ip from me to me #allow packets from this host to this host
${fwcmd} add 12 allow icmp from any to me #allow ICMP
#allow ssh connections
${fwcmd} add 20 allow tcp from table\(6\) to me dst-port 22 #Allow SSH connections (table 6)
${fwcmd} add 29 deny tcp from any to me dst-port 22
#allowing users and add his ip to shaping pipe
${fwcmd} add 30 pipe tablearg ip from any to table\(1\) out via em1
${fwcmd} add 31 pipe tablearg ip from table\(2\) to any in via em1
#Block spammerss
${fwcmd} add 34 deny ip from table\(3\) to any dst-port 25 #for auto block spammers
#allow connections to this networsk
${fwcmd} add 40 allow all from table\(7\) to any
${fwcmd} add 41 allow all from any to table\(7\)
#allow active users
${fwcmd} add 45 allow all from not me to table\(1\)
${fwcmd} add 46 allow all from table\(2\) to not me
#By default block users
${fwcmd} add 48 fwd 127.0.0.1,3128 tcp from table\(8\) to not me dst-port 80
${fwcmd} add 49 allow tcp from any to table\(8\) src-port 80
${fwcmd} add 50 deny all from table\(8\) to not me
${fwcmd} add 51 deny all from not me to table\(8\)
###Access rules
#allow outgoing connections
${fwcmd} add 60 allow ip from me to any keep-state #allow all ougoing packets and keep state
#Rules allowing SNMP
${fwcmd} add 61 allow udp from table\(6\) to $WAN_IP dst-port 161 #Allow SNMP
#Rules allowing bgp
${fwcmd} add 64 allow tcp from $IBGP_NET to $WAN_IP dst-port 179 #Allow BGP from iBGP network (vlan 9)
###############################################заполняем таблицы
#таблица 6 - это те кто имеют доступ к маршрутизатору по ssh,telnet и snmp
${fwcmd} table 6 add 195.93.xxx.xxx #wkt office
${fwcmd} table 6 add 89.xxx.xxx.1 #
${fwcmd} table 6 add 93.xx.xxx.xxx #
#таблица 7 - IP адреса и сети с доступом при выключенном интернете
${fwcmd} table 7 add 195.xxx.xx.0/25 #binat
${fwcmd} table 7 add 195.xx.xx.0/26 #servers dmz
${fwcmd} table 7 add 195.xx3.xx.192/29 #int net
${fwcmd} table 7 add 195.xx.xxx.xxx #c3560-b51
${fwcmd} table 7 add 10.88.88.1
#таблица 8 - это наши локальные сети внутри которых пользователи
${fwcmd} table 8 add 10.87.0.0/16
${fwcmd} table 8 add 10.88.0.0/16
${fwcmd} table 8 add 10.249.0.0/16
${fwcmd} table 8 add 10.90.0.0/16
${fwcmd} table 8 add 195.93.xxx.0/25
${fwcmd} table 8 add 195.93.xxx.128/25
${fwcmd} table 8 add 195.93.xxx.64/26
${fwcmd} table 8 add 195.93.xxx.200/28
#таблицы 1 и 2 - это пользователи и их тариф
##WKT tech
${fwcmd} table 1 add 10.87.xx.250/32 55
${fwcmd} table 2 add 10.87.xx.250/32 255
${fwcmd} table 1 add 10.87.xx.251/32 55
${fwcmd} table 2 add 10.87.xx.251/32 255hostname gw2.xxxx
password rxxxx
enable password xxx
log file /var/log/quagga/bgpd.log
!
router bgp 44xxx
bgp router-id 195.93.xxx.xxx
bgp log-neighbor-changes
network 195.93.2xx.xxx/29
neighbor 195.93.206.xx remote-as 44380
neighbor 195.93.206.xx description j4350-b51
neighbor 195.93.206.xx next-hop-self
neighbor 195.93.206.xx remote-as 44380
neighbor 195.93.206.xx description j4350-k18
neighbor 195.93.206.xx next-hop-self
neighbor 195.93.206.xx remote-as 65000
neighbor 195.93.206.xxdefault-originate
neighbor 195.93.206.xx description sw-c3560g-24ts-b51
neighbor 195.93.206.xx route-map c3560g-b51-in in
neighbor 195.93.206.xx remote-as 65001
neighbor 195.93.206.xx default-originate
neighbor 195.93.206.xx description sw-c3560g-24ts-k18
neighbor 195.93.206.xx route-map c3560g-k18-in in
!
route-map c3560g-k18-in permit 10
set local-preference 200
!
route-map c3560g-b51-in permit 10
set local-preference 300
комментарии (77)
в router ospf 1
network
а сделать redistribute local.
статья и куски конфигов в ней очень старые)
router-id 172.16.48.32
log-adjacency-changes
redistribute connected metric 2 subnets
redistribute bgp 65000 metric 4 metric-type 1 subnets
network 10.249.0.8 0.0.0.3 area 0.0.0.0
default-information originate metric 100
!
я имел ввиду примерно вот такую конфигурацию :)
network 10.249.0.8 0.0.0.3 area 0.0.0.0
не получится. Правда есть способ не анонсировать служебную сеть
10.249.0.8/30
Надо написать
network 10.249.0.8 0.0.0.0 area 0.0.0.0
Тогда ОСПФ на интерфейсе поднимется, но сеть /30 анонсироваться не будет.
Можно воспользоватся командой ip ospf ID area Area_ID, в контексте интерфейса.
Я пробовал здесь — techoover.blogspot.com/2008/05/vpn-ospf-over-gre-ipsec.html
При новых тарифах переписывать шейпер?)
kern.hz=«2000»
не обязательно пересобирать ядро.
У меня возник ряд вопросов: сервера (шейперы) стоят в-основном для связи с биллинговыми приложениями? Что используется для биллинга? Как считается трафик?
ПО какому принципу шейпите? Почему это нельзя сделать на 3560?
ИМХО, для ядра коммутации стоило бы поставить хотя бы парочку 3750 в стеке. Как раз для этого придумано.
Вы используете одновременно 2 канала? Как решается проблема с НАТ трансляциями? Трансляции делают шейперы, насколько я понял? А почему не сделать на Джуниперах? Они поддерживают stateful NAT?
И не rate-limit возможно, а именно shape с очередью.
во-первых, при загрузке канала на полную клиентом он будет наблюдать заметные потери пакетов, во-вторых, много трафика, предназначенного клиенту будет доходить до шейпера, загружая внешний канал.
Вам виднее — я не провайдер. Просто мне интересно, для пополнения собственной копилки решений.
Собсно, вскорости надо будет выползать из cisco-only решений, отсюда и интерес.
А вы предоставляете доступ по езернету? И при этом тарифы примерно как на АДСЛе?
Шейпим на FreeBSD, раньше использовали ipfw pipe (queue + GRED), теперь переползли на ng_car, для небольших полос shape, для больших — rate-limit.
Недавно пытался настроить полисинг на 3550 для одного из клиентов, был разочарован.
С другой стороны циска позиционирует только маршрутизаторы, как наиболее богатую механизмами QoS платформу. А свитчрутеры туда в полном объеме не входят (65хх не беру)
Получается, что Джуниперы эти — совсем дохлые? Странно: НАТ не более нагруженная операция, чем маршрутизация. Во всяком случае у меня циски валились от НАТа только когда сеть цепляла червя.
шейпите по адресу источника, т.е. коммутационная сеть работает на скоростях выше тарифных. Перегрузок нет?
А как вы добиваетесь, чтобы пользователя не видели друг друга? PPTP? PPPoE?
Шейпим по адресу источника и по адресу назначения. А зачем добиватся чтобы юзеры друг друга невидели?) Нет такой нужды, предоставляем абонентам полный доступ к локальной сети и соседним операторам которые с нами в пиринге на скорости порта (до 100мбит/с), единственное что на уровне доступа ограничиваем — это режем броадкаст и нетбиос, вещание мультикастом и привязываем с помощью ACL выданный IP адрес абоненту на его порт
Просто интересно.
Пользователей обычно делят (и я тоже небольшим провайдерам когда рисую картинки рекомендую) дабы не было беды, когда одна зараженная машина легко заражает соседей и в итоге лежит вся сеть и компы все болеют. Мне было бы неприятно обнаружить заразу на компе и отсутствие Инета :)
Я понимаю и плюсы: все всех видят, игрухи там, файлопомойка… Но ИМХО, так уже делать просто опасно. Я обычно рекомендую провайдерам (как правило, уже хлебнувшим :)) делать полноценный ДМЗ, с общими сервисами. МОжно за денеШку пользователям выделять там квоты, сервисы и пр. А хотят пириться — е-муль им в помощь :)
И про деление пользователей: понятно, что каждому свою сеть — плохо, каждому свой ВЛАН — можно, но накладно. Но есть ещ технология private vlan, а также её дешевый аналог — protected ports.
Используя port protected все юзвери в одном ВЛАНе в рамках коммутатора, но видят только гейтвей и то, что вы явно разрешите.
А если хочется сэкономить и убрать локал с ядра, то тогда уж лучше действительно выпустить всех в один большой L3-сегмент, но порезать на уровне L2 все потенциально опасное. К этому уже пришли многие большие операторы (та же Корбина в Москве), я у себя на сети делал также: около 3 с половиной тысяч человек в одной L3-сети чувствовали себя совершенно нормально. Современные железки L2 позволяют нормально зафильтровать все, чем могут пользователи повредить друг другу (автор комментарием выше тоже пишет — бродкаст, нетбиос и т.п.)… По крайней мере у меня никаких проблем не было…
А делить клиентов на отдельные L3-подсети в целях борьбы с вирусней и так далее — это уже прошлый век…
Я с трудом себе представляю, как порезать на L2 многие бяки. Броадкаст с мультикастом — довольно легко. А торренты/скайпы/сервера? Часто и такая задача ставится (правда скорее не в домовых сетях, тут я до кучи написал :))
Во-первых, давайте все-таки разделять распределенные ethernet-сети (т.е. пресловутые «домовые») и корпоратив. В корпоративе совсем другие требования и совершенно иная специфика. Там, по-моему, VLAN на пользователя — это вообще единственный вариант с моей точки зрения. :-)
А во-вторых, «многие бяки» тоже надо разделять. Если мы говорим о фильтрации по адресам/портам/протоколам — это без проблем. На L2 уровне фильтровать по заголовкам IP сейчас умеют любые китайцы, не говоря уже о более серьезных людях. Вопрос же фильтрации по контенту — он зачастую и софтовыми вещами в ядре не вполне успешно решается, не то что железом на уровне доступа… Но с другой стороны у того же Длинка уже много-много лет есть Packet content filtering, который вообще по любому содержимому пакета фильтрует — возможности открываются по сути безграничные. :-) Не в курсе — может уже кто-то еще успел у себя это внедрить… Какая-нибудь EdgeCore или типа того… Если внедрили, то вообще шоколадно — а то очень многие выбирают ДЛинки именно из-за этой фичи…
Создаётся профиль ACL в котором определяется какие байты будут сравниваться в Ethernet кадре. Определяется отступом (offset) от начала Ethernet кадра. Возможно указать любой набор байт в диапазоне от 0 до 79.
Создаётся правило из профиля и конкретные значения байтов, набор которых указан в профиле, а так же порты коммутатора, к которым применяется данное правило ACL
ойли? а что тогда 7200 + npe-G2 при нате ласты заворачивает? да чо уж нат, она и при обычном форвардинге ласты завернет гораздо раньше чем до гигобита доживет.
странно вообще от тебя слышать про нат такое. Оо
вообще маршрутизация выполняется на cef, что есть на любом cisco router'е или почти на любом. netflow export выполняется почти там же, поэтому утилизация при netflow export'е почти не меняется. а вот операция nat'а выполняется софтварно, т.е. на процессоре. или просто так спицально для nat'ов продают ace модуль за кучу денег для 6500-7600 решений?
данные «жуниперы» относятся к линейке J-series, что есть вобщем-то офисные маршрутизаторы, точнее фиреволы. по-умолчанию с junos 9.Х они работают во flow-based режиме и превращаются в пакетный маршрутизатор путем добавления нескольких магических комманд и переводом в packet-based режим. они целиком софтовые, т.е. и менеджмент устройства и форвардинг выполняется на _одном_ процессоре. да и если посмотреть во внутирь будет виден обычный писюк с целероном 2.5ГГц на борту :) однако, если нет желание маршрутизировать более гигобита трафика, то J-series очень вкусное решение. но, конечно, семплить с него нетфлоу или резать полисерами трафик на несколько тысяч абонентов при этом странная затея, примерно такая же как и натить при помощи cisco 7200 + npe-G2 :)
однако, мой опыт говорит о весьма заметном снижении производительности при nat'е. :(
Я ведь в Жуниперах — сам знаешь, поэтому в вопросе ключевым словом было эти :)
НАТ сам по себе не очень жруч. Особенно если записи не слишком часто меняются. Память да, могут откушать. Но поиск соотв. правила в конфиге и применение — не сумасшедшая нагрузка. ip input съедает почти 100% по НАТу только при червивом заражении: там МАССА сессий полуоткрытых создается. И циске (как и любой железке) становится трудно
Что используете таблицы и tablearg для шейпинга в ipfw — это хорошо (в инете до сих пор много старых мануалов со старыми конфигами, от которых плакать хочется), но зачем вам pf? Советую: переходите на ядерный ipfw nat, который появился в семерке. Все функции libalias (а значит по дефолту — нет необходимости ковыряться, например, с проксирование активных ftp, т.к. все это работает из коробки), отсутствие необходимости городить лишний огород и к тому же — существенный прирост производительности. Какую полосу вы шейпите и НАТите? Еще около года назад (когда я работал в телекоме :-) ) я как раз решал все эти вопросы и после профилирования через hwpmc убедился, что pf тормозит — дай Боже! Вот здесь подробнее: forum.nag.ru/forum/index.php?showtopic=47497
pf — это вообще файрволл для домохозяек. :-) Если надо побыстрому выпустить в инет офис и есть время только для написания двух строчек — альтернативы pf отсутствуют. :-) Но для серьезного провайдинга — это все фигня. К тому же он на несколько процессоров не раскладывается до сих пор по-моему…
В общем, мой вам совет — откажитесь от pf и перейдите полностью на ipfw. Серверу сильно полегчает и избавитесь от костылей (от тех же дополнительных прокси для активного FTP). :-)
Зачем вы пользуетесь FreeBSD, если не доверяете STABLE? ;-) В этом же и бонус Бзди по сравнению с Линуксом: можно практически не тратить свое время на исследования надежности и тупо довериться мантейнерам. :-)
Так вот, все с ipfw nat в порядке — проверено на личном опыте. Или ng_nat можете попробовать, если нетграф препочитаете — он даже дольше в порядке, чем ipfw nat. :-)
> Как оно себя поведет при траффике 300мбит/с в обе стороны (суммарно 600) и 100к pps?
Есть мнение, что поведет лучше, чем pf. У меня трафик был поменьше — порядка 400мбит суммарно и 75kpps, но и комп похуже был — Атлон какой-то…
Ну и в любом случае, на таких объемах уже и ядро тюнить надо… У вас, кстати, эта тема, ИМХО, не до конца раскрыта. Например, сказано, что используются карточки Intel, а переменных в sysctl вы по ним никаких меняете… А там ведь можно подкрутить и загрузку по прерываниям уменьшить сильно… Ну это я уже так — побрюзжать. :-)
Посему сижу познаю дао netgraph и мечтаю о больших кошках и джуниперах.
Железо к слову 2хXeno E5420… 2500 MHz
Но вы уверены, что у вас именно dummynet выжрал? Вообще сам по себе он много жрать не должен — NAT больше жрет. Проглядел сейчас maillist'ы — все пишут, что 400-500 — это для dummynet'а семечки. Может, настроено чего неправильно было? io_fast было включено? Попробуйте профилировать ядро через hwpmc — сможете посмотреть, кто реально процессор жрет.
Кошки и Жуниперы — на самом деле не панацея…
Вообще, по тематике работы высоконагруженных шейперов и НАТов некоторое время назад были шикарные статьи на Наге. Шикарность прежде всего в том, что сравнивается большой спектр разного железа с указанием конкретных названий, что обычно редкость. Почитайте, если не видели:
nag.ru/news/17045/
nag.ru/news/17443/
т.е. выделить шейпинг на две отдельные машины и балансировать через них трафик.
способов — куча. у меня балансировка сделана на втором уровне с помощью etherchannel, src-ip.
вот тут спалился…
коллега )
впрочем ладно, кто во что горазд, тот так и строит. :(
бай зэ вей, мне вот очень интересно, в каком месте вы тут производите учет проданных абонентам услуг?
я понимаю что в pf altq'ой не порежешь как думминетом по маске пер ойпи таблицу из префиксов парой строчками в конфиге, но раз был сделан выбор на ipfw + dummynet, то почему нельзя было использовать тогда уж ng_nat, которые уже наверно как вечность стабилен и готов к использованию (да-да, иногда что-нибудь ломают в нем, но если не жить на блейд-эдж технологий, то все будет успешно работать). во freebsd кстате есть тьма ядерных натов, большая часть из которых умеет работать с ipfw :) помимо ng_nat сюда можно отнести и ipnat от анахронизма в виде ipfilter. к тому же, до недавненго времени во freebsd pf nat не умел gre через себя пускать, а с ftp он так и не дружит особо. держит ftp-proxy или как его на лупбаке?
кстате, сам по себе pf и его nat, и его шейпер весьма и весьма шустры. возможно шустрее и ipfw. тут какбэ я не очень хочу разжигать холивары между любителями ipfw и pf. но вот как-то так, да.
а главная унылость схемы заключается в концепции резервирования. например, почему на каждом 4350 именно по отдельному аплинку? что, при необходимости проапгрейдить на одном из них junos будете опускать целиком весь аплинк? чем это все аргументировано? отстутвием пары килобаксов на память для 4350 чтобы уместить пару таблиц full-view в него? т.е. какбэ получается при выходе из строя всего лишь одного из 4350 мы теряем и маршрутизатор и второй аплинк. :( имхо не очень хорошо.
далее, ваша схема и приведенные конфиги противоречат друг другу, что из них правильно? если схема, то получается совсем все печально. зачем вам фуллвью, если выбор маршрута все равно выбирается на основании наличия дефолтного префикса от писюковых натошейперов? т.е. фактически сравнения всей фуллвью по атрибутам бгп и выбора наилучших маршрутов между двумя таблица от двух провайдеров не происходит. зачем тогда это все нужно?
мне кажется надо чуть лучше все таки готовиться и писать такие статьи, ну или хотя бы понимать о чем идет речь.
пс: и да, поллинг не есть хорошо. на хорошие сетевые карты опять же не хватило денег или не хватило терпения докрутить гайки в sysctl?
ппс: все эти писироутиры — это все как-то не айс :) cisco isg — вот это айс :)
вычитал в комментах что таке не по отдельному. ну да ладно. :(
Либо неумение писать правильно (гигабайт), либо «плаванье» в теме :)
ЗЫ Это в твоем стиле написанное замечание :)
насчет информации, ну блин, я же не статью пишу :) я так, в камментах ерундой страдаю :) вовсе не значит что то что я говорю это догматичная истина. :(
а dummynet лучшее решение для шейпинга
так что не вижу ничего ужасного в юзании двух фаеров.
ipnat — течет память и вешается ядро
ng_nat — течет память
вот ipfw kernel nat не пробовал, это да. для меня проще оказалось вообще отказаться от ната и раздать всем паблики
я сам очень сторонник и любитель pf, но что есть, то есть. в 8ку вроде портировали свежи pf, так что возможно там уже нет проблем с gre. :)
у вас ipfw тут только для того чтобы загонять траффик в dummynet. :( в рассылках пробегал патч для управления dummynet'ом напрямую из pf:
lists.freebsd.org/pipermail/freebsd-pf/2007-October/003849.html
people.freebsd.org/~remko/patches/dummynet_pf.tar.gz
насчет судьбы его мне мало известно, но судя по всему он до сих пор не принят как-то :( однако, использования сендвича фиреволов тоже не решение проблемы. в данном случае на мой взгляд самый лучший вариант использовать ng_nat вместо pf. а чтобы оно протекало, да, надо будет слегка потанцевать :)
а ftp да, с этим проблемы.
в openbsd, да, pf nat давно уже как gre passthrough. во freebsd до 7ой ветки включительно нет. в 8ке вроде проскакивал порт свежего pf. поэтому возможно оно уже.
просто знаю, что от пользователей тогда не было жалоб на работу gre.
я бы конечно кое-что изменил =)
P.S. Есть еще масса решений этого вопроса, как гласит истина и она права кстати «спроси мнение 3-х провайдеров и получи 4 возможных решения» :)