URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 89169
[ Назад ]

Исходное сообщение
"Natd на двух интерфейсах в FreeBSD 8.0"

Отправлено Merlin68 , 18-Июн-10 10:44 
Уважаемые коллеги!
Наверное я перекурил мануалов и и-нета, так как вошёл в ступор, и не могу правильно запустить natd на двух интерфейсах.
В одних источниках рекомендуют убрать все упоминания о natd из rc.conf, прописать дополнительный порт в services, и из rc.local запускать два экземпляра, в других источниках рекомендуют в файле конфигурации ipfw запускать два экземпляра, в третьих - из rc.conf... а ещё советуют скопировать natd в natd1 и его запускать...Голова кругом пошла...
Подскажите, как правильно это сделать?
У меня 2 внешних Ethernet интерфейса на двух провайдеров - vr0 и vr1. При запуске natd указывать интерфейс или внешний IP ?
Необходимо правильно запустить 2 экземпляра natd, например, на портах 8668 и 8768.
Кстати, в etc/usr/local/rc.d запуска natd у меня нет.. Но в rc.conf прописано, и natd на одном интерфейсе работает:

natd_enable="YES"                               #Активируем демон natd
natd_flags="-f /usr/local/etc/natd.conf"        #Указываем путь к файлу для загрузки опций natd
natd_interface="vr0"

Подскажите, что и в какие файлы правильно прописать ?


Содержание

Сообщения в этом обсуждении
"Natd на двух интерфейсах в FreeBSD 8.0"
Отправлено Макс , 18-Июн-10 11:12 
Юзайте pfnat, работает быстрее и гибче в настройках + ядровый.

>[оверквотинг удален]
>natd_enable="YES"            
>          
>        #Активируем демон natd
>
>natd_flags="-f /usr/local/etc/natd.conf"        #Указываем путь к
>файлу для загрузки опций natd
>natd_interface="vr0"
>

>
>Подскажите, что и в какие файлы правильно прописать ?


"Natd на двух интерфейсах в FreeBSD 8.0"
Отправлено Merlin68 , 18-Июн-10 11:19 
>[оверквотинг удален]
>>natd_enable="YES"            
>>          
>>        #Активируем демон natd
>>
>>natd_flags="-f /usr/local/etc/natd.conf"        #Указываем путь к
>>файлу для загрузки опций natd
>>natd_interface="vr0"
>>
>>
>>Подскажите, что и в какие файлы правильно прописать ?

Никогда не сталкивался.
Не знаю, получиться ли....Изучать нужно. Посмотрю.. Если не подскажут тут решения...


"Natd на двух интерфейсах в FreeBSD 8.0"
Отправлено Merlin68 , 18-Июн-10 11:25 
>[оверквотинг удален]
>>natd_enable="YES"            
>>          
>>        #Активируем демон natd
>>
>>natd_flags="-f /usr/local/etc/natd.conf"        #Указываем путь к
>>файлу для загрузки опций natd
>>natd_interface="vr0"
>>
>>
>>Подскажите, что и в какие файлы правильно прописать ?

Прошу прощения, я не настолько продвинутый...
Вы имеете ввиду совсем отказаться от ipfw и natd, и использовать только pf ?


"Natd на двух интерфейсах в FreeBSD 8.0"
Отправлено mr_gfd , 18-Июн-10 13:12 
>[оверквотинг удален]
>>natd_enable="YES"            
>>          
>>        #Активируем демон natd
>>
>>natd_flags="-f /usr/local/etc/natd.conf"        #Указываем путь к
>>файлу для загрузки опций natd
>>natd_interface="vr0"
>>
>>
>>Подскажите, что и в какие файлы правильно прописать ?

pfnat, если мне не изменяет память, во фре имеет некоторое количество вопросов, как минимум возможность всего pf юзать только одно ядро.


"Natd на двух интерфейсах в FreeBSD 8.0"
Отправлено Grey , 18-Июн-10 11:25 
>[оверквотинг удален]
>natd_enable="YES"            
>          
>        #Активируем демон natd
>
>natd_flags="-f /usr/local/etc/natd.conf"        #Указываем путь к
>файлу для загрузки опций natd
>natd_interface="vr0"
>
>
>Подскажите, что и в какие файлы правильно прописать ?

Думаю стоит подумать об использовании ipfw_nat, этот nat "ядерный" и в настройке гибче чем natd. Изучите этот вопрос, думаю получится... тем более что этот nat реализуется средствами ipfw.


