Уважаемые знатоки и гуру, я знаю что подобная тема не раз обсуждалась и обсасывалась. Но при том, что я перечитал не один десяток статей по данной теме, я все-равно не могу справиться с задачей:
Есть сервер FreeBSD 8.2
Использую фаервол ipfw. (не советуйте, пожалуйста другой, т.к. задание организовать именно на этом).
Необходимо зажать трафик для локальной сети.
В качестве NAT используется ipnatЯдро:
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_FORWARD
options IPDIVERT
options DUMMYNET
kldstat
Id Refs Address Size Name
1 3 0xc0400000 ac7748 kernel
2 1 0xc4597000 35000 ipl.ko
rc.conf
gateway_enable="YES"
firewall_enable="YES"
firewall_script="/etc/ipfw/rc.firewall"
ipnat_enable="YES"
ipnat_rules="/etc/ipfw/ipnat.conf"
rl0 - внешний интерфейс
1.2.3.4 - внешний ип
fxp0 - интерфейс, смотрящий в локалку
192.168.0.0/24 -локальная сеть
Правила которые прописываю на фаерволе:
${fw} pipe 1 config bw 550Kbit/s queue 100 mask src-ip 0xffffffff
${fw} pipe 2 config bw 500Kbit/s queue 100 mask dst-ip 0xffffffff
${fw} add pipe 1 ip from 192.168.0.0/24 to any via out rl0 #
${fw} add pipe 2 ip from any to 192.168.0.0/24 via in rl0 # можно без via, но результат тот же
${fw} add allow all from any to any via rl0
${fw} add allow all from any to any via fxp0
Последние 2 правила для теста (чтоб инет был :) )
В общем, при такой конфигурации в локалке интернет есть НО ничем не ужимается.
Т.е. могу качать на все 50Мбит/с что выделил провайдер.
ipfw show
00100 59343 31668927 allow ip from any to any via rl0
00200 55963 31483504 allow ip from any to any via fxp0
65535 0 0 deny ip from any to any
Как видите, нет pipe.
ipfw pipe show
00001: 550.000 Kbit/s 0 ms burst 0
q131073 100 sl. 0 flows (1 buckets) sched 65537 weight 0 lmax 0 pri 0 droptail
sched 65537 type FIFO flags 0x1 64 buckets 0 active
mask: 0x00 0xffffffff/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
00002: 500.000 Kbit/s 0 ms burst 0
q131074 100 sl. 0 flows (1 buckets) sched 65538 weight 0 lmax 0 pri 0 droptail
sched 65538 type FIFO flags 0x1 64 buckets 0 active
mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
---------------------------
Далее пробую немного другую конфигурацию:
${fw} pipe 1 config bw 5000Kbit/s queue 100
${fw} queue 1 config pipe 1 weight 50 queue 100 mask dst-addr 0xffffffff
${fw} queue 11 config pipe 1 weight 50 queue 100 mask src-addr 0xfffffff
${fw} add queue 1 ip from any to 192.168.0.0/24
${fw} add queue 11 ip from 192.168.0.0/24 to any
${fw} add allow all from any to any via rl0
${fw} add allow all from any to any via fxp0
ipfw show
00100 59 6968 queue 1 ip from any to 192.168.0.0/24
00200 732 39588 queue 11 ip from 192.168.0.0/24 to any
00300 546 36975 allow ip from any to any via rl0
00400 0 0 allow ip from any to any via fxp0
65535 0 0 deny ip from any to any
(На сколько я могу судить все эти правила пропускают пакеты, т.к. количество их меняется)
ipfw pipe show - ничего не показывает.
Интернет пропадает в локалке.
С этого сервера на комп из локалки:
ping 192.168.0.1
ping: sendto: No buffer space available
(c queue "игрался", но результата нет )
Я знаю, что где-то туплю, но не понимаю где именно. голова уже пухнет, и скорее всего, упускаю какую-то мелочь.
И вполне возможно, что чего-то не понимаю.
Буду очень благодарен за ответ и разъяснения.
На фрю сел только 3 недели назад и поэтому еще салага :)