Всем привет.
Возник вот такой вопрос - есть система,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-hashtcpdump показывает, что обмен идёт, но потом fin_wait и отвал.
Никто не пытался сделать подобную конструкцию ?
>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 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 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К клиентов
Спасибо, 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 с пулом адресов. Спасибо!
>когда лезет один с 172.26.98.2 - то всё в шоколадеЧего-то не понял я, откуда этот адрес. Дайте вывод netstat -rn
>>когда лезет один с 172.26.98.2 - то всё в шоколаде
>
>Чего-то не понял я, откуда этот адрес. Дайте вывод netstat -rnопечатался 172.26.98.2 :(((
вот верно 172.16.2.2netstat -rn
Routing tablesInternet:
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
Для ясности: клиенты имеют адреса 10.я.ч.ц , так? маршрут к 172.16.2.1 (и что там дальше) у них идет через 10.0.0.155, так? ВПН между циской и фрей - pptp? Клиенты сами не цепляются к циске по ВПН, так?
Если все это так, то правило, которое я приводил ранее справедливо. Возможно на циске режутся фрагменты иль еще какая бяка. Попробуйте добавить в начало правил scrub in all.
Не стоит заморачиваться с алиасами. Порты всегда можно прокинуть...
>Для ясности: клиенты имеют адреса 10.я.ч.ц , так? маршрут к 172.16.2.1 (и
>что там дальше) у них идет через 10.0.0.155, так? ВПН между
>циской и фрей - pptp? Клиенты сами не цепляются к циске
>по ВПН, так?
>Если все это так, то правило, которое я приводил ранее справедливо. Возможно
>на циске режутся фрагменты иль еще какая бяка. Попробуйте добавить в
>начало правил scrub in all.
>Не стоит заморачиваться с алиасами. Порты всегда можно прокинуть...------------------------------------------------------------------------------
Всё верно, уважаемый urusha1.вот так лезут
клиенты 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. Ну и спасибище, еще раз, за Ваши советы !!!!
добавил , нормализацию
текущее правилоpfctl -sn
nat on rl0 inet from 10.0.0.0/16 to any -> (rl0) round-robinpfctl -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-ой чижик по тайм-ауту отваливается, а первый работает как ни в чём не бывало. Лажа на удалённой стороне ? Не может быть...
Так они у вас по pptp к циске цепляюся. Спешу огорчить пф не умеет натить более одного соединения по протоколу gre на один и тот же адрес. Поднимайте алиасы, по-моему это поможет.
>Так они у вас по 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 }угу ?
>угу ?не совсем угу, алиасов можно сделать всего 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 клиентов, каждому свое правило написать...
>[оверквотинг удален]
>
>не совсем угу, алиасов можно сделать всего 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 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 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, за Ваше потраченное время и ответы!!!
Мда, значит алиасами pf не обманешь:) тогда пробуйте натить с помощью ipfw или gre прокси...google знает)
>Мда, значит алиасами 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 за поддержку ;)
>Спасибо, urusha за поддержку ;)Пожалуйста. Отпишитесь, как настроите.
>>Спасибо, 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а так ситуация не изменилась, один клиент защимился, другим - хода нет.
:(
>ругается на эти строки
>pass quick on rdr on $localnet_if all
>pass quick on rdr on $internet_if allвполне оправданно, там опечатка. думается имелось ввиду:
pass quick on $localnet_if all
>>ругается на эти строки
>>pass quick on rdr on $localnet_if all
>>pass quick on rdr on $internet_if all
>
>вполне оправданно, там опечатка. думается имелось ввиду:
>pass quick on $localnet_if allОчередной, раз спасибо Вам, urusha
Проверю.
>>>ругается на эти строки
>>>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. Спасибо, Вам еще раз за советы и коментарии.