Страница 1 из 1

PF + mpd

Добавлено: 2010-02-25 16:20:53
goblin13
Всем привет. Хочу описать мою проблему: есть сеть корпоративная, в ней рулит сервер под FreeBSD 7 с фильтром пф . Была необходимость установить мпд как впн сервер для того чтоб затуннелировать с клиентом из другой сети. Все шло нормально пока появилась необходимость не только входить с мира по впн но и выходить тоже. Все порты открыты ибо стоит правила

Код: Выделить всё

pass in all
pass out all
Но выходить из этой сети по впн так и не удалось - клиент доходит до проверки имени и пароля и отваливается в 619
Читал на этом форуме что это от того что гре не ходит наружу. Из других источников узнал что пф вообще не умеет натить гре. Скажите кому-то удалось решить данную проблему или все-таки надо поменять фаер на ipfw?

Re: PF + mpd

Добавлено: 2010-02-25 17:21:11
Shuba
Удалось, переходом на ipfw

Re: PF + mpd

Добавлено: 2010-02-25 17:23:17
goblin13
Shuba писал(а):Удалось, переходом на ipfw
все таки это единственный выход ). Не охота сейчас ядро скомпилить...

Re: PF + mpd

Добавлено: 2010-02-25 17:58:25
_Попов
я не понял сути вопроса.

надо объяснить подробнее, а лучше с картинкой.

Re: PF + mpd

Добавлено: 2010-02-25 18:01:30
Shuba
А зачем ядро пересобирать??? Оба фаера работают и без перекомпиляции адра. Вообще-то где-то на просторах инета была статейка, в ней pf оставался и дополнительно к нему делался ядерный нат с помощью ipfw... Но имхо лудше один фаер заюзать.
_Попов писал(а):я не понял сути вопроса.
надо объяснить подробнее, а лучше с картинкой.
Человеку нужно, чтобы машины за роутером могли конектиться ко внешним vpn-сервакам, т.е. нужно нат-ить gre

Re: PF + mpd

Добавлено: 2010-02-25 18:08:18
goblin13
Shuba писал(а):лудше один фаер заюзать.
согласен

мне кажется ipfw лучше засунуть в ядро чем как модуль загрузить. Ибо нужны опции там допольнительные

Re: PF + mpd

Добавлено: 2010-02-25 18:12:45
_Гагарин
странно, а как это у меня тогда получается в одном месте (шлюзом FreeBSD+PF) через nat поднять впн соединение из локальной WinXP до в инете находящегося сервера (FreeBSD+PF+MPD) и полностью лазить в тамошней локалке?

без картинки и листинга правил PF ничего не понятно.

Re: PF + mpd

Добавлено: 2010-02-25 18:30:26
goblin13
да нет там правил - все разрешено

Код: Выделить всё

ext_if="rl1"     # replace with actual external interface name i.e., dc0
int_if="rl0"   # replace with actual internal interface name i.e., dc1
internal_net="192.168.152.0/24"
external_addr="xxx.xx.xxx.xx"
int_addr="192.168.152.254"

table <users> persist file "/etc/pf/nat.conf"

nat on $ext_if proto { tcp udp icmp gre } from $int_if:network to any -> ($ext_if)

rdr on $ext_if proto tcp from any to $external_addr/32 port 3389 -> 192.168.152.251 port 3389
rdr on $ext_if proto {tcp, udp} from any to $external_addr/32 port 27000 -> 192.168.152.250 port 27000
rdr on $ext_if proto tcp from any to $external_addr/32 port 2701 -> 192.168.152.250 port 80
rdr on $int_if proto {tcp, udp} from any to $int_addr port 53 -> 218.56.210.34 port 53

pass in all
pass out all

Re: PF + mpd

Добавлено: 2010-02-25 18:50:41
_Сатана
я наверное повторюсь, но я так и не понял сути вопроса.

касательно того, что ты выложил, и если бы надо было просто чтобы из int_if:network законекались на удаленный VPN сервак, то вот такого:

Код: Выделить всё