"Natd на двух интерфейсах в FreeBSD 8.0"
Отправлено YuryD , 18-Июн-10 12:14 
>>[оверквотинг удален]
>>natd_enable="YES"            

rc.conf в случае 2-х и более natd вам не помошник..Все придется делать руками и запускать из /usr/local/etc/rc.d

- запускаем два или более natd на разных divert-портах (natd -p )с разными IP или интерфейсами
- прописываем правила ipfw divert в разные порты (natd -p) согласно тому, куда и чего вы хотите натить...

Внимательно изучаем правила ipfw... А вообще - в инете примеров полно.

Если траффик небольшой - проще использовать pf, там все правила можно на-ходу менять,
типа
nat on fxp0 from 10.0.0.0/24 to any ->xxx.xxx.xxx.xxx
nat on fxp1 from 10.1.0.0/24 to any ->yyy.yyy.yyy.yyy


"Natd на двух интерфейсах в FreeBSD 8.0"
Отправлено mr_gfd , 18-Июн-10 13:19 
ext_if1="wan0"
ext_ip1="1.1.1.1"
ext_if2="wan1"
ext_ip2="2.2.2.2"

cmd="/sbin/ipfw"
add="/sbin/ipfw add"

$cmd nat 1 config ip ${ext_ip} deny_in reset same_ports unreg_only
$cmd nat 2 config ip ${ext_ip2} deny_in reset same_ports unreg_only


$add nat 1 ip from any to any via ${ext_if1}
$add nat 2 ip from any to any via ${ext_if2}


"Natd на двух интерфейсах в FreeBSD 8.0"
Отправлено Merlin68 , 21-Июн-10 17:15 
Спасибо, пытаюсь разобраться и настроить.
Имеем:
Настроил всё по http://www.lissyara.su/articles/freebsd/tuning/ipfw_nat/, по варианту 4. Спасибо автору, всё очень познавательно... Но...Всё ходит через дополнительный канал, через основной - не идёт. То ли я зациклился, чесно говоря, мозги немножко плавятся... Но всё по-порядку:
Имеем 3 интерфейса:
vr0 - канал основного провайдера (2 Мбит)
vr1 - канал дополнительного провайдера (10 Мбит)
rl0 - внутренняя сетка 192.168.100.0/24
Итак, в rc.conf имеем:

ifconfig_rl0="inet 192.168.100.8  netmask 255.255.255.0"                #Конфигурируем внутренний интерфейс
ifconfig_vr0="inet 194.143.145.26  netmask 255.255.255.248 -rxcsum"     #Конфигурируем внешний интерфейс 1
ifconfig_vr1="inet 77.91.152.172  netmask 255.255.255.248 -rxcsum"      #Конфигурируем внешний интерфейс 2

hostname="gate.domain.local"

defaultrouter="194.143.145.25"<>#Указываем шлюз по умолчанию (на основного провайдера)

setfib1_enable="YES"
setfib1_defaultroute="77.91.152.169" # Шлюз на дополнительного провайдера

gateway_enable="YES"<-->#Активируем режим пересылки пакетов между интерфейсами

firewall_enable="YES"<-><------>#Активируем Firewall
firewall_quiet="YES"<--><------>#Активируем "тихий" режим Firewall (при загрузке/перезагрузке
firewall_logging="YES"<><------>#Активируем режим журналирования
firewall_script="/etc/firewall" # для setfib

dummynet_enable="YES"

linux_enable="YES"

dnsmasq_enable="YES"

openvpn_enable="YES"

keymap="ua.koi8-u.shift.alt"

sshd_enable="YES"
apache22_enable="YES"
apache22_http_accept_enable="YES"
squid_enable="YES"
squid_fib=1   # squid адаптируем к setfib
mysql_enable="YES"
sams_enable="YES"
vsftpd_enable="YES"
openfire_enable="YES"
samba_enable="YES"

slapd_enable="YES"
## Этот параметр пишите в одну строку без переноса
slapd_flags='-h "ldapi:///var/run/openldap/ldapi/ ldap://127.0.0.1/ ldap://192.168.100.8/"'
########
slapd_sockets="/var/run/openldap/ldapi"

local_startup="/usr/local/etc/rc.d"


