URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 85782
[ Назад ]

Исходное сообщение
"Пул адресов NAT в PF FreeBSD"

Отправлено beaver33 , 29-Июн-09 17:34 
Всем привет.
Возник вот такой вопрос -  есть система,

   CISCO                              FreeBSD 7.1
172.16.2.1--------------внеш 172.16.2.2------10.0.0.155 внутр.

для передачи данных с 172.16.2.2 на 172.16.2.1. Использую nat в pf.conf
Всё работает идеально.
#------------#
# Interfaces #
#------------#
ext_if="rl0"
int_if="vr0"
allowed_icmp_types="{ echoreq, unreach }"
#----------#
# Networks #
#----------#
ext_net="172.16.2.0/29"
int_net="10.0.0.0/24"
#----------#
# Adresses #
#----------#
ext_addr="172.16.2.2"
int_addr="10.0.0.155"
#############################################################################
#############################################################################
nat on $ext_if from $int_if:network to any -> ($ext_if)
pass log inet proto icmp all icmp-type $allowed_icmp_types
block all
pass from { lo, $int_if:network } to any keep state
#pass in all
pass out all keep stat

Возник вопрос о подключении большего числа клиентов с моей стороны к этой циске.
Добавлял вот эти строчки, чтобы разрешить клиентам щимиться на циску, но что-то не выходит.

nat on $ext_if from $int_if:network to any -> { 172.16.2.3, 172.16.2.4, 172.16.2.5, 172.16.2.6 }
nat on $ext_if from $int_if:network to any -> { 172.16.2.3, 172.16.2.4, 172.16.2.5, 172.16.2.6 }
nat on $ext_if from $int_if:network to any -> 172.16.2.3/30 source-hash

tcpdump  показывает, что обмен идёт, но потом fin_wait и отвал.
Никто не пытался сделать подобную конструкцию ?



Содержание

Сообщения в этом обсуждении
"Пул адресов NAT в PF FreeBSD"
Отправлено urusha , 29-Июн-09 18:58 
>nat on $ext_if from $int_if:network to any -> { 172.16.2.3, 172.16.2.4, 172.16.2.5, 172.16.2.6 }
>nat on $ext_if from $int_if:network to any -> { 172.16.2.3, 172.16.2.4, 172.16.2.5, 172.16.2.6 }
>nat on $ext_if from $int_if:network to any -> 172.16.2.3/30 source-hash

Из всего этого количества правил будет срабатывать только первое с первым адресом. Зачем вам столько адресов? Ну если уж сильно надо, налепите алиасов на внешний интерфейс...


"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 29-Июн-09 19:58 
>>nat on $ext_if from $int_if:network to any -> { 172.16.2.3, 172.16.2.4, 172.16.2.5, 172.16.2.6 }
>>nat on $ext_if from $int_if:network to any -> { 172.16.2.3, 172.16.2.4, 172.16.2.5, 172.16.2.6 }
>>nat on $ext_if from $int_if:network to any -> 172.16.2.3/30 source-hash
>
>Из всего этого количества правил будет срабатывать только первое с первым адресом.
>Зачем вам столько адресов? Ну если уж сильно надо, налепите алиасов
>на внешний интерфейс...

Спасибо, urusha за Ваш ответ.
Эти правила
>>nat on $ext_if from $int_if:network to any -> { 172.16.2.3, 172.16.2.4, 172.16.2.5, 172.16.2.6 }
>>nat on $ext_if from $int_if:network to any -> 172.16.2.3/30 source-hash

я применял по одиночке, сначала одно, не сработало, второе попробывал. По поводу адресов - удалённая сторона выставила такие требования.
Пара  172.16.2.1<------> 172.16.2.2  отрабатывает, но это для одного клиента,
а очень хочется запустить через 172.16.2.2 клиентов 3,4,5,6 .
Завтра попробую алиасы прикрутить, и оставлю правило нат
nat on $ext_if from $int_if:network to any -> 172.16.2.3/30 source-hash
угу ?
Спасибо, urusha !



"Пул адресов NAT в PF FreeBSD"
Отправлено urusha , 30-Июн-09 00:48 
>Завтра попробую алиасы прикрутить, и оставлю правило нат
>nat on $ext_if from $int_if:network to any -> 172.16.2.3/30 source-hash
>угу ?

Зачем? Нат для того и существует, чтоб под одним адресом крылось много "клиентов". Пишите так:

nat on $ext_if from $int_if:network to any -> 172.16.2.2

