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

kernel nat ipfw VPN PPTP

Добавлено: 2013-11-07 14:43:43
CTOPMbI4
Приветствую гуру уникса.
Вообщем задача есть сервер на фряхе.
2 сетевухи
em1 смотрит в мир.
em0 в локалку там крутиться сетка 192.168.0.0/24
на самой фряхе поднимаются несколько туннелей до удаленных офисов. посредством mpd5. тип туннеля pptp.

Далее нужно разрешить пользователям локалки так же пробрасывать ВПН туннели то тех же удаленных серверов с теме же ип адресами.

Почитав доки по pptp gre ipfw . так и не понял. возможно так реализовать или нет?
вот правила фаера

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

#************************reset

${fwcmd} -f flush

#${fwcmd} -f pipe flush

#${fwcmd} -f queue flush

${fwcmd} -f table 0 flush

               config nat interface

#deny in config nat

 ${fwcmd} nat 1 config ip External_ip same_ports reset 

#*********Rules to Server GRE

        ${fwcmd} add 110 pass log tcp from any to me 1723 in via ${em1}

        ${fwcmd} add 120 pass log ip from me to any out via ${em1}

        ${fwcmd} add 130 pass gre from any to me in via ${em1}

#*********Nat out , LAN net to Rules

        ${fwcmd} add 150 nat 1 ip from 192.168.0.0/24 to any out via ${em1}



#*****************************nat rules in

        ${fwcmd} add 300 nat 1 ip from any to Externall_ip in via ${wan_int}

   ${fwcmd} add 65000 deny log all from any to any

Если поставить правила ната выше правил для сервера то туннели с фряхи не поднимаются. если ниже то с фряхи туннели поднимаются , с компов в локалке ВПН НЕ поднимаются выдает ошибку 619. по tcpdump-у видно что не проходят gre пакеты внутрь локалки.

Возможно решить данную проблему ? и если возможно то каким образом?

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-08 5:36:31
CTOPMbI4
не у кого нет вариантов?

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-08 6:41:43
lazhu
убрать правило 110, вместо него

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

nat 1 config ip External_ip same_ports reset deny_in redirect_port External_ip:1723 1723
Таким образом все входящие соединения на External_ip:1723 будут перенаправляться на локальную машину (сервер), а с локалки все будет ходить через нат.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-08 7:05:30
CTOPMbI4
lazhu писал(а):убрать правило 110, вместо него

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

nat 1 config ip External_ip same_ports reset deny_in redirect_port External_ip:1723 1723
Таким образом все входящие соединения на External_ip:1723 будут перенаправляться на локальную машину (сервер), а с локалки все будет ходить через нат.
Дело в том что с самого сервера так же поднимаются туннели. да и если поставить deny_in то вообще ничего не работает.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-08 7:56:21
CTOPMbI4
Тобишь VPN сервера нет в локалке. Есть шлюз на фряхе с которого и происходит соединение до внешних серверов и потом уже машрутизируется в локалку. соответственно для юзверов из локалки сделан нат для выхода в инет.
Но еще нужно для некоторых товарищей поднимать доп. ВПН. до тех же серверов. для доступа к определенным ресурсам.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-08 8:07:31
lazhu
CTOPMbI4 писал(а):
lazhu писал(а):убрать правило 110, вместо него

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

nat 1 config ip External_ip same_ports reset deny_in redirect_port External_ip:1723 1723
Таким образом все входящие соединения на External_ip:1723 будут перенаправляться на локальную машину (сервер), а с локалки все будет ходить через нат.
Дело в том что с самого сервера так же поднимаются туннели. да и если поставить deny_in то вообще ничего не работает.
Так для того и делается редирект, чтобы локальные сервисы работали при deny_in

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-08 8:50:15
CTOPMbI4
хм.. куда делается проброс то? сам на себя что ли?

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-08 9:15:48
lazhu
CTOPMbI4 писал(а):хм.. куда делается проброс то? сам на себя что ли?
Да.
Правда, насколько я понял, в данном случае туннель устанавливается исходящий, так что локальный порт 1723 вообще не при делах. Если известны ip pptp-серверов, можно занести их в таблицу и прописать

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

add allow ip from table\(1\) to any in via em1
до ната.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-08 10:22:58
CTOPMbI4
Вот переделал. нат поставил раньше разрешения для сервера.
тут сложность заключается в входящих соединениях gre.
если исходящие можно фильтровать по ип адресу. тобишь локалки. и ип адресу сервера. то входящий gre пакет приходит на сервер на один и тот же ип адрес.
и дальше какое правило будет первым либо нат либо для сервера. то и будет работать.

какие варианты как решить эту траблу?
как то поставить established до правил ната для ип сервера.

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