ext_if="rl1"     # replace with actual external interface name i.e., dc0
int_if="rl0"   # replace with actual internal interface name i.e., dc1

#--    опции    --
set block-policy return
set skip on lo0
set timeout tcp.established 7200
#-----------------

scrub in all

nat on $ext_if from ($int_if:network) to any -> ($ext_if) #натируем

#
# ---  фильтр  ---
#
block all #запретим все отовсюду

pass out on $ext_if from ($ext_if) to any  #разрешаем лезть в инет серваку
pass in on $int_if from any to any         #разр. весь входящий из локалки

pass in inet proto icmp all icmp-type echoreq  #разрешили ping сервака

Re: PF + mpd

Добавлено: 2010-02-25 19:01:45
goblin13
_Сатана писал(а):я наверное повторюсь, но я так и не понял сути вопроса.

касательно того, что ты выложил, и если бы надо было просто чтобы из int_if:network законекались на удаленный VPN сервак, то вот такого:

Код: Выделить всё

ext_if="rl1"     # replace with actual external interface name i.e., dc0
int_if="rl0"   # replace with actual internal interface name i.e., dc1

#--    опции    --
set block-policy return
set skip on lo0
set timeout tcp.established 7200
#-----------------

scrub in all

nat on $ext_if from ($int_if:network) to any -> ($ext_if) #натируем

#
# ---  фильтр  ---
#
block all #запретим все отовсюду

pass out on $ext_if from ($ext_if) to any  #разрешаем лезть в инет серваку
pass in on $int_if from any to any         #разр. весь входящий из локалки

pass in inet proto icmp all icmp-type echoreq  #разрешили ping сервака

и чем же я в моем конфиге ошибся? кроме того что разрешаю всем да все. Тут вроде объяснили что вся проблема с натом гре. Где в вашем конфиге собственно этот гре разрешается?

Re: PF + mpd

Добавлено: 2010-02-25 19:42:30
_Сатана
у кого проблема?
с этим конфигом ты подконекаешься к впн серверу через nat

может у тебя проблема на стороне сервака vpn?

Re: PF + mpd

Добавлено: 2010-02-25 21:35:56
Shuba
_Сатана писал(а):у кого проблема?
с этим конфигом ты подконекаешься к впн серверу через nat

может у тебя проблема на стороне сервака vpn?
О как, а я и не знал, ломал бедный голову, как gre занатить, оказывается просто

Код: Выделить всё

nat on $ext_if from ($int_if:network) to any -> ($ext_if) #натируем
А ты пробовал то делать соеденение по vpn с такими настройками фаера из локалки???

Re: PF + mpd

Добавлено: 2010-02-25 21:52:20
_Менделеев
получается, что ты реально не знал и голову себе ломал... я первый раз слышу что какие-то проблемы с этим GRE...

если отбросить ту кучу правил, чтобы работало остальное г*но, то именно такие правила и нужны, чтобы клиент из локалки с WinXP через nat на FreeBSD+PF законекался на впн в инете на FreeBSD+PF+MPD

я уж даже начал сомневаться...
взял вот прямо сейчас законекался - все пашет
какие-то проблемы не понятные....

реально, мож я че не понимаю

вот первые несколько строк tcpdump на внешнем интерфейсе, шлюза NAT, за которым находится клиент впн:

Код: Выделить всё

