Уважаемые знатоки и гуру, я знаю что подобная тема не раз обсуждалась и обсасывалась. Но при том, что я перечитал не один десяток статей по данной теме, я все-равно не могу справиться с задачей:
Есть сервер FreeBSD 8.2
Использую фаервол ipfw. (не советуйте, пожалуйста другой, т.к. задание организовать именно на этом).
Необходимо зажать трафик для локальной сети.
В качестве NAT используется ipnatЯдро:
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_FORWARD
options IPDIVERT
options DUMMYNETkldstat
Id Refs Address Size Name
1 3 0xc0400000 ac7748 kernel
2 1 0xc4597000 35000 ipl.korc.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 недели назад и поэтому еще салага :)
> Уважаемые знатоки и гуру, я знаю что подобная тема не раз обсуждалась
> и обсасывалась. Но при том, что я перечитал не один десяток
> статей по данной теме, я все-равно не могу справиться с задачей:${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, но результат тот же================================================================
/sbin/ipfw pipe 1 config bw 550Kbit/s mask dst-ip 0xffffffff
/sbin/ipfw pipe 2 config bw 500Kbit/s mask dst-ip 0xffffffff
/sbin/ipfw add pipe 1 all from any to 192.168.0.0/24 via $in
/sbin/ipfw add pipe 2 all from 192.168.0.0/24 to any via $in
===================================
$in внешний ифейс
и будит тебе счастье
>[оверквотинг удален]
>> ${fw} add pipe 2 ip from any to 192.168.0.0/24 via in
>> rl0 # можно без via, но результат тот же
> ================================================================
> /sbin/ipfw pipe 1 config bw 550Kbit/s mask dst-ip 0xffffffff
> /sbin/ipfw pipe 2 config bw 500Kbit/s mask dst-ip 0xffffffff
> /sbin/ipfw add pipe 1 all from any to 192.168.0.0/24 via $in
> /sbin/ipfw add pipe 2 all from 192.168.0.0/24 to any via $in
> ===================================
> $in внешний ифейс
> и будит тебе счастье==============================
ой $in внутрений ифейс
>[оверквотинг удален]
>> ${fw} add pipe 2 ip from any to 192.168.0.0/24 via in
>> rl0 # можно без via, но результат тот же
> ================================================================
> /sbin/ipfw pipe 1 config bw 550Kbit/s mask dst-ip 0xffffffff
> /sbin/ipfw pipe 2 config bw 500Kbit/s mask dst-ip 0xffffffff
> /sbin/ipfw add pipe 1 all from any to 192.168.0.0/24 via $in
> /sbin/ipfw add pipe 2 all from 192.168.0.0/24 to any via $in
> ===================================
> $in внешний ифейс
> и будит тебе счастьеБольшое спасибо. Проверю в обед с локальной сети, а пока на сервере прописал и получил:
ipfw pipe show
00001: 550.000 Kbit/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 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
00002: 500.000 Kbit/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 0x1 64 buckets 4 active
mask: 0x00 0x00000000/0x0000 -> 0xffffffff/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
2 ip 0.0.0.0/0 80.243.157.229/0 1 52 0 0 0
138 ip 0.0.0.0/0 2.60.2.242/0 1 52 0 0 0
24 ip 0.0.0.0/0 8.8.8.8/0 1 61 0 0 0
153 ip 0.0.0.0/0 93.80.235.56/0 1 52 0 0 0Большое спасибо:))))
Произошло для меня не совсем понятное...
при вкючении pipe я по TeamViewer перестаю видеть компы из локалки. выключаю - спокойно захожу... Есть ли у кого мысли?
> Произошло для меня не совсем понятное...
> при вкючении pipe я по TeamViewer перестаю видеть компы из локалки. выключаю
> - спокойно захожу... Есть ли у кого мысли?Все заработало. Спасибо за помощь :)
> Все заработало. Спасибо за помощь :)что сделал то та же проблема, только не заработало
>> Все заработало. Спасибо за помощь :)
> что сделал то та же проблема, только не заработалоnet.inet.ip.fw.one_pass - логическая переменная. При ее установки в 0 пакет, выходящий из dummynet, продолжит свое путешествие по правилам firewall. В противном случае pipe действует, как allow. Значение по умолчанию - 1
у меня сейчас:
sysctl -a | grep one_pass
net.inet.ip.fw.one_pass: 0Поробуйте так.