${fwcmd} nat 1 config ip external_ip same_ports reset 
*********Nat out , LAN net to Rules

        ${fwcmd} add 50 nat 1 ip from 192.168.0.0/24 to any out via ${wan_int}



#*****************************nat rules in

        ${fwcmd} add 100 nat 1 ip from any to external_ip in via ${wan_int}

#to server

   ${fwcmd} add 110 pass tcp from "table(2)" to me 1723 in via ${wan_int}

        ${fwcmd} add 120 pass ip from me to any out via ${wan_int}

        ${fwcmd} add 130 pass gre from "table(2)" to me in via ${wan_int}
       



Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-08 12:20:22
CTOPMbI4

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

add allow ip from table\(1\) to any in via em1
до ната

Если поставить до правил ната. то тогда пакеты предназначенные для ПК в локалке. не будут доходить.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-09 11:00:35
gumeniuc
CTOPMbI4 писал(а): Далее нужно разрешить пользователям локалки так же пробрасывать ВПН туннели то тех же удаленных серверов с теме же ип адресами.
Поясните, пожалуйста, на конкретном примере с адресами чего Вы хотите добиться.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-09 11:37:51
CTOPMbI4
Все до банальности просто.

FreeBSD 9.1
em1 External_ip
em0 192.168.0.0/24
Поднят mpd5 в качестве клиента.
C FreeBSD должны быть подняты туннели до внешних удаленных офисов с внешними ип адресами.
Юзверы с локалки 192.168.0.0/24 должны иметь инет через NAT который поднят на FreeBSD. + должны иметь возможность поднимать туннели до тех же
удаленных офисов.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-10 22:32:28
kharkov_max
Вот ответ на Ваш вопрос ...
http://forum.lissyara.su/viewtopic.php?f=4&t=39449

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-12 16:57:28
CTOPMbI4
kharkov_max писал(а):Вот ответ на Ваш вопрос ...
http://forum.lissyara.su/viewtopic.php?f=4&t=39449
сегодня проверил.
ВПН поднялись с сервера.
Но нат корректно не работает.
тобишь с стороны клиентских ПК пакеты натятся. приходят обратно на внешний интерфейс. обратно из ната не работает.
поставил

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

net.inet.ip.fw.one_pass=0
убрал

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

deny_in и reset

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-12 17:32:40
kharkov_max
Ну как бы без конфигов тяжело что то говорить и обсуждать.
Выкладывайте конфиг ipfw - посмотрим ...

Только покажите весь ipfw

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-13 6:07:23
CTOPMbI4
Прошу весь конфиг.

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


#!/bin/sh

fwcmd="/sbin/ipfw"

#***********************Lans net

wan_lan="Externall_ip/30"
lan_net="192.168.1.0/24"


#***********************interfaces

lan_int="em0"
wan_int="em1"
ng0_int="ng0"
ng1_int="ng1"
ng2_int="ng2"


#***********************ip to interface

wan_ip="External_ip"
lan_ip="192.168.1.1"


#************************tables

#**********table local net

${fwcmd} table 1 add 10.0.0.0/8
#${fwcmd} table 1 add 192.168.0.0/16
${fwcmd} table 1 add 172.16.0.0/12
${fwcmd} table 1 add 169.254.0.0/16
${fwcmd} table 1 add 240.0.0.0/4
${fwcmd} table 1 add 224.0.0.0/4



#************************table VPN remote offices

${fwcmd} table 2 add VPN_ip1/32
${fwcmd} table 2 add VPN_ip2/32
${fwcmd} table 2 add VPN_ip3/32




#************************reset

${fwcmd} -f flush

#${fwcmd} -f pipe flush

#${fwcmd} -f queue flush

${fwcmd} -f table 0 flush


#************************access loopback

        ${fwcmd} add 10 pass all from any to any via lo0

#************************deny loopback 127.0.0.0/8 to all

        ${fwcmd} add 20 deny log all from any to 127.0.0.0/8
        ${fwcmd} add 30 deny log all from 127.0.0.0/8 to any


#************************diamond shit shild to brut pass

        ${fwcmd} add 40 deny not icmp from "table(0)" to me



#************************shild to WAN interface rfc (LAN)

        ${fwcmd} add 50 deny all from "table(1)" to any in via ${wan_int}
        ${fwcmd} add 60 deny all from any to "table(1)" in via ${wan_int}




#*************************deny on tcp state flags shild to bruts nmaps

        ${fwcmd} add  70 deny log tcp from any to any not established tcpflags fin
        ${fwcmd} add  80 deny log tcp from any to any tcpflags fin,syn,rst,psh,ack,urg
        ${fwcmd} add  90 deny log tcp from any to any tcpflags !fin,!syn,!rst,!psh,!ack,!urg