/usr/ports/net/proxychains #>tcpdump -i ng0 proto gre
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ng0, link-type NULL (BSD loopback), capture size 96 bytes
21:46:35.476490 IP VPNв ИНЕТЕ > NATшлюзПередКлиентом: GREv1, call 32768, seq 0, length 39: LCP, Conf-Request (0x01), id 1, length 25
21:46:35.500287 IP NATшлюзПередКлиентом > VPNв ИНЕТЕ: GREv1, call 41719, seq 0, length 37: LCP, Conf-Request (0x01), id 0, length 23
21:46:35.535712 IP VPNв ИНЕТЕ > NATшлюзПередКлиентом: GREv1, call 32768, seq 1, ack 0, length 27: LCP, Conf-Reject (0x04), id 0, length 9
21:46:35.537266 IP NATшлюзПередКлиентом > VPNв ИНЕТЕ: GREv1, call 41719, seq 1, ack 1, length 38: LCP, Conf-Request (0x01), id 1, length 20
21:46:35.573114 IP VPNв ИНЕТЕ > NATшлюзПередКлиентом: GREv1, call 32768, seq 2, ack 1, length 38: LCP, Conf-Ack (0x02), id 1, length 20
21:46:37.513929 IP VPNв ИНЕТЕ > NATшлюзПередКлиентом: GREv1, call 32768, seq 3, length 39: LCP, Conf-Request (0x01), id 2, length 25
21:46:37.515688 IP NATшлюзПередКлиентом > VPNв ИНЕТЕ: GREv1, call 41719, seq 2, ack 3, length 43: LCP, Conf-Ack (0x02), id 2, length 25
21:46:37.516017 IP NATшлюзПередКлиентом > VPNв ИНЕТЕ: GREv1, call 41719, seq 3, length 32: LCP, Ident (0x0c), id 2, length 20
21:46:37.516107 IP NATшлюзПередКлиентом > VPNв ИНЕТЕ: GREv1, call 41719, seq 4, length 34: LCP, Ident (0x0c), id 3, length 22
давай че надо спрашивай, я тебе выложу.

Re: PF + mpd

Добавлено: 2010-02-25 22:11:35
Shuba

Код: Выделить всё

[shuba@beta ~]$ sudo pfctl -sn
nat on tun0 inet from 192.168.0.0/24 to any -> yyy.yyy.yyy.yyy
[shuba@beta ~]$

Код: Выделить всё

sudo tcpdump -i tun0 -n proto gre and dst host xxx.xxx.xxx.xxx
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type NULL (BSD loopback), capture size 68 bytes
21:18:23.460200 IP 192.168.0.100 > xxx.xxx.xxx.xxx: GREv1, call 35392, seq 0, length 37: LCP, Conf-Request (0x01), id 0, length 23
21:18:25.454355 IP 192.168.0.100 > xxx.xxx.xxx.xxx: GREv1, call 35392, seq 1, length 37: LCP, Conf-Request (0x01), id 1, length 23
21:18:28.454992 IP 192.168.0.100 > xxx.xxx.xxx.xxx: GREv1, call 35392, seq 2, length 37: LCP, Conf-Request (0x01), id 2, length 23
21:18:32.455818 IP 192.168.0.100 > xxx.xxx.xxx.xxx: GREv1, call 35392, seq 3, length 37: LCP, Conf-Request (0x01), id 3, length 23
21:18:36.456635 IP 192.168.0.100 > xxx.xxx.xxx.xxx: GREv1, call 35392, seq 4, length 37: LCP, Conf-Request (0x01), id 4, length 23
21:18:40.457484 IP 192.168.0.100 > xxx.xxx.xxx.xxx: GREv1, call 35392, seq 5, length 37: LCP, Conf-Request (0x01), id 5, length 23

Re: PF + mpd

Добавлено: 2010-02-25 22:14:51
Shuba
Хотя есть такой вариант, у меня на шлюзе стоит

Код: Выделить всё

FreeBSD host 7.2-RELEASE-p6 FreeBSD 7.2-RELEASE-p6 #0: Fri Jan 22 15:47:09 EET 2010     root@host:/usr/obj/usr/src/sys/Shuba_Kernel  i386
Может в 8-ке допилили pf???

Re: PF + mpd

Добавлено: 2010-02-25 22:35:56
_FreeBSD
так как шлюз NAT должен подканеатьсяк прову, то имеем дело с ng0 интерфесом, но ведь это не суть важно?:

Код: Выделить всё

#>pfctl -a ng-nat/ng0 -s nat
No ALTQ support in kernel
ALTQ related functions disabled
nat on ng0 all -> (ng0) round-robin

Код: Выделить всё

