Jump to content
Калькуляторы

Приотеризация на 80, 8080 порты на базе IPFW на Freebbsd 9 что делаю не так.

По порядку.

Задача приотеризировать трафик на границе сети по 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

 

А там пусто. Хотя связь есть.

 

Подскажите где я что не учел?

Share this post


Link to post
Share on other sites

ipfw - как следует из названия, фаервол уровня 3 и выше. Для L2 чуть похже был приделан костыль, который активируется через sysctl.

То что вы объединили в бридж - означает что весь траф попёр между портами, в обход сетевого стёка фри, тк для неё это интерфейс без адреса л3 (л2 она вроде берёт у одного из физических или генерит).

 

Я хз как сделать приоритезацию на прозрачном л2 для отдельных л4.

Из вариантов могу предложить стать л3 и дальше как обычно...

Можно поиграться с ng_ether + ng_bpf + ng_car.

 

Для ALTQ нужно, по хорошему, зажимать полосу ниже имеющейся, чтобы иметь возможность пропускать что то приоритетно, и с длинами очередей там нужно играть.

Share this post


Link to post
Share on other sites

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

 

разве этого не достаточно?

Share this post


Link to post
Share on other sites

Вы лучше сделайте FreeBSD роутером и всё нормально настройте.

С мостом в данном случае возни будет больше.

Он действительно необходим?

Share this post


Link to post
Share on other sites

Вы лучше сделайте FreeBSD роутером и всё нормально настройте.

С мостом в данном случае возни будет больше.

Он действительно необходим?

но он у меня должен стоять как щейпер на общий канал между роутером смотрящим в Интернет и самим Интернетом.

BGP у меня нет и провайдер верхнего уровня дает все /29. Если настрою как роутер часть адресов нужно будет использовать верно?

Share this post


Link to post
Share on other sites

но он у меня должен стоять как щейпер на общий канал между роутером смотрящим в Интернет и самим Интернетом.

Если есть FreeBSD, зачем ещё отдельный роутер?

Share this post


Link to post
Share on other sites

Когда-то игрались так:

 

$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

Share this post


Link to post
Share on other sites

Когда-то игрались так:

 

$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 ?

Share this post


Link to post
Share on other sites

net.link.bridge.pfil_onlyip

net.link.bridge.pfil_member

 

UPD: Случайно наткнулся на пост, который автору стоит прочесть.

Edited by snark

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this