#*************************deny spoofing attack

        ${fwcmd} add 91 deny ip from any to any not verrevpath in


#*************************deny rules to WAN INT, netbios and etc

        ${fwcmd} add 95 deny log all from any to any 23,67,68,3128,137-139,81,445 via ${wan_int}

        ${fwcmd} add 96 deny ip from 10.0.0.0/16 to any in via ${ng0_int}

#*************************deny icmp type only

        ${fwcmd} add 97 pass icmp from any to me in via ${wan_int} icmptype 3,8,12

        ${fwcmd} add 98 deny icmp from amy to me in via ${wan_int}






#*****************************nat config + redirect ports

#                       config nat interface

#deny in config nat

 ${fwcmd} nat 1 config ip Ext_ip same_ports \
redirect_port udp 192.168.1.100:50555 50555 \
redirect_port udp 192.168.1.100:20010-20020 20010-20020



#*********Rules LAN INT Alloy all to Local int


        ${fwcmd} add 100 allow all from any to any via ${lan_int}



#*****************************Nat rules out

        ${fwcmd} add 150 nat 1 ip from 192.168.1.0/24 to any out via ${wan_int}

#*****************************nat rules in

        ${fwcmd} add 200 nat 1 ip from any to Externall_ip in via ${wan_int}




#****************************rules from server


        ${fwcmd} add 400 add pass ip from me to any out via ${wan_int}

        ${fwcmd} add 410 add pass gre from me to any out via ${wan_int}

        ${fwcmd} add 420 add pass tcp from "table(2)" 1723 to me in via ${wan_int}

        ${fwcmd} add 430 add pass gre from "table(2)" to me in via ${wan_int}



#************************* ng interfaces all access
#ng0

# establlished

${fwcmd} add 1000 allow all from any to any via ${ng0_int}

#int ng1

${fwcmd} add 1010 allow all from any to any via ${ng1_int}

#int ng2

${fwcmd} add 1020 allow all from any to any via ${ng2_int}




#                       deny all to not allow

        ${fwcmd} add 65000 deny log all from any to any

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-13 9:39:14
kharkov_max
Ну как минимум Ваш конфиг, отличается от того что я Вам показал.
В вашу схему особо не вникал т.к. это из разряда найди 10 отличий ...

Еще раз проверте, а еще лучше повторите то что есть и все заработает ...

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-13 10:18:46
CTOPMbI4
Если упустить всякие запрещающие правила.
все сводится к этим правилам

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


#обьявляем нат без deny_in
${fwcmd} nat 1 config ip Ext_ip same_ports


*****************************натим исходящую локалку

        ${fwcmd} add 150 nat 1 ip from 192.168.1.0/24 to any out via ${wan_int}
это правило отрабатывает норм.

#*****************************натим входящие пакеты

        ${fwcmd} add 200 nat 1 ip from any to Externall_ip in via ${wan_int}

вот тут проблема. не работает!!!
тобишь пакеты доходят и дальше ничего.


#****************************тут правила до самого сервера
они норм работают.


        ${fwcmd} add 400 add pass ip from me to any out via ${wan_int}

        ${fwcmd} add 410 add pass gre from me to any out via ${wan_int}

        ${fwcmd} add 420 add pass tcp from "table(2)" 1723 to me in via ${wan_int}

        ${fwcmd} add 430 add pass gre from "table(2)" to me in via ${wan_int}


Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-13 10:39:49
kharkov_max
Ну да это так, все сводится к этим правилам.

Теперь найдите отличия, от моих правил )))

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-13 11:34:54
CTOPMbI4
kharkov_max писал(а):Ну да это так, все сводится к этим правилам.

Теперь найдите отличия, от моих правил )))
скиньте точный готовый конфиг. без лишних правил запретов. именно эту часть.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-13 12:04:26
kharkov_max

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

${fw} nat 1 config ip ${ext_gateway_ip} same_ports

# =============Разрешаем шлюзу создавать VPN подключения ================
${fw} add allow tcp from ${ext_gateway_ip} to any 1723         out via ${ext_if}
${fw} add allow gre from ${ext_gateway_ip} to table\(5\)       out via ${ext_if}


${fw} add allow tcp from any  1723       to ${ext_gateway_ip}   in via ${ext_if}
${fw} add allow gre from table\(5\)      to ${ext_gateway_ip}   in via ${ext_if}

${fw} add allow all from { 192.168.0.1,192.168.0.2 } to any out via mpd5
${fw} add allow all from any to { 192.168.0.1,192.168.10.2 }  in via mpd5
# ========================================================================