и пускайте хоть 1К клиентов


"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 30-Июн-09 09:20 
Спасибо, urusha еще разю. за Ваше внимание!!!

вот что выходит

краткое содерожание конфига
------------------------------------------------------------------------------------------
#------------#
# Interfaces #
#------------#
ext_if="rl0"
int_if="vr0"
#----------#
# Networks #
#----------#
ext_net="172.16.2.0/29"
int_net="10.0.0.0/24"
#----------#
# Adresses #
#----------#
ext_addr="172.16.2.2"
int_addr="10.0.0.155"
------------------------------------------------------------------------------------------
на удалённой стороне создаётся VPN соединение, которое привязыватеся к адресам
пара 172.16.2.2 --- 172.16.2.1 отрабатывает идеально.

установил правило
nat on $ext_if from $int_if:network to any -> ($ext_if)
pfctl -sn
nat on rl0 inet from 10.0.0.0/16 to any -> (rl0) round-robin
pfctl -ss
all gre 172.16.2.1 <- 10.0.0.155       MULTIPLE:MULTIPLE
all gre 10.0.0.155 -> 172.16.2.2 -> 172.16.2.1       MULTIPLE:MULTIPLE
работает только один от адреса 172.16.2.2 !!!

еду дальше, теперь же надо запустить остальных клиентов, через это соединение.
Поменял правило, чтобы у клиентов была жесткая привязка адресов
nat on $ext_if from $int_if:network to any -> 172.16.2.3/30 source-hash
nat on rl0 inet from 10.0.0.0/16 to any -> 172.16.2.0/30 source-hash 0xcaa7736102ad592f8164581be869f30d

кто первый законнектился, тому и повезло
all gre 10.0.0.155 -> 172.16.2.2 -> 172.16.2.1       MULTIPLE:MULTIPLE
all tcp 172.26.98.1:1723 <- 10.0.0.155:55893       TIME_WAIT:TIME_WAIT
all tcp 172.16.2.2:50787 -> 172.16.2.1:1723       TIME_WAIT:TIME_WAIT
all icmp 172.16.2.1:768 <- 10.0.0.155       0:0

вот здесь -  начинает щимится 2-ой клиент, который потом отваливается по тайм-ауту
all icmp 10.0.0.155:768 -> 172.16.2.3:32049 -> 172.26.98.1       0:0
all tcp 172.16.2.1:1723 <- 10.0.0.155:58565       CLOSED:SYN_SENT
all tcp 10.0.0.155:58565 -> 172.16.2.3:60636 -> 172.16.2.1:1723       SYN_SENT:CLOSED
all tcp 172.16.2.1:1723 <- 10.0.0.155:63084       CLOSED:SYN_SENT
all tcp 10.0.0.155:63084 -> 172.16.2.3:50764 -> 172.16.2.1:1723       SYN_SENT:CLOSED
all tcp 172.16.2.1:1723 <- 10.0.0.155:61104       TIME_WAIT:TIME_WAIT
all tcp 10.0.0.155:61104 -> 172.16.2.2:63433 -> 172.16.2.1:1723       TIME_WAIT:TIME_WAIT

т.е. в итоге, кто первый защимился, тот и работает, другие - нет.
На циске поднимается VPN и как сказали, там жесткая привязка должна быть к адресам (когда лезет один с 172.26.98.2 - то всё в шоколаде ),
посему и заманиваюсь на NAT с пулом адресов. Спасибо!



"Пул адресов NAT в PF FreeBSD"
Отправлено urusha , 30-Июн-09 09:52 
>когда лезет один с 172.26.98.2 - то всё в шоколаде

Чего-то не понял я, откуда этот адрес. Дайте вывод netstat -rn


"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 30-Июн-09 10:18 
>>когда лезет один с 172.26.98.2 - то всё в шоколаде
>
>Чего-то не понял я, откуда этот адрес. Дайте вывод netstat -rn

