Traskalata Posted July 24, 2012 Posted July 24, 2012 По порядку. Задача приотеризировать трафик на границе сети по 80, 8080 портам. Для этого собрать мост на Freebsd 9 и решить вытекающие из этого задачи. Но что у меня не очень получается. По порядку что я сделал 1. Собрал ядро включив опции options IPFIREWALL options IPFIREWALL_FORWARD options IPFIREWALL_VERBOSE options IPFIREWALL_DEFAULT_TO_ACCEPT options DUMMYNET options IPDIVERT options ALTQ options ALTQ_CBQ options ALTQ_RED options ALTQ_RIO options ALTQ_HFSC options ALTQ_CDNR options ALTQ_PRIQ options ALTQ_NOPCC options ALTQ_DEBUG device pf device pflog device pfsync #ALTQ на всякий случай 2. Внес изменения в /etc/rc.conf sshd_enable="YES" moused_enable="YES" powerd_enable="YES" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="NO" cloned_interfaces="bridge0" ifconfig_bridge0="addm re0 addm re1 up" ifconfig_re0="up" ifconfig_re1="up" firewall_enable="YES" firewall_script="/etc/ipfw.rules" firewall_logging="yes" dummynet_enable="yes" fsck_y_enable="yes" background_fsck="no" 3. Cформировал правила файрвола #!/bin/sh cmd="ipfw -q" lan=re0 # Net0 wan=re1 # Net1 ° urate=14000kbit/s drate=14000kbit/s gtcp="80,443,8080,8081" gtw=3 #high priority btw=2 # other tcp ipw=4 #udp $cmd flush $cmd pipe flush $cmd pipe 100 config bw $drate $cmd pipe 200 config bw $urate # WAN -> LAN $cmd queue 111 config weight $gtw queue 50 pipe 100 gred 0.002/5/15/0.05 mask dst-ip 0xffffffff $cmd queue 112 config weight $btw queue 50 pipe 100 gred 0.002/5/15/0.05 mask dst-ip 0xffffffff $cmd queue 113 config weight $ipw queue 50 pipe 100 mask dst-ip 0xffffffff # LAN -> WAN $cmd queue 211 config weight $gtw queue 50 pipe 200 gred 0.002/5/15/0.05 mask src-ip 0xffffffff $cmd queue 212 config weight $btw queue 50 pipe 200 gred 0.002/5/15/0.05 mask src-ip 0xffffffff $cmd queue 213 config weight $ipw queue 50 pipe 200 mask src-ip 0xffffffff # WAN -> LAN $cmd add queue 111 tcp from any to any $gtcp out xmit $lan $cmd add queue 111 tcp from any $gtcp to any out xmit $lan $cmd add queue 112 tcp from any to any out xmit $lan $cmd add queue 113 ip from any to any out xmit $lan # LAN -> WAN $cmd add queue 211 tcp from any to any $gtcp out xmit $wan $cmd add queue 211 tcp from any $gtcp to any out xmit $wan $cmd add queue 212 tcp from any to any out xmit $wan $cmd add queue 213 ip from any to any out xmit $wan Вроде бы все верно. Но теперь смотрю # ipfw pipe show 00200: 14.000 Mbit/s 0 ms burst 0 q131272 50 sl. 0 flows (1 buckets) sched 65736 weight 0 lmax 0 pri 0 droptail sched 65736 type FIFO flags 0x0 0 buckets 0 active 00100: 14.000 Mbit/s 0 ms burst 0 q131172 50 sl. 0 flows (1 buckets) sched 65636 weight 0 lmax 0 pri 0 droptail sched 65636 type FIFO flags 0x0 0 buckets 0 active А там пусто. Хотя связь есть. Подскажите где я что не учел? Вставить ник Quote
Ivan_83 Posted July 24, 2012 Posted July 24, 2012 ipfw - как следует из названия, фаервол уровня 3 и выше. Для L2 чуть похже был приделан костыль, который активируется через sysctl. То что вы объединили в бридж - означает что весь траф попёр между портами, в обход сетевого стёка фри, тк для неё это интерфейс без адреса л3 (л2 она вроде берёт у одного из физических или генерит). Я хз как сделать приоритезацию на прозрачном л2 для отдельных л4. Из вариантов могу предложить стать л3 и дальше как обычно... Можно поиграться с ng_ether + ng_bpf + ng_car. Для ALTQ нужно, по хорошему, зажимать полосу ниже имеющейся, чтобы иметь возможность пропускать что то приоритетно, и с длинами очередей там нужно играть. Вставить ник Quote
Traskalata Posted July 24, 2012 Author Posted July 24, 2012 ipfw - как следует из названия, фаервол уровня 3 и выше. Для L2 чуть похже был приделан костыль, который активируется через sysctl. То что вы объединили в бридж - означает что весь траф попёр между портами, в обход сетевого стёка фри, тк для неё это интерфейс без адреса л3 (л2 она вроде берёт у одного из физических или генерит). Я хз как сделать приоритезацию на прозрачном л2 для отдельных л4. Из вариантов могу предложить стать л3 и дальше как обычно... Можно поиграться с ng_ether + ng_bpf + ng_car. Для ALTQ нужно, по хорошему, зажимать полосу ниже имеющейся, чтобы иметь возможность пропускать что то приоритетно, и с длинами очередей там нужно играть. Ну так вот я открыл файл /etc/sysctl.conf и добавил туда net.inet.ip.fw.verbose=1 net.inet.ip.fw.verbose_limit=5 net.link.bridge.ipfw=1 net.inet.ip.dummynet.hash_size=1024 net.inet.ip.fw.dyn_buckets=1024 разве этого не достаточно? Вставить ник Quote
Traskalata Posted July 24, 2012 Author Posted July 24, 2012 RTFM. Я не спец по ipfw... а спецов здесь нет ? :) Вставить ник Quote
Ilya Evseev Posted July 24, 2012 Posted July 24, 2012 Вы лучше сделайте FreeBSD роутером и всё нормально настройте. С мостом в данном случае возни будет больше. Он действительно необходим? Вставить ник Quote
Traskalata Posted July 25, 2012 Author Posted July 25, 2012 Вы лучше сделайте FreeBSD роутером и всё нормально настройте. С мостом в данном случае возни будет больше. Он действительно необходим? но он у меня должен стоять как щейпер на общий канал между роутером смотрящим в Интернет и самим Интернетом. BGP у меня нет и провайдер верхнего уровня дает все /29. Если настрою как роутер часть адресов нужно будет использовать верно? Вставить ник Quote
Ilya Evseev Posted July 25, 2012 Posted July 25, 2012 но он у меня должен стоять как щейпер на общий канал между роутером смотрящим в Интернет и самим Интернетом. Если есть FreeBSD, зачем ещё отдельный роутер? Вставить ник Quote
kapa Posted July 25, 2012 Posted July 25, 2012 Когда-то игрались так: $IPFW pipe 23 config bw 10444Kbit/s mask dst-ip 0xffffffff $IPFW pipe 24 config bw 10444Kbit/s mask src-ip 0xffffffff ########pipe 24 $IPFW sched 24 config type QFQ mask src-ip 0xffffff00 $IPFW queue 241 config sched 24 weight 10 $IPFW queue 242 config sched 24 weight 8 $IPFW queue 243 config sched 24 weight 4 $IPFW queue 244 config sched 24 weight 1 $IPFW add queue 241 ip from table\(101\) to any via igb1 out proto udp dst-port 5060 $IPFW add queue 242 ip from table\(101\) to any via igb1 out proto tcp dst-port 80,443,8080 $IPFW add queue 243 ip from table\(101\) to any via igb1 out proto tcp dst-port 5223, 2009, 2106, 3724, 6112, 6881-6999, 7777, 27000-27050, 42292 $IPFW add queue 243 ip from table\(101\) to any via igb1 out proto udp dst-port 53, 5223, 3478, 3479, 3658, 1200, 5000-5009, 6112-6119, 6881-6999, 7777, 7788, 7787, 20500, 20510, 27000-27050, 27900, 28960 $IPFW add queue 243 ip from table\(101\) to any via igb1 out proto icmp $IPFW add queue 244 ip from table\(101\) to any via igb1 out ########pipe 23 $IPFW sched 23 config type QFQ mask dst-ip 0xffffff00 $IPFW queue 231 config sched 23 weight 10 $IPFW queue 232 config sched 23 weight 8 $IPFW queue 233 config sched 23 weight 4 $IPFW queue 234 config sched 23 weight 1 $IPFW add queue 231 ip from any to table\(100\) via igb0 out proto udp src-port 5060 $IPFW add queue 232 ip from any to table\(100\) via igb0 out proto tcp src-port 80,443,8080 $IPFW add queue 233 ip from any to table\(100\) via igb0 out proto tcp src-port 5223, 2009, 2106, 3724, 6112, 6881-6999, 7777, 27000-27050, 42292 $IPFW add queue 233 ip from any to table\(100\) via igb0 out proto udp src-port 53, 5223, 3478, 3479, 3658, 1200, 5000-5009, 6112-6119, 6881-6999, 7777, 7788, 7787, 20500, 20510, 27000-27050, 27900, 28960 $IPFW add queue 233 ip from any to table\(100\) via igb0 out proto icmp $IPFW add queue 234 ip from any to table\(100\) via igb0 out Вставить ник Quote
Traskalata Posted July 25, 2012 Author Posted July 25, 2012 Когда-то игрались так: $IPFW pipe 23 config bw 10444Kbit/s mask dst-ip 0xffffffff $IPFW pipe 24 config bw 10444Kbit/s mask src-ip 0xffffffff ########pipe 24 $IPFW sched 24 config type QFQ mask src-ip 0xffffff00 $IPFW queue 241 config sched 24 weight 10 $IPFW queue 242 config sched 24 weight 8 $IPFW queue 243 config sched 24 weight 4 $IPFW queue 244 config sched 24 weight 1 $IPFW add queue 241 ip from table\(101\) to any via igb1 out proto udp dst-port 5060 $IPFW add queue 242 ip from table\(101\) to any via igb1 out proto tcp dst-port 80,443,8080 $IPFW add queue 243 ip from table\(101\) to any via igb1 out proto tcp dst-port 5223, 2009, 2106, 3724, 6112, 6881-6999, 7777, 27000-27050, 42292 $IPFW add queue 243 ip from table\(101\) to any via igb1 out proto udp dst-port 53, 5223, 3478, 3479, 3658, 1200, 5000-5009, 6112-6119, 6881-6999, 7777, 7788, 7787, 20500, 20510, 27000-27050, 27900, 28960 $IPFW add queue 243 ip from table\(101\) to any via igb1 out proto icmp $IPFW add queue 244 ip from table\(101\) to any via igb1 out ########pipe 23 $IPFW sched 23 config type QFQ mask dst-ip 0xffffff00 $IPFW queue 231 config sched 23 weight 10 $IPFW queue 232 config sched 23 weight 8 $IPFW queue 233 config sched 23 weight 4 $IPFW queue 234 config sched 23 weight 1 $IPFW add queue 231 ip from any to table\(100\) via igb0 out proto udp src-port 5060 $IPFW add queue 232 ip from any to table\(100\) via igb0 out proto tcp src-port 80,443,8080 $IPFW add queue 233 ip from any to table\(100\) via igb0 out proto tcp src-port 5223, 2009, 2106, 3724, 6112, 6881-6999, 7777, 27000-27050, 42292 $IPFW add queue 233 ip from any to table\(100\) via igb0 out proto udp src-port 53, 5223, 3478, 3479, 3658, 1200, 5000-5009, 6112-6119, 6881-6999, 7777, 7788, 7787, 20500, 20510, 27000-27050, 27900, 28960 $IPFW add queue 233 ip from any to table\(100\) via igb0 out proto icmp $IPFW add queue 234 ip from any to table\(100\) via igb0 out А как включить работу IPFW на интерфейсах моста т.е. есть bridge0 в его составе re0 и re1 ? Вставить ник Quote
snark Posted August 22, 2012 Posted August 22, 2012 (edited) net.link.bridge.pfil_onlyip net.link.bridge.pfil_member UPD: Случайно наткнулся на пост, который автору стоит прочесть. Edited August 22, 2012 by snark Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.