Использование pf для фильтрации пакетов и dummynet ipfw для ограничения пропускной способности одновременно
Я хотел бы спросить, нормально ли использовать pf для всей фильтрации пакетов (включая использование altq для формирования трафика) и dummynet ipfw для ограничения пропускной способности определенных IP-адресов или подсетей одновременно.
Я использую FreeBSD 10, и я не смог найти однозначного ответа на этот вопрос. Поиск в Google возвращает такие результаты как:
- Оно работает
- Не работает
- Может работать, но это не стабильно и не рекомендуется
- Он может работать до тех пор, пока вы загружаете модули ядра в правильном порядке
- Раньше он работал, но в последних версиях FreeBSD он не работает
- Вы можете заставить его работать, если вы используете патч от pfsense
Затем есть упоминание о том, что этот патч мог быть объединен с FreeBSD, но я не могу его найти.
Одна определенная вещь состоит в том, что pfsense использует оба межсетевых экрана одновременно, поэтому вопрос в том, возможно ли это в стандартной версии FreeBSD 10 (и где можно получить патч, если он все еще необходим).
Для справки вот пример того, что у меня есть сейчас и как я загружаю вещи
/etc/rc.conf
ifconfig_vtnet0="inet 80.224.45.100 netmask 255.255.255.0 -rxcsum -txcsum"
ifconfig_vtnet1="inet 10.20.20.1 netmask 255.255.255.0 -rxcsum -txcsum"
defaultrouter="80.224.45.1"
gateway_enable="YES"
firewall_enable="YES"
firewall_script="/etc/ipfw.rules"
pf_enable="YES"
pf_rules="/etc/pf.conf"
/etc/pf.conf
WAN1="vtnet0"
LAN1="vtnet1"
set skip on lo0
set block-policy return
scrub on $WAN1 all fragment reassemble
scrub on $LAN1 all fragment reassemble
altq on $WAN1 hfsc bandwidth 30Mb queue { q_ssh, q_default }
queue q_ssh bandwidth 10% priority 2 hfsc (upperlimit 99%)
queue q_default bandwidth 90% priority 1 hfsc (default upperlimit 99%)
nat on $WAN1 from $LAN1:network to any -> ($WAN1)
block in all
block out all
antispoof quick for $WAN1
antispoof quick for $LAN1
pass in on $WAN1 inet proto icmp from any to $WAN1 keep state
pass in on $WAN1 proto tcp from any to $WAN1 port www
pass in on $WAN1 proto tcp from any to $WAN1 port ssh
pass out quick on $WAN1 proto tcp from $WAN1 to any port ssh queue q_ssh keep state
pass out on $WAN1 keep state
pass in on $LAN1 from $LAN1:network to any keep state
/etc/ipfw.rules
ipfw -q -f flush
ipfw -q add 65534 allow all from any to any
ipfw -q pipe 1 config bw 2048KBit/s
ipfw -q pipe 2 config bw 2048KBit/s
ipfw -q add pipe 1 ip from 10.20.20.4 to any via vtnet1 in
ipfw -q add pipe 2 ip from any to 10.20.20.4 via vtnet1 out
1 ответ
Официально их нельзя смешивать. Неофициально различные заклинания и жертвы могут привести к рабочей, хотя и ненадежной конфигурации. В любом случае это просто не рекомендуется.
Кроме того, почему бы просто не использовать один или другой? Я предполагаю, что вы хотите, чтобы dummynet сделал некоторые ограничения полосы пропускания для каждой конечной точки, если не PF, возможно, все, что вам нужно. Точно так же IPFW может делать почти все, что может делать PF, с несколькими заметно отличающимися алгоритмами планирования и меньшим пространством правил.