опечатался  172.26.98.2  :(((
вот верно 172.16.2.2

netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            172.16.2.1        UGS         0        0    rl0
10.0.0.0/16        link#2             UC          0        0    vr0
10.0.0.1           00:e0:81:2e:fa:33  UHLW        1     2258    vr0   1064
10.0.0.2           00:e0:81:4a:00:5a  UHLW        1       22    vr0    730
127.0.0.1          127.0.0.1          UH          0        0    lo0
172.16.2.0/29     link#1             UC          0        0    rl0
172.16.2.1        00:0a:41:29:84:f1  UHLW        1      143    rl0    248


"Пул адресов NAT в PF FreeBSD"
Отправлено urusha , 30-Июн-09 10:37 
Для ясности: клиенты имеют адреса 10.я.ч.ц , так? маршрут к 172.16.2.1 (и что там дальше) у них идет через 10.0.0.155, так? ВПН между циской и фрей - pptp? Клиенты сами не цепляются к циске по ВПН, так?
Если все это так, то правило, которое я приводил ранее справедливо. Возможно на циске режутся фрагменты иль еще какая бяка. Попробуйте добавить в начало правил scrub in all.
Не стоит заморачиваться с алиасами. Порты всегда можно прокинуть...

"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 30-Июн-09 11:04 
>Для ясности: клиенты имеют адреса 10.я.ч.ц , так? маршрут к 172.16.2.1 (и
>что там дальше) у них идет через 10.0.0.155, так? ВПН между
>циской и фрей - pptp? Клиенты сами не цепляются к циске
>по ВПН, так?
>Если все это так, то правило, которое я приводил ранее справедливо. Возможно
>на циске режутся фрагменты иль еще какая бяка. Попробуйте добавить в
>начало правил scrub in all.
>Не стоит заморачиваться с алиасами. Порты всегда можно прокинуть...

------------------------------------------------------------------------------
Всё верно, уважаемый urusha

1.вот так лезут
клиенты 10.0.0.х ------> 10.0.0.155------->172.16.2.2---------->Cisco 172.16.2.1
                                       в этом месте и хотел
                                      сделать, чтобы была привязка
                                     к адресам 172.16.2.3 (4,5,6)
              
2.Vpn между циской и FreeBSD не создаётся.
3. сейчас добавлю нормализацию трафика и попробую еще раз.
4.Просто получается, что если не отрабатывается NAT нужно ставить 4 тачки и через эти тачки щимиться на циску, пипец. Я просто в печали
5. Ну и спасибище, еще раз, за Ваши советы !!!!


"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 30-Июн-09 11:13 
добавил , нормализацию
текущее правило

pfctl -sn
nat on rl0 inet from 10.0.0.0/16 to any -> (rl0) round-robin

pfctl -ss | grep 172.16.
all tcp 172.16.2.1:1723 <- 10.0.0.155:63311       ESTABLISHED:ESTABLISHED
all tcp 10.0.0.155:63311 -> 172.16.2.2:50929 -> 172.16.2.1:1723       ESTABLISHED:ESTABLISHED
all gre 172.16.2.1 <- 10.0.0.155       MULTIPLE:MULTIPLE
all gre 10.0.0.155 -> 172.16.2.2 -> 172.16.2.1       MULTIPLE:MULTIPLE


А вот второй чижик полез и ... ни хрена, висит на стадии ввода имени и пароля
all tcp 172.16.2.1:1723 <- 10.0.0.155:63452       TIME_WAIT:TIME_WAIT
all tcp 10.0.0.155:63452 -> 172.16.2.2:56081 -> 172.16.2.1:1723       TIME_WAIT:TIME_WAIT

потом его отваливает система.
В итоге, получается, что 2-ой клиент щимится, коннект состоялся,
клиент вводит имя/пароль и всё - 2-ой чижик по тайм-ауту отваливается, а первый работает как ни в чём не бывало. Лажа на удалённой стороне ? Не может быть...



"Пул адресов NAT в PF FreeBSD"
Отправлено urusha , 30-Июн-09 11:22 
Так они у вас по pptp к циске цепляюся. Спешу огорчить пф не умеет натить более одного соединения по протоколу gre на один и тот же адрес. Поднимайте алиасы, по-моему это поможет.

"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 30-Июн-09 11:35 
>Так они у вас по pptp к циске цепляюся. Спешу огорчить пф
>не умеет натить более одного соединения по протоколу gre на один
>и тот же адрес. Поднимайте алиасы, по-моему это поможет.

Спасибо, еще раз, urusha
т.е.
defaultrouter="172.16.2.1"
gateway_enable="YES"
sshd_enable="YES"
ifconfig_rl0="inet 172.16.2.2  netmask 255.255.255.248"
ifconfig_rl0_alias0="inet 172.16.2.3 netmask 255.255.255.248"
ifconfig_rl0_alias1="inet 172.16.2.4 netmask 255.255.255.248"
ifconfig_rl0_alias2="inet 172.16.2.5 netmask 255.255.255.248"
ifconfig_rl0_alias3="inet 172.16.2.6 netmask 255.255.255.248"
ifconfig_vr0="inet 10.0.0.155  netmask 255.255.0.0"

а в правило NAT
nat on $ext_if from $int_if:network to any -> { 172.16.2.3, 172.16.2.4, 172.16.2.5, 172.16.2.6 }

угу ?


"Пул адресов NAT в PF FreeBSD"
Отправлено urusha , 30-Июн-09 11:47 

>угу ?

не совсем угу, алиасов можно сделать всего 3 (если клиента 4)
потом

>nat on $ext_if from $int_if:network to any -> { 172.16.2.3, 172.16.2.4, 172.16.2.5, 172.16.2.6 }

так все будут натится рандомно. лучше
nat on $ext_if from $int_if:network to any -> 172.16.2.2/30 source-hash

а еще лучше, если знаешь ip клиентов, каждому свое правило написать...


"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 30-Июн-09 12:17 
>[оверквотинг удален]
>
>не совсем угу, алиасов можно сделать всего 3 (если клиента 4)
>потом
>
>>nat on $ext_if from $int_if:network to any -> { 172.16.2.3, 172.16.2.4, 172.16.2.5, 172.16.2.6 }
>
>так все будут натится рандомно. лучше
>nat on $ext_if from $int_if:network to any -> 172.16.2.2/30 source-hash
>
>а еще лучше, если знаешь ip клиентов, каждому свое правило написать...

---------------------------------------------------------------------------
1. алиасов можно сделать всего 3
ifconfig_rl0="inet 172.16.2.2  netmask 255.255.255.248"
ifconfig_rl0_alias0="inet 172.16.2.3 netmask 255.255.255.248"
ifconfig_rl0_alias1="inet 172.16.2.4 netmask 255.255.255.248"
ifconfig_rl0_alias2="inet 172.16.2.5 netmask 255.255.255.248"
ifconfig_vr0="inet 10.0.0.155  netmask 255.255.0.0"

2. по поводу правил

в pf добавляю адреса
#----------#
# Adresses #
#----------#

ext_addr="172.16.2.2"
ext_addr1="172.16.2.3"
ext_addr2="172.16.2.4"
ext_addr3="172.16.2.5"
int_addr="10.0.0.155"

клиентов
#############
# CLIENT 2  #
#############
ip_client2=10.5.0.5

#############
# CLIENT 3  #
#############
ip_client3=10.6.0.5

#############
# CLIENT4   #
#############
ip_client4=10.7.0.5

ну и сами правила
nat on $ext_if from $int_if:network to any -> ($ext_if)
nat on $ext_if from ip_client2 to any -> 172.16.2.3
nat on $ext_if from ip_client3 to any -> 172.16.2.4
nat on $ext_if from ip_client4 to any -> 172.16.2.5

примерно так ?
Спасибо, Вам еще раз, urusha, за внимание !!!



"Пул адресов NAT в PF FreeBSD"
Отправлено urusha , 30-Июн-09 13:05 
>ну и сами правила
>nat on $ext_if from $int_if:network to any -> ($ext_if)
>nat on $ext_if from ip_client2 to any -> 172.16.2.3
>nat on $ext_if from ip_client3 to any -> 172.16.2.4
>nat on $ext_if from ip_client4 to any -> 172.16.2.5
>
>примерно так ?

думаю вот это первым еще надо
nat on $ext_if from ip_client1 to any -> 172.16.2.2

а ваше первое последним сделайте


"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 30-Июн-09 14:54 
>[оверквотинг удален]
>>nat on $ext_if from ip_client2 to any -> 172.16.2.3
>>nat on $ext_if from ip_client3 to any -> 172.16.2.4
>>nat on $ext_if from ip_client4 to any -> 172.16.2.5
>>
>>примерно так ?
>
>думаю вот это первым еще надо
>nat on $ext_if from ip_client1 to any -> 172.16.2.2
>
>а ваше первое последним сделайте

_________________________________________________________________________-
pfctl -ss | grep gre
первый всё ок!
all gre 172.16.2.1 <- 10.0.0.155       MULTIPLE:MULTIPLE
all gre 10.0.0.155 -> 172.16.2.2 -> 172.16.2.1       MULTIPLE:MULTIPLE
all gre 172.16.2.1 <- 10.0.0.155       NO_TRAFFIC:SINGLE

вот второй чиж 10.5.0.5 полез отстрел
all gre 10.5.0.5 -> 172.16.2.3 -> 172.16.2.1       SINGLE:NO_TRAFFIC
----------------------------------------------

pfctl -sn
nat on rl0 inet from 10.5.0.5 to any -> 172.16.2.3
nat on rl0 inet from 10.7.0.5 to any -> 172.16.2.4
nat on rl0 inet from 10.0.0.155 to any -> 172.16.2.2
nat on rl0 inet from 10.0.0.0/16 to any -> (rl0) round-robin

Еще пороюсь в гугле.
Спасибо Вам, urusha, за Ваше потраченное время и ответы!!!


"Пул адресов NAT в PF FreeBSD"
Отправлено urusha , 30-Июн-09 15:34 
Мда, значит алиасами pf не обманешь:) тогда пробуйте натить с помощью ipfw или gre прокси...google знает)



"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 30-Июн-09 16:19 
>Мда, значит алиасами pf не обманешь:) тогда пробуйте натить с помощью ipfw
>или gre прокси...google знает)

