Уже перелопатил кучу материалов, по всякому попробовал (в том числе и статью на сайте),но никак.
Нужно сделать так, чтобы через одно из подключений пользователи выходили в Интернет, а на втором висел корпоративный сайт.
Вот последний вариант pf.conf:
Код: Выделить всё
#Переменные
#Первый провайдер - через pptp(на нем наш сайт)
#Внешний интерфейс
ipout1 = "xxx"
#Шлюз для интерфейса
gw_1 = "xxx1"
#Интерфейс
ifout1 = "tun0"
ifvpn = "em2"
#Второй провайдер - через ethernet (через него юзеры вызодят в интернет)
#Внешний интерфейс
ipout2 = "yyy"
#Шлюз для интерфейса
gw_2 = "yyy1"
#Интерфейс
ifout2 = "em0"
#Наша сеть
table <ournet> { 10.4.0.0/16 }
#Плохая сеть :(
table <nonet> const { 192.168.0.0/16, 169.254.0.0/16, 224.0.0.0/4, 240.0.0.0/4, 204.152.64.0/23, 224.0.0.0/3 }
#Внутренние интерфейсы
ifuser = "{em1, vlan10, vlan11, vlan12, vlan13, vlan14, vlan15, vlan16, vlan17, vlan18, vlan19, vlan20, vlan21, vlan22, vlan23, vlan24, vlan25, vlan50, vlan100}"
#Доверенные хосты провайдеров
table <vpnsrv> const { xxx, zzz13, zzz1t, zzzzz}
#Таблица для зарегестрированных пользователей
table <usr> persist # Список разрешенных IP-адресов пользователей
#Список портов, под которым всем можно подключаться
superports = "{ 5555 , 33 }"
#Список портов, которые заворачиваются на сквид
wwwports = "{ 80, 8080, 443, 563, 5190, 777, 5999 }"
#Наш веб-сервер
web_server = "10.4.1.254"
#Список всяких нехороших гадов
table <bad> persist
#Установки политик
set state-policy if-bound
set debug misc
set optimization normal
set block-policy drop
set require-order yes
set fingerprints "/etc/pf.os"
#Не фильтруем пакеты на кольцевом интерфейсе
set skip on lo0
#Нормализуем входящий трафик
scrub in all fragment reassemble min-ttl 15 max-mss 1400
scrub all random-id min-ttl 128 reassemble tcp
#Перенаправляю все на squid
rdr on $ifuser inet proto tcp from 10.4.0.0/16 to !<ournet> port $wwwports -> 10.4.1.254 port 3128
#Перенаправляю запросы на наш веб-сервер
rdr on $ifout1 inet proto tcp to $ipout1 port www tag WEB_SERVER -> $web_server port www
#Натим трафик первого провайдера
nat on $ifout1 inet proto tcp tagged WEB_SERVER -> ($ifout1)
#Натим канал второго провайдера
nat on $ifout2 inet from <ournet> to !<ournet> -> ($ifout2)
#Защита от спуффинга
antispoof log quick for $ifuser inet
#Блокирум попытки сканирования NMAP
block quick log from any os NMAP
block quick log from any os NAST
#Запрещаю подключение к адресам "хулиганов"
block quick from <bad>
#Пропускаем на сервер только эти порты
pass quick on $ifuser proto { tcp, udp } from <ournet> to <cs> port $superports flags S/SA modulate state
#Разрешаем движение на кольцевом интерфейсе
pass in quick on lo0 all
pass out quick on lo0 all
#Блокируем сети, которых у нас нет и не должно быть в Интернете
block quick from any to <nonet>
block quick from <nonet> to any
#Разрешаем ping во всех направлениях
pass quick inet proto icmp all icmp-type echoreq code 0 keep state
pass quick inet proto icmp all icmp-type unreach code 0 keep state
#Блокируем подключение к некоторым портам на внешнем интерфейсе
block in quick on tun0 proto {tcp, udp} to $ipout1 port { 22, 3128, 3306, 199, 3401, 10000, 33, 5555 }
block in quick on em0 proto {tcp, udp} to $ipout2 port { 22, 3128, 3306, 199, 3401, 10000, 33, 5555 }
block in quick on em0 proto {tcp, udp} from <ournet> to any
#Направляем входящие по каналу первого провайдера по такому-же маршруту
#pass out on $ifout1 keep state
pass in quick on $ifout1 reply-to ( $ifout1 $gw_1 ) inet proto tcp tagged WEB_SERVER keep state
pass out quick on $ifout1 route-to ( $ifout1 $gw_1 ) inet from $ifout1 to !<ournet> keep state
#разрешаем трафик по каналу второго провайдера
#pass quick on $ifout2 all no state
pass in quick on $ifout2 reply-to ( $ifout2 $gw_2 ) inet proto tcp keep state
pass out quick route-to ( $ifout2 $gw_2 ) inet from $ifout2 to !<ournet> keep state
#От безысходности
pass out on $ifout1 route-to ($ifout2 $gw_2) from $ifout2 to any
pass out on $ifout2 route-to ($ifout1 $gw_1) from $ifout1 to any
#Разрешить работу пользователям
pass quick from <usr> to any
pass quick from any to <usr>
#Поддержка VPN
pass quick proto {tcp, udp} from <ournet> to <vpnsrv>
pass quick from <vpnsrv> to <ournet>
pass quick proto gre from any to any
#Запретить все остальное
block quick all
То есть трафик идет как надо через второго провайдера, но заставить работать веб-сервер я не могу, исходящие с него идут почему-то с интерфейса второго провайдера.
Операционная система - FreeBSD 8
Как правильно настроить? Выслушаю любые предложения?