Порт ipfw для Linux существует давно. Я даже собрал RPM пакеты для CentOS 5
Рассказываю как быстро порезать входящий/исходящий трафик на машине с NAT.
Пример 1 Режем полосы вх/исх в 1Mbit/s для каждого из ip адресов подсети 10.0.0.0/24
#!/bin/bash
ipfw -f flush
ipfw pipe 1 config bw 1000Kbit/s mask dst-ip 0x000000ff
ipfw pipe 2 config bw 1000Kbit/s mask src-ip 0x000000ff
ipfw add 11 pipe 1 ip from any to 10.0.0.0/24 out
ipfw add 12 pipe 2 ip from 10.0.0.0/24 to any in
Пример 2 Индивидуальные скорости для каждого IP.
Все тоже очень просто:
#!/bin/bash
ipfw -f flush
Создаем пайпы для входящей и исходящей скорости для ip из table 1
ipfw pipe 1 config bw 1000Kbit/s mask dst-ip 0x000000ff
ipfw pipe 2 config bw 1000Kbit/s mask src-ip 0x000000ff
ipfw add 11 pipe 1 ip from any to table\(1\) out
ipfw add 12 pipe 2 ip from table\(1\) to any in
Создаем пайпы для входящей и исходящей скорости для ip из table 2
ipfw pipe 3 config bw 4000Kbit/s mask dst-ip 0x000000ff
ipfw pipe 4 config bw 4000Kbit/s mask src-ip 0x000000ff
ipfw add 13 pipe 3 ip from any to table\(2\) out
ipfw add 14 pipe 4 ip from table\(2\) to any in
и добавляем нужные IP в нужные таблицы
ipfw table 1 add 10.0.0.3
ipfw table 2 add 10.0.0.2
—
-
ZYV:
Вопросы:
1) Оно ведь не будет работать параллельно с iptables?
2) А изнутри оно как вообще, просто как ipfw-like интерфейс к netfilter, или отдельная подсистема?
3) Оно быстрее / медленнее iptables + tc?
4) Основное преимущество, как я понимаю, простота конфигурации и администрирования?
2011-03-14, 19:10
-
Денис:
1 Будет
2 Отдельная подсистема с netfilter никак не связан
3 ИМХО HTB+ хэшфильтры производительней будут
4 Да2011-03-14, 20:53
-
costas:
Ещё примеры…
# mask dst-ip 0×00000000 — одна очередь/скорость трубы на всех
# mask dst-ip 0xffffffff — на каждого юзера своя очередь/скорость трубыРеализация разных скоростей по юзерам (персонально каждому своя труба) на примере двух каналов 1024Kbit/s и 4096Kbit/s:
Для каждого канала два pipe на входящий и исходящий:
# входящий
ipfw pipe 201 config bw 1024Kbit/s mask dst-ip 0xffffffff
ipfw pipe 202 config bw 4096Kbit/s mask dst-ip 0xffffffff
# исходящий
ipfw pipe 211 config bw 1024Kbit/s mask src-ip 0xffffffff
ipfw pipe 212 config bw 4096Kbit/s mask src-ip 0xffffffff# правила для входящего table 1
ipfw add 101 pipe 201 ip from any to table\(1,1024\) via ${LAN_IFACE}
ipfw add 102 pipe 202 ip from any to table\(1,4096\) via ${LAN_IFACE}# правила для исходящего table 2
ipfw add 111 pipe 211 ip from table\(2,1024\) to any via ${LAN_IFACE}
ipfw add 112 pipe 212 ip from table\(2,4096\) to any via ${LAN_IFACE}Здесь используется только две таблицы на любое количество pipe, добавление юзера выглядит так:
— для канала 1024 Kbit/s
ipfw table 1 add 10.0.0.3 1024 # входящий
ipfw table 2 add 10.0.0.3 1024 # исходящий— для канала 4096 Kbit/s
ipfw table 1 add 10.0.0.2 4096 # входящий
ipfw table 2 add 10.0.0.2 4096 # исходящийТоже самое но с маской 0×00000000, будет определять что юзеры занесённые в таблицы и привязаные к определённой скорости будут делить один канал, удобно если вам нужно резать не для всей сетки, а всего лишь для группы юзеров из этой сетки, для каждой группы нужно создавать свою трубу (два pipe вход./исх.)
2011-03-23, 11:36
-
INF[SZ]:
costas огромнейшее спасибо
2011-03-23, 11:38
-
costas:
З.Ы. забыл пояснить к примеру, что если добавлять
ipfw table 1 add 10.0.0.5 1024 # входящий
ipfw table 2 add 10.0.0.5 1024 # исходящийipfw table 1 add 10.0.0.6 1024 # входящий
ipfw table 2 add 10.0.0.6 1024 # исходящийipfw table 1 add 10.0.0.7 1024 # входящий
ipfw table 2 add 10.0.0.7 1024 # исходящийи т.д., у всех пользователей будет персонально 1024kbit/s, то есть на каждого
2011-03-23, 11:42
-
ZYV:
Что-то не вижу чем это выгодно отличается от tc теперь А как ipfw шейпит, оно умеет что-то типа WRR / SFQ и HTB соответственно?
2011-03-26, 02:41
-
D:
I have, a strange problem. After installing ipfw tool and module I make next 2 rules :
[root@x1~]# ipfw show
00010 30281 40260690 pipe 1 ip from any to 89.x.x.x
00020 12349 896627 pipe 2 ip from 89.x.x.x to any
65535 9101442 5421809363 allow ip from any to any[root@x1~]# ipfw pipe show
00001: 1.000 Mbit/s 0 ms burst 0
q131073 50 sl. 0 flows (1 buckets) sched 65537 weight 0 lmax 0 pri 0 droptail
sched 65537 type FIFO flags 0×0 0 buckets 1 active
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
0 ip 0.0.0.0/0 0.0.0.0/0 39356 51206819 46 63160 29
00002: 1.000 Mbit/s 0 ms burst 0
q131074 50 sl. 0 flows (1 buckets) sched 65538 weight 0 lmax 0 pri 0 droptail
sched 65538 type FIFO flags 0×0 0 buckets 1 active
0 ip 0.0.0.0/0 0.0.0.0/0 12995 938211 0 0 0And on 89.x.x.x machine execute wget :
[root@u2~]# wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.39-rc1.tar.bz2 -O /dev/null
—2011-04-02 12:02:29— http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.39-rc1.tar.bz2
Resolving http://www.kernel.org… 130.239.17.4, 149.20.4.69, 149.20.20.133, …
Connecting to http://www.kernel.org|130.239.17.4|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 76121713 (73M) [application/x-bzip2]
Saving to: `/dev/null’0% [ ] 307,748 56.4K/s eta 21m 48s
So I config pipe 1 Mbit/s but download with 0.5 Mbit/s. When I config pipe to 2 Mbit/s download up to 1Mbit/s i.e. 1/2 from thos i configure.
Are you have any idea ?2011-04-02, 15:05
-
UkrZilla:
Must be:
00010 30281 40260690 pipe 1 ip from any to 89.x.x.x in
00020 12349 896627 pipe 2 ip from 89.x.x.x to any outИсточник