Вот здесь ссылка там точно такая же история.
http://forum.sysfaq.ru/lofiversion/index.php/t4045.html
и еще
http://fiery-fenix.kiev.ua/archives/17-FreeBSD_i_GRE._Proksi...

Спасибо, urusha за поддержку ;)


"Пул адресов NAT в PF FreeBSD"
Отправлено urusha , 30-Июн-09 16:47 
>Спасибо, urusha за поддержку ;)

Пожалуйста. Отпишитесь, как настроите.


"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 02-Июл-09 12:42 
>>Спасибо, urusha за поддержку ;)
>
>Пожалуйста. Отпишитесь, как настроите.

Вот собственно взял за основу пример
http://fiery-fenix.kiev.ua/archives/17-FreeBSD_i_GRE._Proksi...

----------------------------------------
#Интерфейс локальной сети
localnet_if="rl0"
#Интерфейс смотрящий в интернет
internet_if="rl1"

#Собственно NAT
nat on $internet_if from ! $internet_if to any -> $internet_if
# А теперь PPTP
# Все запросы по PPTP из локальной сети направляем на 127.0.0.1 (он указан в настройках frickin'а)
rdr on $localnet_if proto tcp from any to any port 1723 ->127.0.0.1 port 1723
# Весь GRE направляем на него же
# GRE из локальной сети на frickin
rdr on $localnet_if proto gre from any to any ->127.0.0.1
# А вот этой строки и нет в примере /usr/local/share/doc/frickin/INSTALL
# Весь GRE из интернета направляем на frickin
rdr on $internet_if proto gre from any to any -> 127.0.0.1

