Пытаюсь сделать это при помощи pf. Есть вот такая машина:
Код: Выделить всё
19:31 Sergey.Poleckiy@sunrt [/etc]cat /etc/rc.conf
# -- sysinstall generated deltas -- # Tue Apr 20 20:36:34 2010
# Created: Tue Apr 20 20:36:34 2010
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.
hostname="sunrt.dinp.local"
ifconfig_em0="inet 192.168.125.11 netmask 255.255.255.0" # внутренний интерфейс
ifconfig_igb0="inet 192.168.1.2 netmask 255.255.255.0" # внешний интерфейс 1
ifconfig_igb1="inet 192.168.2.2 netmask 255.255.255.0" # внешний интерфейс 1
defaultrouter="192.168.2.1"
gateway_enable="YES"
router_enable="YES"
router="/sbin/routed"
router_flags="-q"
sshd_enable="YES"
mousechar_start="3"
font8x8="cp866-8x8"
font8x14="cp866-8x14"
font8x16="cp866b-8x16"
scrnmap="koi8-r2cp866"
keyrate="fast"
keymap="ru.koi8-r"
pf_enable="YES" # Включить PF (Подгрузить модуль, если требуется)
pf_rules="/etc/pf.conf" # Откуда подгружать правила для pf
pf_flags="" # дополнительные флаги для управляющей программы pfctl(8)
pflog_enable="YES" # запуск pflogd(8) (система журналирования)
pflog_logfile="/var/log/pflog" # где pflogd должен хранить журнал
pflog_flags="" # дополнительные флаги для pflogd
Код: Выделить всё
19:37 Sergey.Poleckiy@sunrt [/etc]cat /etc/pf.conf
#/etc/pf.conf
#
ext_if_a = "igb0" # Внешний интерфейс 2Мбита
ext_gw_a = "192.168.1.1" # Шлюз в инет на 2 Ьбита
#
ext_if_b = "igb1" # Внешний интерфейс 512 Кбит
ext_gw_b = "192.168.2.1" # Шлюз в инет 512 Кбит
#
int_if = "em0" # Внутренний интерфейс
#
# Table для выхода в инет
table <inet2000> persist file "/usr/local/etc/pf.table/inet2000" # ip-адреса пользователей канала 2Мбита
table <servers> persist file "/usr/local/etc/pf.table/servers" # ip-адреса серверов
table <inet512> persist file "/usr/local/etc/pf.table/inet512" # ip-адреса пользователей канала 512Кбит
#
# Списки для выхода в инет
list_out_2000 = "{ <inet2000> <servers> }"
list_out_512 = "{ <inet512> }"
#----------------------------------------------------------------------------------------
# Нормализация трафика
scrub in
#----------------------------------------------------------------------------------------
set skip on { lo0, $int_if }
#
# NAT на 2 канала
# Переписываем шлюз по умолчанию на внешних интерфейсах
nat on $ext_if_a inet from $list_out_2000 to any -> ( $ext_if_a )
nat on $ext_if_b inet from $list_out_512 to any -> ( $ext_if_b )
#----------------------------------------------------------------------------------------
pass out route-to ( $ext_if_a $ext_gw_a) from ($ext_if_a) to any
pass out route-to ( $ext_if_b $ext_gw_b) from ($ext_if_b) to any
#----------------------------------------------------------------------------------------
pass quick on $ext_if_a inet proto icmp from any to any keep state
pass quick on $ext_if_b inet proto icmp from any to any keep state
pass all
Заранее благодарен!