Страница 1 из 1
Помогите с написанием правил PF (ALTQ)
Добавлено: 2010-08-23 17:22:46
Dynamic
Добрый вечер! Ситуация следующая. Есть сервер с 3 сетевыми картами.
К
sk0 (172.16.1.1/16) подсоединен первый компьютер (172.16.1.2/16).
К
sk (10.0.0.1/8) подсоединен второй компьютер (10.0.0.2/8) .
К
ste0 (192.168.1.2/24) подсоединен
ADSL модем, настроен в режиме моста(bridge).
PPPoE сессия поднимется на
FreeBSD посредством
mpd5. За первым компом часто играют в онлайн игру, а на втором смотрят видео на
youtube (чем мешают играть в игру). И решил я сделать динамическое деление пропускной полосы, между двумя компами. Прочитал несколько статей в интернете.
Все сводится примерно к такому:
Код: Выделить всё
altq on ng0 cbq bandwidth 100Mb queue { inet_in, default_in }
queue inet_in bandwidth 4Mb { comp1_in, comp2_in }
queue comp1_in bandwidth 50% cbq(red, borrow)
queue comp2_in bandwidth 50% cbq(red, borrow)
queue default_in bandwidth 96% cbq(default)
altq on sk0 cbq bandwidth 100Mb queue { inet_out, default_out }
queue inet_out bandwidth 1Mb { comp1_out, comp2_out }
queue comp1_out bandwidth 50% cbq(red, borrow)
queue comp2_out bandwidth 50% cbq(red, borrow)
queue default_out bandwidth 99% cbq(default)
Входящий трафик шейпится на внешнем интерфейсе, а исходящий на внутреннем. Дальше мы распихаем трафик от разных компов в их очереди. Но данный вариант мне не подходит тем, что в примере пользователи сидят на одной сетевой(
sk0), а у меня на двоих(
sk0 и sk1). Одним словом мне нужно шейпить трафик как исходящий так и входящий на одном внешнем интерфейсе(
ng0). Придумал это реализовать таким способом :
Код: Выделить всё
altq on ng0 cbq bandwidth 100Mb queue { inet_out, inet_in, default_out }
queue inet_out bandwidth 1Mb { comp1_out, comp2_out }
queue comp1_out bandwidth 50% cbq(red, borrow)
queue comp2_out bandwidth 50% cbq(red, borrow)
queue inet_in bandwidth 4Mb { comp1_in, comp2_in }
queue comp1_in bandwidth 50% cbq(red, borrow)
queue comp2_in bandwidth 50% cbq(red, borrow)
queue default_out bandwidth 95% cbq(default)
Правильно, или есть варианты получше?
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2010-08-24 21:59:25
Bacek_92
А оно работает? А если работает значит не трожь )) (с) Правило Админа
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2010-08-25 3:15:38
Dynamic
Bacek_92 писал(а):А оно работает? А если работает значит не трожь )) (с) Правило Админа
Не работает, это были догадки
После нескольких часов работы с гуглом, понял почему в примерах приходящий трафик из интернета режут на интерфейсе, который смотрит в локальную сеть.
ALTQ умеет резать только исходящий трафик. У меня пользователи подключены физически к разным сетевым картам, поэтому я не могу сделать динамический шейпинг входящего трафика. Есть конечно вариант подключить эти два компьютера через свитч, а его в сервер. Тогда даже освобождается одна сетевая карта. Но хотел узнать следующие:
В
FreeBSD есть возможность создать промежуточный интерфейс, в который мы сможем запихать приходящий на
ng0 интерфейс трафик, и проводить на нем шейпинг с помощью
ALTQ?
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2010-08-31 4:12:57
BlackCat
Dynamic писал(а):В FreeBSD есть возможность создать промежуточный интерфейс, в который мы сможем запихать приходящий на ng0 интерфейс трафик, и проводить на нем шейпинг с помощью ALTQ?
Объедените ваши внутренние сетевые карты в мост, это и будет ваша промежуточная сетевая карта. Да ещё и комутатор (свитч) в некотором смысле.
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2010-09-21 13:02:32
Gauss
Прочитал Вашу статью о шейпинге, почитал мануал на оффсайте про pf. Хорошая статья, но:
есть грабли, которые бьют меня уже 4 дня
Имеется:
локалка – 10.0.0.0/8
VPN клиенты – 192.168.100.0/24
Канал в инет 16 Mbit/s
Нужно поделить его между пользователями локалки поровну,(канал в инет создается посредством подключение к вышестоящему интернет провайдеру тоже через VPN по локалке посредством mpd5) но не выходит! Шейпил на локальном интерфейсе, как в статье и сказано.
Фишка в том,что весь траффик заворачивается на default queue и как бы я не старался, трафик не хочет идти на приписаные к локальым адресам пользоваетелей очереди
Вот конфиг, если что то не правильно, подправте меня пожалуйста, а то хочется уже мне выспатся, поскольку и днем и ночью рою форумы по этой причине и безрезультатно
int_if=”em0?
ext_if=”ng0?
inet_users=”192.168.100.0/24?
allows=”{ 10.112.0.57 10.112.0.59 10.112.6.2 10.117.4.172 10.112.6.27 10.112.8.55 }”
admin=”10.112.6.2?
olya=”10.117.4.172?
test=”{10.112.0.57, 10.112.0.59}”
mig=”10.112.6.27?
localka=”10.0.0.0/8?
scrub in all
altq on $int_if cbq bandwidth 100Mb queue { inet_in, local }
queue local bandwidth 60Mb cbq (default)
queue inet_in bandwidth 40Mb qlimit 1000 cbq {admin, olya, test, mig}
queue admin bandwidth 512Kb cbq(red)
queue olya bandwidth 1.5Mb cbq(red)
queue mig bandwidth 1.5Mb cbq(red)
queue test bandwidth 1.5Mb cbq(red)
nat on ng0 from $inet_users to any -> $ext_if
nat on em0 from any to $ext_if -> $int_if
block in on $int_if all
block in on $ext_if all
pass out on $int_if from $int_if to $localka
pass out on $ext_if all
pass out quick on $int_if from !$localka to $admin queue admin no state
pass out quick on $int_if from !$localka to $mig queue mig no state
pass out quick on $int_if from !$localka to $olya queue olya no state
pass out quick on $int_if from !$localka to $test queue test no state
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 18:46:58
mikie
Здравствуйте. Всех с наступившим НГ, удачи Вам и здоровья.
Сразу оговорюсь – это мой первый маршрутизатор на БСД , так что не судите строго за непонимание, возможно, прописных истин.
Есть тазик PII 350 МГц 256+256+128 ram + два интерфейса realtek 8129. На данный момент цель – сделать простой шлюз который бы пропускал все и всюду, а со временем корректировать правила PF и ALTQ. Для этого пересобирал ядро с поддержкой PF и ALTQ, заодно поубирал лишние на мой взгляд устройства. Ниже привожу конфиг ядра и настройки которые менялись.
Код: Выделить всё
aquila# uname -a
FreeBSD aquila.navi 8.3-RELEASE-p5 FreeBSD 8.3-RELEASE-p5 #0: Sat Dec 29 17:19:16 EET 2012 root@aquila.navi:/usr/obj/usr/src/sys/AQUILA i386
Привожу полный конфиг ядра, просмотрите, может где-то начудил по незнанию
Код: Выделить всё
aquila# cat /usr/src/sys/i386/conf/AQUILA
cpu I686_CPU
ident AQUILA
device pf
device pflog
#device pfsync
options ALTQ
options ALTQ_CBQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_CDNR
options ALTQ_PRIQ
#hints "AQUILA.hints" # Default places to look for devices.
#env "AQUILA.env"
options SCHED_ULE # ULE scheduler
options PREEMPTION # Enable kernel thread preemption
options INET # InterNETworking
options FFS # Berkeley Fast Filesystem
options SOFTUPDATES # Enable FFS soft updates support
options UFS_ACL # Support for access control lists
options UFS_DIRHASH # Improve performance on big directories
options UFS_GJOURNAL # Enable gjournal-based UFS journaling
options NFSCLIENT # Network Filesystem Client
options NFSSERVER # Network Filesystem Server
options NFSLOCKD # Network Lock Manager
options NFS_ROOT # NFS usable as /, requires NFSCLIENT
options CD9660 # ISO 9660 Filesystem
options PROCFS # Process filesystem (requires PSEUDOFS)
options PSEUDOFS # Pseudo-filesystem framework
options GEOM_PART_GPT # GUID Partition Tables.
options GEOM_LABEL # Provides labelization
options COMPAT_43TTY # BSD 4.3 TTY compat (sgtty)
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
options COMPAT_FREEBSD5 # Compatible with FreeBSD5
options COMPAT_FREEBSD6 # Compatible with FreeBSD6
options COMPAT_FREEBSD7 # Compatible with FreeBSD7
options SYSVSHM # SYSV-style shared memory
options SYSVMSG # SYSV-style message queues
options SYSVSEM # SYSV-style semaphores
options P1003_1B_SEMAPHORES # POSIX-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed.
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
options HWPMC_HOOKS # Necessary kernel hooks for hwpmc(4)
options MAC # TrustedBSD MAC Framework
#options KDTRACE_HOOKS # Kernel DTrace hooks
options INCLUDE_CONFIG_FILE # Include this file in kernel
options KDB # Kernel debugger related code
options KDB_TRACE # Print a stack trace for a panic
# To make an SMP kernel, the next two lines are needed
device apic # I/O APIC
# CPU frequency control
device cpufreq
# Bus support.
device acpi
device eisa
device pci
# Floppy drives
device fdc
# ATA and ATAPI devices
device ata
device atadisk # ATA disk drives
device ataraid # ATA RAID drives
device atapicd # ATAPI CDROM drives
device atapifd # ATAPI floppy drives
device atapist # ATAPI tape drives
options ATA_STATIC_ID # Static device numbering
# atkbdc0 controls both the keyboard and the PS/2 mouse
device atkbdc # AT keyboard controller
device atkbd # AT keyboard
device psm # PS/2 mouse
device vga # VGA video card driver
# syscons is the default console driver, resembling an SCO console
device sc
# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus # MII bus support
device rl # RealTek 8129/8139
# Pseudo devices.
device loop # Network loopback
device random # Entropy device
device ether # Ethernet support
device tun # Packet tunnel.
device pty # BSD-style compatibility pseudo ttys
device gif # IPv6 and IPv4 tunneling
# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device bpf # Berkeley packet filter
# USB support
options USB_DEBUG # enable debug msgs
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device usb # USB Bus (required)
настройки в /etc/rc.conf
Код: Выделить всё
aquila# cat /etc/rc.conf
#ifconfig_rl0="ether 00:22:b0:52:4e:ea DHCP"
ifconfig_rl1="inet 192.168.1.1 netmask 255.255.255.0"
hostname="aquila.navi"
named_enable="YES"
gateway_enable="YES"
sshd_enable="YES"
ifconfig_rl0="inet 192.168.0.100 netmask 255.255.255.0"
defaultrouter="192.168.0.1"
#keymap="ru.koi8-r"
#SysTune
clear_tmp_enable="YES"
background_fsck="NO"
#pf(packet filter)
pf_enable="YES"
pf_rules="/etc/pf.rules"
#pf_program="/sbin/pfctl"
#pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
#pflog_program="/sbin/pflog"
#pflog_flags=""
#pfsync_enable="NO"
#pfsync_syncdev=""
#pfsync_ifconfig=""
Настройки /etc/pf.rules
Код: Выделить всё
aquila# cat /etc/pf.rules
#ext_if="rl0"
#int_if="rl1"
#int_net="192.168.1.0/24"
icmp_types="{ echoreq, unreach }"
#set block-policy drop
#set state-policy if-bound
pass all
#pass out all keep state
#pass quick on lo0 all
pass inet proto icmp all icmp-type $icmp_types
#block all
#scrub all reassemble tcp fragment reassemble
Настройки /etc/namedb/named.conf
Менял только
listen-on { 127.0.0.1; };
на
listen-on { any; };
Код: Выделить всё
aquila# netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default aquila UGS 0 14 rl0
localhost link#4 UH 0 0 lo0
192.168.0.0 link#2 U 0 351 rl0
192.168.0.100 link#2 UHS 0 0 lo0
192.168.1.0 link#3 U 0 4 rl1
192.168.1.1 link#3 UHS 0 0 lo0
Примерная схема конфигурации:
Проблема в том, что со Шлюз BSD я пингую как внешнюю(Шлюз Win XP) так и внутреннюю(Win XP) сеть, а вот пинг с Win XP на Шлюз Win XP и наоборот не проходит. В итоге получаю сообщение вида:
При пинге из внутренней сети
Код: Выделить всё
C:\Documents and Settings\mikie>ping i.ua
Обмен пакетами с i.ua [91.198.36.14] по 32 байт:
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Выходит что ИП i.ua мы получаем, а вот пакеты обратно не доходят
При пинге из внешней сети
Код: Выделить всё
C:\Documents and Settings\mikie>ping 192.168.1.2
Обмен пакетами с 192.168.1.2 по 32 байт:
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 19:32:30
ыть
свинку надо еще научить маршрутизировать, надо в реестре там гднто разенабливать роутинг..
зачем она там? ставте уж серверные поделки дяди билли, если так хочется, 2003-ю, например..
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 19:44:44
mikie
ыть, дело в том что это временная конструкция, когда настрою шлюз на фри то он заменит шлюз на хрю и будет выходить в инет по DHCP, что и является главной целью этого мероприятия. такую конструкцию построил для того чтоб была возможность ходить на форум с вопросами и тестить шлюзБСД без лишних переключений и перестроек.
Суть вопроса остается - не проходит пинг через Шлюз БСД в обе стороны, подозреваю что мой косяк в правилах pf..
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 20:02:05
ыть
дык я и говорю
со свиньей сложно работать как с маршрутизатором..
во первых, свинушка знает про существование 192.168.1.0/24 сетки?
добавьте на ней маршрут
и я говорил уже, даже с маршрутом, свинка, по задумке дяди билли, не должна уметь маршрутизировать..
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 20:16:02
mikie
да что вы прицепились то к свинке, лучше прочтите вводные данные может я допустил там ошибку какую в настройках, если разбераетесь
а Шлюз на ХР к слову работает уже более 2х лет с ССProxy и в локалке висит от 3х компов и сетевой принтер все спокойно ходят в сеть и никаких проблем и шлюз БСД в данной конструкции тоже нормально ходит в сеть, а вот то что за ним не пингует ни Шлюз ХР ни интернет.
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 20:22:54
mikie
специально для
ыть маршруты для Шлюз ХР
Код: Выделить всё
C:\Documents and Settings\mikie>route print
===========================================================================
Список интерфейсов
0x1 ........................... MS TCP Loopback interface
0x3 ...00 02 44 23 0c 35 ...... Realtek RTL8029(AS) PCI Ethernet рфряЄхЁ - ?шэшя
юЁЄ яырэшЁют?шър яръхЄют
0x20002 ...00 22 b0 52 4e ea ...... VIA Rhine III Fast Ethernet Adapter - ?шэшяю
ЁЄ яырэшЁют?шър яръхЄют
===========================================================================
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 94.74.80.126 94.74.80.71 20
94.74.80.0 255.255.255.128 94.74.80.71 94.74.80.71 20
94.74.80.71 255.255.255.255 127.0.0.1 127.0.0.1 20
94.255.255.255 255.255.255.255 94.74.80.71 94.74.80.71 20
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.0.0 255.255.255.0 192.168.0.1 192.168.0.1 30
192.168.0.1 255.255.255.255 127.0.0.1 127.0.0.1 30
192.168.0.255 255.255.255.255 192.168.0.1 192.168.0.1 30
224.0.0.0 240.0.0.0 94.74.80.71 94.74.80.71 20
224.0.0.0 240.0.0.0 192.168.0.1 192.168.0.1 30
255.255.255.255 255.255.255.255 94.74.80.71 94.74.80.71 1
255.255.255.255 255.255.255.255 192.168.0.1 192.168.0.1 1
Основной шлюз: 94.74.80.126
===========================================================================
Постоянные маршруты:
Отсутствует
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 20:40:22
lordlev
Может я и не прав, но не вижу в приведенных конфигах упоминания о nat-е ....
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 20:46:27
mikie
Вы правы, нат отсутствует, а что без ната подобная конструкция не будет работать?
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 20:56:29
lordlev
шлюз на фре получает запрос от 1,2, передает его 0,1 не модифицируя (фря-то знает про все сетки). 0,1 получает запрос и долго думает куда его вернуть. но не придумывает