# ====================== NAT VPN в инет ======================================================
${fw} add nat 1 tag 8 tcp from table\(3\) to any 1723        out recv ${int_if} xmit ${ext_if}
${fw} add nat 1 tag 8 gre from table\(3\) to any             out recv ${int_if} xmit ${ext_if}
${fw} add nat 1 tag 8 gre from ${ext_gateway_ip} to any      out via ${ext_if}
${fw} add allow tcp from ${ext_gateway_ip} to any 1723       out via ${ext_if} tagged 8
${fw} add allow gre from ${ext_gateway_ip} to any            out via ${ext_if} tagged 8

${fw} add nat 1 tag 8 tcp from any 1723 to ${ext_gateway_ip}  in via ${ext_if}
${fw} add nat 1 tag 8 gre from any to ${ext_gateway_ip}       in via ${ext_if}
${fw} add allow tcp from any 1723 to table\(3\)               in via ${ext_if} tagged 8
${fw} add allow gre from any to table\(3\)                    in via ${ext_if} tagged 8
# ============================================================================================
Вставте этот блок вместо своих правил, ну и конечно подправте под свои переменные и IP.

table5 - куда шлюз может строить VPN на внешние VPN серверы (мне так было нужно !!!)
table3 - кто из локальной сети может строить VPN наружу в инет
ext_gateway_ip - внешний IP, или несколько IP шлюза
mpd5 - VPN интерфейс который который поднял шлюз с внешним VPN сервером.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-13 12:08:49
CTOPMbI4
подождите вы говорили что правила ната должны быть первыми. а потом уже разрешение для сервера.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-13 12:15:06
CTOPMbI4
у вас в этом конфиге наоборот. сначала правила для шлюза а потом уже нат.
вся проблема заключается именно в входящем пакете. так как в нем содержится
ип адрес сервера в качестве dst ip.

цитирую вас в вашей статье.
Правила nat фильтрации должны быть первыми, потом правила для mpd5 клиента, а потом правила для mpd5 сервера.
Таким образом возврящаясь от сервера пакет для mpd5 клиента попадает в nat (т.к. он первый в правилах), nat видит что у него нет исходящего пакета, пакет не натит, но пропускает по правилам дальше. Далее пакет попадает в правила для mpd5 клиента.
Для этого нужно поставить параметр one_pass=0 в ноль
таким образом пакет пойдет на след правило после ната. и тут уже можно для него подставить нужные правила.
Настроил именно как вы сказали. Но не заработало.
Либо я что то не понимаю.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-13 12:16:03
kharkov_max
CTOPMbI4 писал(а):подождите вы говорили что правила ната должны быть первыми. а потом уже разрешение для сервера.
Да, вы правы.
Глянул только что рабочий конфиг там такой порядок.

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

${fw} nat 1 config ip ${ext_gateway_ip} same_ports

# ====================== NAT VPN в инет ======================================================
${fw} add nat 1 tag 8 tcp from table\(3\) to any 1723        out recv ${int_if} xmit ${ext_if}
${fw} add nat 1 tag 8 gre from table\(3\) to any             out recv ${int_if} xmit ${ext_if}
${fw} add nat 1 tag 8 gre from ${ext_gateway_ip} to any      out via ${ext_if}
${fw} add allow tcp from ${ext_gateway_ip} to any 1723       out via ${ext_if} tagged 8
${fw} add allow gre from ${ext_gateway_ip} to any            out via ${ext_if} tagged 8

${fw} add nat 1 tag 8 tcp from any 1723 to ${ext_gateway_ip}  in via ${ext_if}
${fw} add nat 1 tag 8 gre from any to ${ext_gateway_ip}       in via ${ext_if}
${fw} add allow tcp from any 1723 to table\(3\)               in via ${ext_if} tagged 8
${fw} add allow gre from any to table\(3\)                    in via ${ext_if} tagged 8
# ============================================================================================

# =============Разрешаем шлюзу создавать VPN подключения ================
${fw} add allow tcp from ${ext_gateway_ip} to any 1723         out via ${ext_if}
${fw} add allow gre from ${ext_gateway_ip} to table\(5\)       out via ${ext_if}


${fw} add allow tcp from any  1723       to ${ext_gateway_ip}   in via ${ext_if}
${fw} add allow gre from table\(5\)      to ${ext_gateway_ip}   in via ${ext_if}

${fw} add allow all from { 192.168.0.1,192.168.0.2 } to any out via mpd5
${fw} add allow all from any to { 192.168.0.1,192.168.10.2 }  in via mpd5
# ========================================================================

# ============== Правила для VPN сервера, если нужно =======================

# =======================================================================
Сори за неточность, а Вам респект за бдительность.

Re: kernel nat ipfw VPN PPTP

Добавлено: 2013-11-13 12:16:45
kharkov_max
цитирую вас в вашей статье.
Это не статья а просто записка, мысли в слух .... ))))