#>tcpdump -i ng0 -n proto gre and dst host ИПсервераVPN
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ng0, link-type NULL (BSD loopback), capture size 96 bytes
22:24:33.852596 IP ИПшлюзаNAT > ИПсервераVPN: GREv1, call 41719, seq 0, ack 0, length 41: LCP, Conf-Request (0x01), id 0, length 23
22:24:33.852695 IP ИПшлюзаNAT > ИПсервераVPN: GREv1, call 41719, seq 1, length 39: LCP, Conf-Ack (0x02), id 1, length 25
22:24:33.886178 IP ИПшлюзаNAT > ИПсервераVPN: GREv1, call 41719, seq 2, ack 1, length 38: LCP, Conf-Request (0x01), id 1, length 20
22:24:33.920135 IP ИПшлюзаNAT > ИПсервераVPN: GREv1, call 41719, seq 3, ack 3, length 36: LCP, Ident (0x0c), id 2, length 20
22:24:33.920243 IP ИПшлюзаNAT > ИПсервераVPN: GREv1, call 41719, seq 4, length 34: LCP, Ident (0x0c), id 3, length 22
22:24:33.920526 IP ИПшлюзаNAT > ИПсервераVPN: GREv1, call 41719, seq 5, length 71: CHAP, Response (0x02), id 1, Value 44c5c8
вот правила (без лишнего г*на) PF на шлюзе NAT:

Код: Выделить всё

ext_if = "fxp0"  #соединен с интернетом
int_if = "vr0"  #внутрь локалной сети

#--    опции    --
set block-policy return
set skip on lo0
set timeout tcp.established 7200
#-----------------

scrub in all

nat-anchor "ng-nat/*"

#
# ---  фильтр  ---
#
block all #запретим все отовсюду

pass out on $ext_if from ($ext_if) to any  #разрешаем серваку все
pass in on $int_if from any to any         #разр. весь входящий из локалки

pass in inet proto icmp all icmp-type echoreq  #разрешили ping сервака

anchor "ng-out/*"
вот правила, которые грузятся при старте соединения MPD до прова на шлюзе NAT:

Код: Выделить всё

#>cat /usr/local/etc/mpd5/up-dozv
#!/bin/sh
echo "nat on $1 from any to any -> ($1)" | pfctl -a ng-nat/$1 -f -;
echo "pass out on $1 from ($1) to any" | pfctl -a ng-out/$1 -f -;

Re: PF + mpd

Добавлено: 2010-02-25 22:44:01
_Попов
на шлюзе NAT

Код: Выделить всё

FreeBSD 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov 21 15:48:17 UTC 2009
на ВПН серваке

Код: Выделить всё

FreeBSD 7.2-RELEASE FreeBSD 7.2-RELEASE #0: Fri May  1 08:49:13  UTC 2009
но на шлюзе я поставил 8ку только лишь чтобы понять, а почему же у людей проблема с настройкой впн сервера MPD на 8ке?..
до этого был 7ка и все работало

ничего специально не настраивал по причине лени, если не завелось сразу забил бы нафигг
или не забил бы...
наверное бы OpenVPN пришлось бы осваивать

Re: PF + mpd

Добавлено: 2010-02-26 10:47:37
Shuba
_FreeBSD писал(а):так как шлюз NAT должен подканеатьсяк прову, то имеем дело с ng0 интерфесом, но ведь это не суть важно?:
Если конектиться с самого шлюза - то проблемы нет, т.к. gre будет сразу без всякого nat-а идти с ng0 (или с tun0 как у меня). Для этого nat не требуется. А вот если конектиться с локалки с серым айпишником - тогда траблы. А топикстартер писал:
goblin13 писал(а):Все шло нормально пока появилась необходимость не только входить с мира по впн но и выходить тоже.
...
Но выходить из этой сети по впн так и не удалось - клиент доходит до проверки имени и пароля и отваливается в 619

Re: PF + mpd

Добавлено: 2010-02-26 11:03:38
_9 мая
ты не врубился походу.
ng0 на шлюзе это чтобы у меня инет появился в локалке
а соединение до ВПН сервера поднимается от компа из локалки (192.168.1/24) через ng0 через nat

