Нужны 100% рабочие правила, поэтому прошу вашей помощи!! Буду очень признателен.
DUMMYNET через ядро!
За основу взял эту статью: клац
Со скриптом все понятно, прощу помощи именно с порядком правил, чтобы я мог вставить их и у меня все работало, а именно:
39999 - так же оставить или же под мои правила надо что то другое выставить?add skipto 39999 ip from any to any tcpflags ack iplen 0-128
тут тоже самое, какой номер правилу лучше дать?add 40000 check-state
это оставлять?add allow ip from any to any via lo0
мой /etc/rc.conf :
Код: Выделить всё
gateway_enable="YES"
ifconfig_em0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_re0="inet 192.168.0.1 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
firewall_enable="YES"
firewall_type="/etc/firewall"
Код: Выделить всё
net.inet.ip.fw.one_pass=1
Код: Выделить всё
# разрешаем все через интерфейс локальной сети
add 1040 allow ip from any to any via re0
# боимся непонятного
add 1050 deny ip from any to 192.168.0.0/24 in recv em0
add 1060 deny ip from 192.168.0.0/24 to any in recv em0
add 1070 deny ip from any to 172.16.0.0/12 in recv em0
add 1080 deny ip from 172.16.0.0/12 to any in recv em0
add 1090 deny ip from any to 10.0.0.0/8 in recv em0
add 10100 deny ip from 10.0.0.0/8 to any in recv em0
add 10110 deny ip from any to 169.254.0.0/16 in recv em0
add 10120 deny ip from 169.254.0.0/16 to any in recv em0
# настройка ната.
# опции переноса строк "\" надо убрать все должно быть в одну строчку
# опции redirect_port приведены для примера - как делать "проброс портов"
nat 1 config log if em0 reset same_ports deny_in
# redirect_port tcp 1.2.3.4:6881 6881 \
# redirect_port udp 1.2.3.4:4444 4444 \
# redirect_port tcp 192.168.1.24:25 25
# заварачиваем все что проходит через внешний интерфейс в нат
add 50000 nat 1 ip from any to any via em0
# SSH
add 30230 allow tcp from any to 192.168.1.3 dst-port 22 via em0
add 30240 allow tcp from 192.168.1.3 to any src-port 22 via em0
# боимся непонятного
add 65534 deny all from any to any
Dummynet:
Код: Выделить всё
# DUMMYNET
# учтите - чтобы пакеты не выпадали на трубе из файрволла (типа,
# как на разрешающем правиле) надо поставить переменную sysctl
# net.inet.ip.fw.one_pass в 0 (по дефолту - 1) и внести это в
# файл /etc/sysctl.conf - иначе при перезагрузке потеряется
add pipe 1 ip from em0 to re0
pipe 1 config bw 100Mbit/s
add pipe 2 ip from em0 to re0
pipe 2 config bw 100Mbit/s
# `спецтруба` для мелкиз пакетов типа ack - ибо если они теряются
# то повторные пакеты будут большего размера
add pipe 3 ip from any to any tcpflags ack iplen 0-128
pipe 3 config bw 100Mbit/s
# Пропускаем следующие трубы - чтобы мелкие пакеты не лимитировались
# пропускать надо до первого нормального (после труб) правила.
# я ему присвоил жёсткий номер - файрволл раздаёт номера с последнего правила
# (если номер жёстко не задан) с интервалом определяемым переменной sysctl
# net.inet.ip.fw.autoinc_step - по дефолту - 100
add skipto 39999 ip from any to any tcpflags ack iplen 0-128
# запускаем счётчик
i=4
# цикл по $i
while [ $i != 252 ]
do
# добавляем трубу для IP адреса
add pipe $i ip from not re0 to 192.168.0.${i}
# проверяем - часом не мой ли это IP
if [ $i -eq 13 -o $i -eq 22 ]
then
# мой инет :)))
pipe $i config bw 100Mbit/s
else
# не мой IP - режем скорость
pipe $i config bw 64000 bit/s
fi
# увеличиваем $i на единичку
i=$(($i+1))
done
# проверяем временные правила (перед этим правилом возврщаются мелкие
# пакеты в файрволл) :
add 40000 check-state
# разрешаем всё по интерфейсу lo0 (петля)
add allow ip from any to any via lo0