#Чтобы не загружать пример просто разрешу всё
#
pass quick on rdr on $localnet_if all
pass quick on rdr on $internet_if all
--------------------------------------------------------------------

вот здесь примерно всё и заканчивается
хочу применить правило
pfctl -nf /etc/pf.conf
/etc/pf.conf:54: syntax error
/etc/pf.conf:55: syntax error

ругается на эти строки
pass quick on rdr on $localnet_if all
pass quick on rdr on $internet_if all

а так ситуация не изменилась, один клиент защимился, другим  - хода нет.
:(



"Пул адресов NAT в PF FreeBSD"
Отправлено urusha , 02-Июл-09 21:47 
>ругается на эти строки
>pass quick on rdr on $localnet_if all
>pass quick on rdr on $internet_if all

вполне оправданно, там опечатка. думается имелось ввиду:
pass quick on $localnet_if all


"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 03-Июл-09 10:52 
>>ругается на эти строки
>>pass quick on rdr on $localnet_if all
>>pass quick on rdr on $internet_if all
>
>вполне оправданно, там опечатка. думается имелось ввиду:
>pass quick on $localnet_if all

Очередной, раз спасибо Вам, urusha
Проверю.


"Пул адресов NAT в PF FreeBSD"
Отправлено beaver33 , 07-Июл-09 15:31 
>>>ругается на эти строки
>>>pass quick on rdr on $localnet_if all
>>>pass quick on rdr on $internet_if all
>>
>>вполне оправданно, там опечатка. думается имелось ввиду:
>>pass quick on $localnet_if all
>
>Очередной, раз спасибо Вам, urusha
>Проверю.

Привет, urusha
в общем поджали сроки, взял я CISCO 1841 и воспламенил всё :)
полное счастье.
Плохо что не получилось на FreeBSD. Спасибо, Вам еще раз за советы и коментарии.