Вариантов 2 - или объяснить 0,1 куда отдавать запросы от сети 0.х или поднимать нат. Это не так уж и больно

Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 21:05:54
mikie
lordlev, спасибо, добавил соответствующий маршрут в Шлюз ХР, теперь пингуется в обе стороны.
вопрос номер 2 когда Шлюз БСД заменит Шлюз ХР и будет выходить в инет напрямую по DHCP я без ната уже не обойдусь?
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 21:17:50
ыть
mikie писал(а):специально для ыть маршруты для Шлюз ХР
у вас нет обратного маршрута в первую сетку
mikie писал(а):При пинге из внешней сети
КОД: ВЫДЕЛИТЬ ВСЁ
C:\Documents and Settings\mikie>ping 192.168.1.2
Обмен пакетами с 192.168.1.2 по 32 байт:
Превышен интервал ожидания для запроса.
сделайте трасерт 192.168.1.2
дайка угодаю где будим искать хост
в инете?
mikie писал(а):Вы правы, нат отсутствует, а что без ната подобная конструкция не будет работать?
у вас инет раздается через виндопроксю
отключите ее, добейтесь, чтоб инет приходил в локалку без прокси (нат, роутинг)
должно заработать
но это черезсрачное решение
хипи не для этого придумывалась
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 21:27:19
mikie
ыть, вам тоже спасибо, добавил соответствующий маршрут в Шлюз ХР - пингуется в обе сторони и изнутря инет тоже пингуется, так что вы были правы, простите за дерзост)
повторюсь еще - если шлюз БСД станет вместо Шлюз ХР то без ната мне уже не обойтись?
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-01 21:35:25
ыть
да не за что
что и требовалось доказать
ыть писал(а):отключите ее, добейтесь, чтоб инет приходил в локалку без прокси (нат, роутинг)
к тому, что хрюшка никакой не роутер как вы думали
mikie писал(а):повторюсь еще - если шлюз БСД станет вместо Шлюз ХР то без ната мне уже не обойтись?
не обойтись
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-02 0:06:44
mikie
Спасибо
ыть и
lordlev за помощ, все заработало после поднятия nat-а
уже сижу в инете через свой первый шлюз на FreeBSD
схема подключения на рисунке:
далее, как бы в завершение, хочу предложить работающий конфиг своего шлюза
первое что нужно сделать - пересобрать ядро включив в него следующие параметры
а если требуется шейпинг то и:
Код: Выделить всё
options ALTQ
options ALTQ_CBQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_CDNR
options ALTQ_PRIQ
Настройки /etc/rc.conf
Код: Выделить всё
$# cat /etc/rc.conf
ifconfig_rl0=" DHCP"
ifconfig_rl1="inet 192.168.0.1 netmask 255.255.255.0"
hostname="yourhost"
named_enable="YES"
gateway_enable="YES"
#NAT
natd_enable=”YES”
natd_interface="rl0"
#PF
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
Настройки /etc/pf.rules простейшие правила которые разрешают весь трафик в любом направлении и натят его на внешнем интерфейсе
Код: Выделить всё
$# cat /etc/pf.conf
ext_if="rl0"
int_if="rl1"
int_net="192.168.0.0/24"
nat on $ext_if from $int_net to any -> ($ext_if)
pass all
Настройки /etc/namedb/named.conf
нужно изменить строку
на
Re: Помогите с написанием правил PF (ALTQ)
Добавлено: 2013-01-02 7:59:01
lordlev
Да не за что ....
Конфиг ... да "ниачом" ... Уж извини, без обид (даже для такого нуба как я). Даже в "ручной книге" он и то интересней

Опять-же, могу ошибаться (а я сначала погуглил

, с pf-ом никак не дойдут руки\ноги разобраться, НО
Как я понимаю, у тебя сейчас подняты 2 nat-a: демон natd и еще один через pf. Убери natd, чичас не модно

Named. А зачем он тебе на ВСЕХ интерфейсах? 127.0.0.1 и 192.168.0.1 и все.
Ну уж прикручивай ALTQ, а то в ядре есть, а не задействован.