Re: PF + mpd

Добавлено: 2010-02-26 11:20:05
_FreeBSD
Shuba писал(а):

Код: Выделить всё

[shuba@beta ~]$ sudo pfctl -sn
nat on tun0 inet from 192.168.0.0/24 to any -> yyy.yyy.yyy.yyy
[shuba@beta ~]$
если это не опечатка, то правило ошибочное, т.к. не понятно зачем подменять адрес источника на yyy.yyy.yyy.yyy, а не на tun0.......

Код: Выделить всё

nat on tun0 inet from 192.168.0.0/24 to any -> tun0

Re: PF + mpd

Добавлено: 2010-02-26 16:59:20
Shuba
_FreeBSD писал(а):
Shuba писал(а):

Код: Выделить всё

[shuba@beta ~]$ sudo pfctl -sn
nat on tun0 inet from 192.168.0.0/24 to any -> yyy.yyy.yyy.yyy
[shuba@beta ~]$
если это не опечатка, то правило ошибочное, т.к. не понятно зачем подменять адрес источника на yyy.yyy.yyy.yyy, а не на tun0.......

Код: Выделить всё

nat on tun0 inet from 192.168.0.0/24 to any -> tun0
Вот часть оригинального конфига:

Код: Выделить всё

# макросы                                                                                                                    
LanCard="re0"                           # Сетевуха на локальную сетку                                                        
LanNet="192.168/24"                     # Подсеть домашней локалки                                                           
VPNCard="tun0"                          # Виртуальная сетевуха VPN-клиента 
...
# Правила NAT
nat on $VPNCard from $LanNet to any -> $VPNCard

Re: PF + mpd

Добавлено: 2010-02-27 1:30:38
goblin13
Shuba писал(а):
_Сатана писал(а):у кого проблема?
с этим конфигом ты подконекаешься к впн серверу через nat

может у тебя проблема на стороне сервака vpn?
О как, а я и не знал, ломал бедный голову, как gre занатить, оказывается просто

Код: Выделить всё

nat on $ext_if from ($int_if:network) to any -> ($ext_if) #натируем
А ты пробовал то делать соеденение по vpn с такими настройками фаера из локалки???
как раз этой твоей правилой я пробовал и нифига гре наружу ходить не хочеть )) На стороне серва все в порядке - ведь оттуда где нет фаера (то есть пф) конекчусь к нему.
Вы начали тут обсуждение непонятно чего, дампы выложили... не умеет пф натить наружу гре и все, че тут голову ломать. Ведь внутри все проходит все ок а наружу не пускает. А вы тут истории всякие начали

Можно считать тему закрытой. Ядро скомпилил, ipfw рулит щас.

Re: PF + mpd

Добавлено: 2010-02-27 9:32:54
_Попов
goblin13 писал(а):как раз этой твоей правилой я пробовал и нифига гре наружу ходить не хочеть )) На стороне серва все в порядке - ведь оттуда где нет фаера (то есть пф) конекчусь к нему.
Вы начали тут обсуждение непонятно чего, дампы выложили... не умеет пф натить наружу гре и все, че тут голову ломать. Ведь внутри все проходит все ок а наружу не пускает. А вы тут истории всякие начали
зачем такие кординальные заявления. У меня умеет. Почему у тебя не умеет не знаю:
Если к Вам не прижимаются в метро, это вовсе не означает, что метро в Париже не существует!
PF рулит тоже в данном случае

Re: PF + mpd

Добавлено: 2010-02-28 12:53:53
tyler56
Не осилил весь топик но у меня такая связка пашет без какого-то гемороя.

Код: Выделить всё

#192.168.5.1/25  vpn подсеть
inet_if="ng0"
local_if="rl1"
local_net="192.168.0.1/24"

nat pass on $inet_if from 192.168.5.1/25 to any -> ($inet_if)

#vpn mpd 1723 and gre
pass in on { $local_if, $inet_if } proto tcp from { $local_net, <my_inet_client> } \
to { $local_ip, $inet_ip } port = 1723 keep state

pass proto gre from any to any keep state