Здраствуйте, возникла проблема с брандмауэром Packet Filter. Маршрутизатор работает под управлением FreeBSD 5.5, интернет приходит через ADSL модем, посредством PPPoE соединения. Изначально NAT разрешен в ppp.conf и фильтруется с помощью выше упомянутого брандмауэра.Так как используется асинхронная линия, изначально решил настроить приоритезацию исходящего траффика, но в последствии, пришлось добавить ограничение полосы пропускания для каждого пользователя с индивидуальным приоритетом. Всё работает хорошо, хотолось-бы ещё лучше, из-за этого решил, так-же поступить и с приходящим траффиком, и сражу напоролся на грабли. Ранее читал, что PF, а именно ALTQ не поддерживает входящий траффик, но не придавал этому особого значение, но перепробовал большое колличество способов у меня так ничего и не вышло, решил заморозить проэкт. Сейчас хочу исправить данное положение с вашей помощью! Использовать дополнительно другой брандмауэр не охото...
Вот мой отрывок кода:
# ------------------------------------------------------------------ #
altq on tun0 cbq bandwidth 4830Kb queue { INET, INET_IN, INET_OUT }
queue INET cbq(default)
queue INET_IN bandwidth 4080Kb \
{ IP1_IN, IP2_IN }
queue IP1_IN bandwidth 800Kb cbq(borrow)
queue IP2_IN bandwidth 800Kb cbq(borrow)
queue INET_OUT bandwidth 750Kb \
{ IP1_OUT, IP2_OUT }
queue IP1_OUT bandwidth 150Kb cbq(borrow) \
{ ENT_IP1_OUT, WWW_IP1_OUT, DNS_IP1_OUT, ACK_IP1_OUT }
queue ENT_IP1_OUT priority 4 cbq(red, borrow)
queue WWW_IP1_OUT priority 5 cbq(red, borrow)
queue DNS_IP1_OUT priority 6 cbq(borrow)
queue ACK_IP1_OUT priority 7 cbq(borrow)
queue IP2_OUT bandwidth 150Kb cbq(borrow) \
{ ENT_IP2_OUT, WWW_IP2_OUT, DNS_IP2_OUT, ACK_IP2_OUT }
queue ENT_IP2_OUT priority 4 cbq(red, borrow)
queue WWW_IP2_OUT priority 5 cbq(red, borrow)
queue DNS_IP2_OUT priority 6 cbq(borrow)
queue ACK_IP2_OUT priority 7 cbq(borrow)
# ------------------------------------------------------------------ #
block in all
block out all
pass in on lo0
pass out on lo0
pass in quick on xl0 from $netmask to (xl0)
pass out quick on xl0 from (xl0) to $netmask
pass in quick inet proto icmp
#pass in quick on tun0 from any
# ------------------------------------------------------------------ #
pass out quick on tun0 inet proto tcp from $ip1 to any \
port $ent_ports keep state queue ENT_IP1_OUT
pass out quick on tun0 inet proto tcp from $ip1 to any \
port $www_ports keep state queue WWW_IP1_OUT
pass out quick on tun0 inet proto { tcp udp } from $ip1 to any \
port domain keep state queue DNS_IP1_OUT
pass out quick on tun0 proto tcp from $ip1 to any flags S/SA \
modulate state queue ACK_IP1_OUT
pass out quick on tun0 inet proto icmp from $ip1 to any
pass in quick on tun0 from any to $ip1 queue IP1_IN
# ------------------------------------------------------------------ #
pass out quick on tun0 proto tcp from $ip2 to any flags S/SA \
modulate state queue ACK_IP2_OUT
pass out quick on tun0 inet proto { tcp udp } from $ip2 \
to any port domain keep state queue DNS_IP2_OUT
pass out quick on tun0 inet proto tcp from $ip2 to any \
port $www_ports keep state queue WWW_IP2_OUT
pass out quick on tun0 inet proto tcp from $ip2 to any \
port $ent_ports keep state queue ENT_IP2_OUT
pass out quick on tun0 inet proto icmp from $ip2 to any
pass in quick on tun0 from any to $ip2 queue IP2_IN
# ------------------------------------------------------------------ #
Дополнительные вопросы:
1. Возможно заставить PF и ALTQ работать с входящим траффиком?
2. Поделитесь "секретом", какой траффик лучше приоритизировать?
3. В Linux`е мне понравился layer-7, может есть, что-то подобное в FreeBSD?
Возможно посредством PF организовать NAT на виртуальный туннель?
4. Если физически организован доступ в интернет, через такую последовательность rl0 <---> ed0 <---> tun0, значил это, что если назначить правило ed0, но разрешиль полный доступ для rl0 и tun0, посылаемый траффик из rl0 в tun0 не пройдёт? (В iptables вроде так, но в PF этого не заметил, хотел дважды фильтровать траффик, но ничего не вышло)
Спасибо за внимание!