Далее адаптировал и видоизменил немножко пример 4, указав явно в таблице 0 машину с ИП 192.168.100.10 (она должна пойти по маршруту на основного провайдера, а в таблице 1 - машину с ИП 192.168.100.200 (она должна пойти по маршруту на дополнительного провайдера).
В /etc/firewall имеем:

#!/bin/sh
fcmd="/sbin/ipfw -q "
cmd="/sbin/ipfw"
add="/sbin/ipfw add"

${fcmd} -f flush
${fcmd} -f pipe flush
${fcmd} -f queue flush

${fcmd} table 0 add 192.168.100.10
${fcmd} table 1 add 192.168.100.200

${add} 1040 setfib 0 ip from any to any in recv rl0
${add} 1050 setfib 1 ip from table(1) to any in recv rl0

${fcmd} add 1060 allow ip from any to any via rl0

${fcmd} add 1080 deny ip from any to 192.168.0.0/16 in recv vr0
${fcmd} add 1081 deny ip from any to 192.168.0.0/16 in recv vr1
${fcmd} add 1090 deny ip from 192.168.0.0/16 to any in recv vr0
${fcmd} add 1091 deny ip from 192.168.0.0/16 to any in recv vr1
${fcmd} add 10100 deny ip from any to 172.16.0.0/12 in recv vr0
${fcmd} add 10101 deny ip from any to 172.16.0.0/12 in recv vr1
${fcmd} add 10110 deny ip from 172.16.0.0/12 to any in recv vr0
${fcmd} add 10111 deny ip from 172.16.0.0/12 to any in recv vr1
${fcmd} add 10120 deny ip from any to 10.0.0.0/8 in recv vr0
${fcmd} add 10121 deny ip from any to 10.0.0.0/8 in recv vr1
${fcmd} add 10130 deny ip from 10.0.0.0/8 to any in recv vr0
${fcmd} add 10131 deny ip from 10.0.0.0/8 to any in recv vr1
${fcmd} add 10140 deny ip from any to 169.254.0.0/16 in recv vr0
${fcmd} add 10141 deny ip from any to 169.254.0.0/16 in recv vr1
${fcmd} add 10150 deny ip from 169.254.0.0/16 to any in recv vr0
${fcmd} add 10151 deny ip from 169.254.0.0/16 to any in recv vr1

${fcmd} pipe 1 config bw 10Mbit/s queue 60 gred 0.002/10/30/0.1
${fcmd} queue 1 config pipe 1 mask src-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

${fcmd} pipe 2 config bw 10Mbit/s queue 60 gred 0.002/10/30/0.1
${fcmd} queue 2 config pipe 2 mask dst-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

${fcmd} pipe 3 config bw 2Mbit/s queue 60 gred 0.002/10/30/0.1
${fcmd} queue 3 config pipe 3 mask src-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

${fcmd} pipe 4 config bw 2Mbit/s queue 60 gred 0.002/10/30/0.1
${fcmd} queue 4 config pipe 4 mask dst-ip 0xffffffff queue 60 gred 0.002/10/30/0.1

# ${cmd} nat 1 config log if vr0 same_ports reset deny_in
# ${cmd} nat 2 config log if vr1 same_ports reset deny_in
${cmd} nat 1 config log if vr0 same_ports reset deny_in unreg_only
${cmd} nat 2 config log if vr1 same_ports reset deny_in unreg_only

${fcmd} add 10160 queue 1 ip from any to any out xmit vr0
${add} 10170 nat 1 ip from any to any via vr0
${fcmd} add 10180 queue 2 ip from any to any in recv vr0

${fcmd} add 10190 queue 3 ip from any to any out xmit vr1
${add} 10200 nat 2 ip from any to any via vr1
${fcmd} add 10210 queue 4 ip from any to any in recv vr1

${fcmd} add 10220 allow all from any to any

${fcmd} add 65534 deny all from any to any

/usr/local/etc/rc.d/setfib1 сделал именно так, как прописано в статье

Что имеем в итоге:
Поскольку используется SQUID, то через проксю всё ходит, но ходит исключительно через дополнительного провайдера.
На роутере имеем:


# sysctl -a | grep one_pass
net.inet.ip.fw.one_pass: 1
#


# ipfw table 0 list
192.168.100.10/32 0
#
# ipfw table 1 list
192.168.100.200/32 0


# setfib -0 netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            194.143.145.25     UGS         0      244    vr0
10.1.0.0/24        10.1.0.2           UGS         0        0   tun0
10.1.0.1           link#5             UHS         0        0    lo0
10.1.0.2           link#5             UH          0        0   tun0
77.91.152.168/29   link#3             U           0       63    vr1
77.91.152.172      link#3             UHS         0        0    lo0
127.0.0.1          link#4             UH          0    17703    lo0
192.168.100.0/24   link#1             U           2     2066    rl0
192.168.100.8      link#1             UHS         0        0    lo0
194.143.145.24/29  link#2             U           0       57    vr0
194.143.145.26     link#2             UHS         0        0    lo0

Internet6:
Destination                       Gateway                       Flags      Netif Expire
::1                               ::1                           UH          lo0
fe80::%lo0/64                     link#4                        U           lo0
fe80::1%lo0                       link#4                        UHS         lo0
ff01:4::/32                       fe80::1%lo0                   U           lo0
ff02::%lo0/32                     fe80::1%lo0                   U           lo0
#



# setfib -1 netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            77.91.152.169      UGS        48    84764    vr1
10.1.0.2           link#5             UH          0        0   tun0
77.91.152.168/29   link#3             U           0        0    vr1
127.0.0.1          link#4             UH          0        0    lo0
192.168.100.0/24   link#1             U           4    88319    rl0
194.143.145.24/29  link#2             U           0        0    vr0

Internet6:
Destination                       Gateway                       Flags      Netif Expire
::1                               ::1                           UH          lo0
fe80::%lo0/64                     link#4                        U           lo0
fe80::1%lo0                       link#4                        UHS         lo0
ff01:4::/32                       fe80::1%lo0                   U           lo0
ff02::%lo0/32                     fe80::1%lo0                   U           lo0
#


И что мне непонятно:

# ipfw show
01040  51873   3842446 setfib 0 ip from any to any in recv rl0
65535 380217 337924537 allow ip from any to any
#

Кстати, ставлю
sysctl net.inet.ip.fw.one_pass=0

и с локалки в и-нет выйти нельзя.
Ставлю
sysctl net.inet.ip.fw.one_pass=1

через прокси можно выйти (но на дополнительного провайдера.
Выручайте, друзья, всю голову сломал !


"Natd на двух интерфейсах в FreeBSD 8.0"
Отправлено Amator , 22-Июн-10 17:27 
#!/bin/sh

ipfw_cmd="/sbin/ipfw -q"

${ipfw_cmd} flush
${ipfw_cmd} queue flush
${ipfw_cmd} pipe flush
${ipfw_cmd} nat flush
${ipfw_cmd} table all flush
${ipfw_cmd} zero

${ipfw_cmd} disable one_pass

primary_if="vr0"
ip_of_primary_if="194.143.145.26"
secondary_if="vr1"
ip_of_secondary_if="77.91.152.172"
int_if="rl0"
ip_of_int_if="192.168.100.8"
localnet="192.168.100.0/24"
broadcast_ip_of_localnet="192.168.100.255"

${ipfw_cmd} table 1 add 192.168.100.10
${ipfw_cmd} table 1 add ...
${ipfw_cmd} table 2 add ...
${ipfw_cmd} table 2 add ...
${ipfw_cmd} table 5 add (содержимое table 1 и table 2)

${ipfw_cmd} table 3 add 192.168.100.200
${ipfw_cmd} table 3 add ...
${ipfw_cmd} table 4 add ...
${ipfw_cmd} table 4 add ...
${ipfw_cmd} table 7 add (содержимое table 3 и table 4)

# ip-адреса, которым запрещён выход в интернет.
${ipfw_cmd} table 6 add ...

${ipfw_cmd} nat 1 config log ip ${ip_of_primary_if} same_ports
${ipfw_cmd} nat 2 config log ip ${ip_of_secondary_if} same_ports

# Опишем primary канал - направления in и out:
# in
${ipfw_cmd} pipe 10 config bw 0Kbit/s mask dst-ip 0x000000ff
${ipfw_cmd} pipe 11 config bw 1950Kbit/s queue 44 gred 0.002/40/44/0.1
# out
${ipfw_cmd} pipe 20 config bw 0Kbit/s mask src-ip 0x000000ff
# какая скорость на отдачу на primary канале ? (допустим симметрия)
${ipfw_cmd} pipe 21 config bw 1950Kbit/s queue 44 gred 0.002/40/44/0.1

# Опишем secondary канал - направления in и out:
# in
${ipfw_cmd} pipe 30 config bw 0Kbit/s mask dst-ip 0x000000ff
${ipfw_cmd} pipe 31 config bw 9950Kbit/s queue 50 gred 0.002/45/50/0.1
# out
${ipfw_cmd} pipe 40 config bw 0Kbit/s mask src-ip 0x000000ff
# какая скорость на отдачу на secondary канале ? (допустим симметрия)
${ipfw_cmd} pipe 41 config bw 9950Kbit/s queue 50 gred 0.002/45/50/0.1

# VIP через primary канал. in
${ipfw_cmd} queue 111 config pipe 11 weight 60 mask dst-ip 0x000000ff
# Другие (primary канал). in
${ipfw_cmd} queue 112 config pipe 11 weight 35 mask dst-ip 0x000000ff

# VIP через primary канал. out
${ipfw_cmd} queue 211 config pipe 21 weight 60 mask src-ip 0x000000ff
# Другие (primary канал). out
${ipfw_cmd} queue 212 config pipe 21 weight 35 mask src-ip 0x000000ff

# VIP через secondary канал. in
${ipfw_cmd} queue 311 config pipe 31 weight 60 mask dst-ip 0x000000ff
# Другие (secondary канал). in
${ipfw_cmd} queue 312 config pipe 31 weight 35 mask dst-ip 0x000000ff

# VIP через secondary канал. out
${ipfw_cmd} queue 411 config pipe 41 weight 60 mask src-ip 0x000000ff
# Другие (secondary канал). out
${ipfw_cmd} queue 412 config pipe 41 weight 35 mask src-ip 0x000000ff

${ipfw_cmd} add 10 set 31 allow ip4 from any to any via lo0
${ipfw_cmd} add 10 set 31 deny ip4 from any to 127.0.0.0/8
${ipfw_cmd} add 10 set 31 deny ip4 from 127.0.0.0/8 to any

#
# Правила для входящих в шлюз пакетов:
#
${ipfw_cmd} add 15 set 31 reass all from any to any in
${ipfw_cmd} add 15 set 31 deny log logamount 500 ip4 from any to any not antispoof

# Для dhcp-клиентов. (dhcp-сервер имеется ?)
${ipfw_cmd} add 90 set 31 allow udp from 0.0.0.0 68 to 255.255.255.255 67 in recv ${int_if}

${ipfw_cmd} add 90 set 31 allow ip4 from ${localnet} to ${ip_of_int_if} in recv ${int_if}

# Для шейпа.
# Шейпим исходящий трафик.
${ipfw_cmd} add 100 set 31 deny ip4 from any to ${broadcast_ip_of_localnet} in recv ${int_if}
${ipfw_cmd} add 100 set 31 deny ip4 from any to 255.255.255.255 in recv ${int_if}
RFC1918="192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8"
${ipfw_cmd} add 100 set 31 deny log logamount 1000 ip4 from any to ${RFC1918} in recv ${int_if}
${ipfw_cmd} add 100 set 1 setfib 0 ip4 from table\(5\) to any in recv ${int_if}
${ipfw_cmd} add 100 set 1 skipto 1000 ip4 from table\(5\) to any in recv ${int_if}
${ipfw_cmd} add 100 set 1 setfib 1 ip4 from table\(7\) to any in recv ${int_if}
${ipfw_cmd} add 100 set 1 skipto 1000 ip4 from table\(7\) to any in recv ${int_if}

${ipfw_cmd} add 200 set 1 skipto 3000 ip4 from any to ${ip_of_primary_if} in recv ${primary_if}
${ipfw_cmd} add 200 set 1 skipto 4000 ip4 from any to ${ip_of_secondary_if} in recv ${secondary_if}

${ipfw_cmd} add 495 set 31 deny log logamount 1000 ip4 from any to any in

#
# Правила для исходящих пакетов:
#
${ipfw_cmd} add 500 set 31 allow ip4 from ${ip_of_int_if} to ${localnet} out xmit ${int_if}

# Для шейпа.
# Шейпим входящий трафик - возвращающийся обратно к localnet.
${ipfw_cmd} add 500 set 1 skipto 5000 ip4 from any to table\(5\) out xmit ${int_if} recv ${primary_if}
${ipfw_cmd} add 500 set 1 skipto 6000 ip4 from any to table\(7\) out xmit ${int_if} recv ${secondary_if}

${ipfw_cmd} add 700 set 1 skipto 7000 ip4 from any to any out xmit ${primary_if} recv ${int_if}
${ipfw_cmd} add 700 set 1 skipto 8000 ip4 from any to any out xmit ${secondary_if} recv ${int_if}

${ipfw_cmd} add 900 set 1 allow ip4 from ${ip_of_primary_if} to any out xmit ${primary_if}
${ipfw_cmd} add 900 set 1 allow ip4 from ${ip_of_secondary_if} to any out xmit ${secondary_if}

${ipfw_cmd} add 995 set 31 deny log logamount 1000 ip4 from any to any out


## in recv ${int_if}
# Все DNS-запросы должны обслуживаться _локальным_ DNS-сервером, а то, к примеру, некоторые вирусы могут
# подменить DNS-сервер на свой. Хотя они обычно правят файл hosts :) (C:\Windows\System32\drivers\etc\hosts)
${ipfw_cmd} add 1005 set 31 deny log logamount 1000 ip4 from any to any dst-port 53
# Те же рассуждения касаются и 25 TCP-порта (SMTP)
${ipfw_cmd} add 1005 set 31 deny log logamount 1000 ip4 from any to any dst-port 25
# !!!
# Следующее правило для того, чтобы те, кто явно не перечислен (кто не в базе), не вышли в интернет.
${ipfw_cmd} add 1005 set 1 deny log logamount 500 ip4 from not table\(5\) to any
${ipfw_cmd} add 1005 set 1 deny log logamount 500 ip4 from not table\(7\) to any
# и + запрещаем выход тем, кто в таблице 6 !!!
${ipfw_cmd} add 1005 set 1 deny log logamount 500 ip4 from table\(6\) to any
#
${ipfw_cmd} add 1010 set 1 pipe 20 ip4 from table\(5\) to any { tcpflags syn or tcpflags fin or tcpflags rst or tcpflags psh }
${ipfw_cmd} add 1020 set 1 queue 211 ip4 from table\(1\) to any
${ipfw_cmd} add 1030 set 1 queue 212 ip4 from table\(2\) to any
${ipfw_cmd} add 1090 set 1 allow ip4 from any to any

${ipfw_cmd} add 1010 set 1 pipe 40 ip4 from table\(7\) to any { tcpflags syn or tcpflags fin or tcpflags rst or tcpflags psh }
${ipfw_cmd} add 1020 set 1 queue 411 ip4 from table\(3\) to any
${ipfw_cmd} add 1030 set 1 queue 412 ip4 from table\(4\) to any
${ipfw_cmd} add 1090 set 1 allow ip4 from any to any

## in recv ${primary_if}
# NAT
${ipfw_cmd} add 3010 set 1 nat 1 ip4 from any to any
${ipfw_cmd} add 3090 set 1 allow ip4 from any to any

## in recv ${secondary_if}
# NAT
${ipfw_cmd} add 4010 set 1 nat 2 ip4 from any to any
${ipfw_cmd} add 4090 set 1 allow ip4 from any to any

## out xmit ${int_if} recv ${primary_if}
${ipfw_cmd} add 5010 set 1 pipe 10 ip4 from any to any { tcpflags syn or tcpflags fin or tcpflags rst or tcpflags psh }
${ipfw_cmd} add 5040 set 1 queue 111 ip4 from any to table\(1\)
${ipfw_cmd} add 5060 set 1 queue 112 ip4 from any to table\(2\)
${ipfw_cmd} add 5090 set 1 allow ip4 from any to any

## out xmit ${int_if} recv ${secondary_if}
${ipfw_cmd} add 6010 set 1 pipe 30 ip4 from any to any { tcpflags syn or tcpflags fin or tcpflags rst or tcpflags psh }
${ipfw_cmd} add 6040 set 1 queue 311 ip4 from any to table\(3\)
${ipfw_cmd} add 6060 set 1 queue 312 ip4 from any to table\(4\)
${ipfw_cmd} add 6090 set 1 allow ip4 from any to any

## out xmit ${primary_if} recv ${int_if}
# NAT
${ipfw_cmd} add 7010 set 1 nat 1 ip4 from any to any
${ipfw_cmd} add 7090 set 1 allow ip4 from any to any

## out xmit ${secondary_if} recv ${int_if}
# NAT
${ipfw_cmd} add 8010 set 2 nat 2 ip4 from any to any
${ipfw_cmd} add 8090 set 2 allow ip4 from any to any

## Запрещаем то, что не разрешено явно!
${ipfw_cmd} add 50000 set 31 deny log logamount 1000 ip4 from any to any


"Natd на двух интерфейсах в FreeBSD 8.0"
Отправлено Amator , 22-Июн-10 17:33 
Попробуйте выполнить вышеприведённый файл.

В нём добавлена возможность шейпить и входящий, и исходящий трафик на обоих каналах.

Шейпить будем, _исходящий_ от локальных пользователей трафик, до соответствующего NAT-а;
и после NAT-а - _входящий_ - трафик, возвращающийся обратно к локальным пользователям.