Вводные:Компьютер под FreeBSD5.4
Сетевые адаптеры:
fxp1: 10.200.10.36:255.255.255.0
fxp2: 192.168.0.1:255.255.255.0Ядро скомпилировано GENERIC + опции
options BRIDGE
options IPDIVERT
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPFIREWALL_FORWARD
options IPFIREWALL_FORWARD_EXTENDED # на всякий пожарный
device pf
device pflog
device pfsyncrc.conf:
natd_enable="YES"
natd_interface="fxp1"
defaultrouter="10.200.10.1"
firewall_enable="YES"
pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""Сеть провайдера: 10.0.0.0:255.0.0.0
10.200.10.1 - gateway для моего сегмента
10.200.4.1 - VPN сервер
10.200.4.100 - Сервер с расшаренными по "Netbios over TCP/IP" папками с видеофильмамиМоя маленькая сеть 192.168.0.0:255.255.255.0
192.168.0.2 - Web, FTP, POP3, SMTP сервер
192.168.0.11 - рабочая станция 1
192.168.0.12 - рабочая станция 2Возникшие вопросы:
1) Настроил ipfw для хождения с 192.168.0.11 на 10.200.4.100 через natd работает и сейчас. Затем настроил шлюз для хождения с 192.168.0.11 на 10.200.4.100, но на этот раз в качестве NAT выступал PF.
В pf.conf для этого я добавил только одну строку
nat on fxp1 from 192.168.0.0/24 to 10.0.0.0/8 -> (fxp1)Работает, но ping -l 2000 10.200.4.100 работает только при NAT=natd, а при pf такой пинг не проходит. Ну и с natd соответственно файлы копируются с сервера на рабочую станцию 3-4 минуты, а с pf 9-10 минут. Для pf "магическая" длина пакета оказалась 1472 (мог соврать +/- 3, точно не помню)
При этом правило ipfw для nat выглядело вот так:
${fwcmd} add 500 divert natd all from any to any via fxp1А для pf я такого не писал. Может как то тоже через divert передавать в pf. Или в pf.conf еще каких параметров надо добавить чтобы он пропускал пакеты до 25000 длиной?
PS использовать PF в качестве одного единственного файрвола пока не хочу, ибо пока я в нем совсем новичек.
2) Вот по этой статье
http://www.opennet.me/base/net/pptp_client.txt.html
Добавил в ppp.conf секцию vpn со всеми описанными строками без изменений, за исключением пароля и логина. Установил пакет pptp
Затем прописал в /etc/rc.d/*NETWORKING
route add -host 10.200.4.1 10.200.10.1
route add -net 10.0.0.0 10.200.10.1
/usr/local/sbin/pptp 10.200.4.1 vpn &В resolv.conf DNS провайдера записан
При загрузке все вроде идет без ошибок до появления приглашения login(ttyv0):
проходит пара секунд и появляется сообщение:
ppp[303]: tun0: Error: rt_Set: Cannot add a route with gateway 0.0.0.0После чего интернет работает, но все попытки пропинговать интернет хосты проваливаются со 100% потерей. При просмотре счетчиков ipfw выяснилось что все пинги на интернет почемуто идут просто на fxp1, а не на tun0.
В случае с PPTP я организую второй NAT на PF
nat on tun0 from 192.168.0.0/24 to !10.0.0.0/8 -> (tun0)Хочется добить icmp на интернет
Последняя непристойность: после всех перезагрузок и настроек появились файлы pptp.core в корне и в папке /root - это нормально при shutdown -r now ?
В логах ppp просто куча сообщений:
15:00:04 ppp[303]: tun0: CPP: DeflateInput: Seq error: Got 110, expected 108
15:00:04 ppp[303]: tun0: CPP: deflink: SendResetReq(116) state = Openned
15:00:04 ppp[303]: tun0: CPP: deflink: RecvResetReq(116) state = Openned
15:00:04 ppp[303]: tun0: CPP: deflate: Input channel reset
15:00:08 ppp[303]: tun0: CPP: DeflateInput: Seq error: Got 83, expected 81
15:00:08 ppp[303]: tun0: CPP: deflink: SendResetReq(117) state = Openned
15:00:08 ppp[303]: tun0: CPP: deflink: RecvResetReq(117) state = Openned
15:00:08 ppp[303]: tun0: CPP: deflate: Input channel reset
15:00:11 ppp[303]: tun0: CPP: DeflateInput: Seq error: Got 157, expected 156
15:00:11 ppp[303]: tun0: CPP: deflink: SendResetReq(118) state = Openned
15:00:11 ppp[303]: tun0: CPP: deflink: RecvResetReq(118) state = Openned
15:00:11 ppp[303]: tun0: CPP: deflate: Input channel resetи т.п и т.д.
Прошу помощи. Спасибо что не поленились дочитать. :)
АЙ.. не дочитал :-) Задачу твою нихрена не понял."PS использовать PF в качестве одного единственного файрвола пока не хочу, ибо пока я в нем совсем новичек." - а стОит!
Советы:
1. Выкить IPFW, используйю PF. И вообще, как ты два фаерволла собрался одновременно юзать?
2. В PF можеш прописывать НАТы хоть сотню, не надо никаких дивертов, т.е. можно отдельные адреса выпукать на отдельные адреса и ваще как угодноКраткий пример:
В ядре
option altq
device pf
device pflog
device pfsync
и на компиляцию.в rc.conf
pf_enable="YES"
pflog_enable="YES"
pflog_logfile="usr/var/pf"В pf.conf
ext_if="fxp1"
int_if="fxp2"
ext_ip="10.200.10.36"
int_net="192.168.0/24"nat on $ext_if from 192.168.0.11 to 10.200.4.100 -> $ext_if # НАТиш один одрес на один адрес
nat on $ext_if from {192.168.0.1 192.168.0.5} to 195.184.14/24 -> $ext_if #НАТиш два внутренних адреса на какую-то подсеть
nat on $ext_if proto tcp from 192.168.0/24 to any port {25 110} -> $ext_if # Выпускаешь всю сеть наружу по портам 25 и 110 - почту забирать
nat on $ext_if proto icmp from 192.168.0/24 to any -> $ext_if #Выпускаешь пингии т.д. хоть сотни НАТов
...
block in all
block out allpass out from $ext_ip to any keep state
pass in from $int_net to $int_net
pass out from $int_net to $int_net
или pass on $int_if from any to any...
для PPPoE
pass on tun0 from any to anyЕсли будут вопросы пиши мне на мыло, вышлю рабочие конфиги и нормальный хелп по ПФ
>Если будут вопросы пиши мне на мыло, вышлю рабочие конфиги и нормальный
>хелп по ПФМожешь мне выслать? Заодно поделись опытом как считать трафик? (по клиентам) Вроде встретил упоминания что IPA работает c PF но на оффсайте об этом ни слова :(
>АЙ.. не дочитал :-) Задачу твою нихрена не понял.
>
>"PS использовать PF в качестве одного единственного файрвола пока не хочу, ибо
>пока я в нем совсем новичек." - а стОит!
>Задача:
Есть сеть вот такой структуры:
http://www.opennet.me/base/net/freebsd_2x_natd.jpg
Картинка не моя, но структура у меня такая же.
Напишите работоспособный конфиг для PF который позволит:
1) Натить мою локалку - если смотреть на этот рисунок, то 10.0.0.0/8 в любой сегмент локалки 192.168.xxx.0/24
2) Натить мою локалку - если смотреть на этот рисунок, то 10.0.0.0/8 в интернет через PPTP интерфейс tun0
3) В моей локалке 10.0.0.0/8 есть мой сервер web, ftp,pop3,smtp его надо промапить в локалку провайдера только по портам этих сервисов.
Проблемы с которыми я столкнулся в PF на этом пути:
1) строка
nat on fxp1 from 192.168.0.0/24 to 10.0.0.0/8 -> (fxp1)
срезает все пакеты превышающие длину 1472, что ведет к тормозам. Все парамерты в этой строке из моего первого поста выше, а не с рисунка :-)2) строка
nat on tun0 from 192.168.0.0/24 to !10.0.0.0/8 -> (tun0)Все парамерты в этой строке из моего первого поста выше, а не с рисунка
Перед 10.0.0.0/8 стоит восклицательный знак
Вообще не пропукает пинг - все пакеты идут по прежнему в локалку провайдера, а не на ВПН тунель, но при этом http,ftp она пропускает в интернет нормально
Проверте конфиг...Плиззз Кажись тут че-то нетак, я с pf столкнулся первый раз ))и если можно расписать что строки обозначают.
ext_if="inet0" # replace with actual external interface name i.e., dc0
int_if="lnet0" # replace with actual internal interface name i.e., dc1
internel_net="192.168.1.3, 192.168.1.127, 192.168.1.125, 192.168.1.250"
internel_net1="192.168.1.25, 192.168.1.126, 192.168.1.125, 192.168.1.10, 192.168.1.12, 192.1internal_net="192.168.1.0/24"
external_addr="192.168.1.1"nat on $ext_if from $internal_net to any -> ($ext_if)
block in log all
pass in on $ext_if proto tcp from any to $ext_if port 22 keep state
pass out on $ext_if proto { tcp, udp } all keep state
pass in on $int_if from $int_if:network to any keep state
pass out on $int_if from any to $int_if:network keep state
pass out on $ext_if proto tcp all modulate state flags S/SA
pass out on $ext_if proto { udp, icmp } all keep state
pass in on $ext_if proto { gre, tcp } all keep state
pass in on $ext_if proto {tcp, udp} from any to $ext_if port {1723,47,21,8080,443,80,1777,33
pass out on $ext_if proto {tcp, udp} from any to $ext_if port {1723,47,21,8080,80,443,1777}и еще там 2 сетевых интерфейса lnet0 с разными айпи, один на внешку др. на лок. так может быть?