The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"FreeBSD 8.2  Kernel NAT + mpd5"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Сеть. проблемы, диагностика / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от Merlin_ua (ok) on 06-Янв-12, 16:31 
Добрый день!
       Есть FreeBSD 8.2, сетевуха rl0 смотрит в локалку 192.168.1.0/24, ADSL модем - смотрит в интернет, висит модем на том же rl0, IP модема 192.168.1.252.
       Задача - поднять  mpd5 -> pppoe -> ADSL интернет и раздать на 192.168.1.0/24.
Интернет раздается через IPFW + Kernel NAT

С поднятием интернета все гуд. Проблема состоит в следующем. После поднятия соединения в интернет с помощью mpd:

-если ручками в консоли прописать

ipfw nat 1 config ip x.x.x.x log same_ports unreg_only
ipfw add nat 1 all from 192.168.1.0/24 to any
ipfw add nat 1 all from any to x.x.x.x

все работает на УРА.

-если попытаться автоматизировать процесс и сделать это все в скрипте mpd-ip-up
/usr/local/etc/mpd5/mpd-ip-up:
1. #!/bin/sh
2. ipfw -q flush
3. ipfw nat 1 config ip $3 log same_ports unreg_only
4. ipfw add nat 1 all from 192.168.1.0/24 to any
5. ipfw add nat 1 all from any to $3

то возникает следующая ситуация: все строки отрабатываются, кроме 3-й. Соответсвенно ни о каком интернете речи быть не может. Если потом в консоле прописать:
ipfw nat 1 config ip x.x.x.x log same_ports unreg_only то нет появляется.

Вопрос следующий: почему не отрабатывает 3-я строка и как это исправить?


Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от sherlock (ok) on 06-Янв-12, 18:11 

> -если попытаться автоматизировать процесс и сделать это все в скрипте mpd-ip-up
> /usr/local/etc/mpd5/mpd-ip-up:
> 1. #!/bin/sh
> 2. ipfw -q flush
> 3. ipfw nat 1 config ip $3 log same_ports unreg_only
> 4. ipfw add nat 1 all from 192.168.1.0/24 to any
> 5. ipfw add nat 1 all from any to $3
> Вопрос следующий: почему не отрабатывает 3-я строка и как это исправить?

лень сейчас лезть в доки смотреть сколько параметров передает mpd в скрипт, если $3 последний параметр, то могу предположить, что в нем последним символом может быть "\n", т.е. перевод строки, тогда для третий строки это будет ошибкой, а в пятой все ок. Откусывайте.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от Merlin_ua (ok) on 06-Янв-12, 19:49 
> лень сейчас лезть в доки смотреть сколько параметров передает mpd в скрипт,
> если $3 последний параметр, то могу предположить, что в нем последним
> символом может быть "\n", т.е. перевод строки, тогда для третий строки
> это будет ошибкой, а в пятой все ок. Откусывайте.

Параметров как минимум 4, откусывал - не помогает.


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от YuriStep on 07-Янв-12, 00:19 
1 - а что "говорит" ipfw show до и после выполнения mpd-ip-up ?
2 - что в логах ?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от михалыч (ok) on 07-Янв-12, 11:27 
>[оверквотинг удален]
> 1. #!/bin/sh
> 2. ipfw -q flush
> 3. ipfw nat 1 config ip $3 log same_ports unreg_only
> 4. ipfw add nat 1 all from 192.168.1.0/24 to any
> 5. ipfw add nat 1 all from any to $3
> то возникает следующая ситуация: все строки отрабатываются, кроме 3-й. Соответсвенно ни
> о каком интернете речи быть не может. Если потом в консоле
> прописать:
> ipfw nat 1 config ip x.x.x.x log same_ports unreg_only то нет появляется.
> Вопрос следующий: почему не отрабатывает 3-я строка и как это исправить?

Все просто.
Строку 3 нужно пустить после строки 5.
И будет счастье. =)
Сначала объявляем нат, а потом кониг, однако.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от Merlin_ua (ok) on 07-Янв-12, 12:07 
>>1 - а что "говорит" ipfw show до и после выполнения mpd-ip-up ?
>>2 - что в логах ?

1. - До - показывает дефолтное правило, после - добавляются правила 4,5 строки. Счетчики по правилу 4-й строки нулевые, если потом ручками сконфить нат - все гуд.
2. - в логах mpd ничего, что может навести на нужный путь, в логах ipfw - почемуто все сообщения от Kernel

>>Все просто.
>>Строку 3 нужно пустить после строки 5.
>>И будет счастье. =)
>>Сначала объявляем нат, а потом кониг, однако.

Не просто. Хотя такое и допустимо (сначала правила, потом конфитг ната), пофиг где ставить 3 строку.

Я выяснил следующее: параметром $3 в mpd является локальный IP присваеваемый провайдером. Так вот, этот IP имеет формат х.х.х.х/32. Для правила 5-й строки - это нормально, а вот для конфига НАТ - это неправильный IP адрес. Нужно как-то откинуть последние 3 символа, т.е. - /32. Думаю тогда все будет ок!

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от михалыч (ok) on 07-Янв-12, 12:37 
>[оверквотинг удален]
>>>Строку 3 нужно пустить после строки 5.
>>>И будет счастье. =)
>>>Сначала объявляем нат, а потом кониг, однако.
> Не просто. Хотя такое и допустимо (сначала правила, потом конфитг ната), пофиг
> где ставить 3 строку.
> Я выяснил следующее: параметром $3 в mpd является локальный IP присваеваемый провайдером.
> Так вот, этот IP имеет формат х.х.х.х/32. Для правила 5-й строки
> - это нормально, а вот для конфига НАТ - это неправильный
> IP адрес. Нужно как-то откинуть последние 3 символа, т.е. - /32.
> Думаю тогда все будет ок!

А! Я дико извиняюсь, невнимательность моя :(
Да, у вас $3 (IP адрес) в 3-ей строке, у меня же (в моем конфиге) фигурирует $1 (интерфейс)
выходит, что я несколько поторопиляся с ответом.

Вот рабочий конфиг, только что скопипастил (у себя =))

#!/bin/sh
/sbin/ipfw -q add 60 nat 1 all from any to any out xmit $1
/sbin/ipfw -q add 61 nat 1 all from any to $3 in recv $1

/sbin/ipfw -q nat 1 config if $1 reset

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от михалыч (ok) on 07-Янв-12, 12:37 
С IP не пробовал.
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от Merlin_ua (ok) on 07-Янв-12, 12:48 
   Всем огромное спасибо за участие.
   Михалыч, можеш не извеняться. На этом форуме меня очень радует то, что людей отсюда не посылают куда-подальше, как это делается на на некоторых форумах.
   Я Kernel NAT настраиваю впервые. Раньше я делал это через демон natd, а вот друг попросил собрать небольшой сервер, дабы раздать инет по локалке, и вот решил попробывать Kernel NAT. Я даже не предполагал. что можно настроить не через IP а через интерфейс (ну какие примеры нагуглил). Но у меня получилось и через IP. В данном случае 3-я строка выглядит следующим образом:
1. #!/bin/sh
2. ipfw -q flush
3. ipfw nat 1 config ip ${3%/32} log same_ports unreg_only
4. ipfw add nat 1 all from 192.168.1.0/24 to any
5. ipfw add nat 1 all from any to $3

Еще раз: всем огромное спасибо за участие!

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от Merlin_ua (ok) on 07-Янв-12, 12:54 
Да, вот еще, а как просмотреть конфиги ната в ipfw?
Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от _sirius_ (ok) on 07-Янв-12, 13:05 
man ipfw

ipfw nat 1 show config


Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от YuriStep on 07-Янв-12, 15:09 
> 1. - До - показывает дефолтное правило, после - добавляются правила 4,5
> строки. Счетчики по правилу 4-й строки нулевые, если потом ручками сконфить
> нат - все гуд.
> 2. - в логах mpd ничего, что может навести на нужный путь,
> в логах ipfw - почемуто все сообщения от Kernel

... вот в этом самом месте нужно было "замереть" и подумать :)

> Хотя такое и допустимо (сначала правила, потом конфитг ната)

... абсолютно верно ...

> Я выяснил следующее: параметром $3 в mpd является локальный IP присваеваемый провайдером.

... вот в этом месте нужно было повторить процесс "замереть и подумать" - Вы пытаетесь скормить ipfw конфигурацию для ната, с настройкой на получаемый "в динамике" адрес... "не гут", совсем "не гут"... даже если это адрес, прибитый для Вас у провайдера гвоздями... Правильнее было-бы в данном случае - опереться в конфигурации на имя интерфейса - параметр $1 ... и получить конфигу типа:

/sbin/ipfw -q nat 2 config if $1 reset unreg_only same_ports redirect_port tcp 192.168.0.7:3389 3389 ....

/sbin/ipfw -q add 30021 nat 2 all from \{ 192.168.0.0/24 or 192.168.100.0/24 \} to any out xmit $1                                                                                        
/sbin/ipfw -q add 30022 nat 2 all from any to $3 in recv $1

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

12. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от Merlin_ua (ok) on 07-Янв-12, 23:39 
> ... вот в этом самом месте нужно было "замереть" и подумать :)

Да, Вы правы на все 100! Замирал и думал. А пока думал решил написать на форум, обратиться а помощью! Думаю в этом нет ничего дурного.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от Merlin_ua (ok) on 07-Янв-12, 23:46 
>[оверквотинг удален]
> получаемый "в динамике" адрес... "не гут", совсем "не гут"... даже если
> это адрес, прибитый для Вас у провайдера гвоздями... Правильнее было-бы в
> данном случае - опереться в конфигурации на имя интерфейса - параметр
> $1 ... и получить конфигу типа:
> /sbin/ipfw -q nat 2 config if $1 reset unreg_only same_ports redirect_port tcp
> 192.168.0.7:3389 3389 ....
> /sbin/ipfw -q add 30021 nat 2 all from \{ 192.168.0.0/24 or 192.168.100.0/24
> \} to any out xmit $1
> /sbin/ipfw -q add 30022 nat 2 all from any to $3 in
> recv $1

Про то, что мне не было известно о том, что можно опереться на интерфейс - я уже писал. В дальнейшем если прийдется еще понимать и PPPoE Server с помощью того же mpd то динамическим окажется и сам интерфейс. Но как бы там не было, я думаю, что все равно к чему привязывать: толи $1, или же $3. Единственное ято я упустил из внимания, так это формат $3 параметра. Для того что б его можно было скармливать данным способом, нужно отбросить 3 последних символа, т.е. /32


Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

14. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от YuriStep on 08-Янв-12, 00:43 
> ... Для того что б его можно было скармливать данным способом,
> нужно отбросить 3 последних символа, т.е. /32

Странно, у меня при статическом адресе - ничего не отбрасывается - и kernel nat спокойно работает ... Есть подозрение, что у Вас просто к моменту обработки скрипта либо интерфейс не успевает получить ip-адрес, либо mpd оперирует данными из кэша ;) Ради интереса можно было-бы втиснуть в скрипт "эху" - поглядеть что там на самом деле в этот момент за значения, ну и естественно попробовать именно в таком синтаксисе вбить их с консоли ;)
А вообще - ИМХО - в связке mpd & ipwf - возьмите за правило - если у Вас интерфейс "динамика" - пусть даже с приколоченным гвоздями адресом - везде, где только возможно - опирайтесь на имя интерфейса, а не его адрес... IPFW штука умная, в большинстве случаев - сама замечательно "разбирает" :)


Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "FreeBSD 8.2  Kernel NAT + mpd5"  +/
Сообщение от Merlin_ua (ok) on 08-Янв-12, 21:39 
>[оверквотинг удален]
> к моменту обработки скрипта либо интерфейс не успевает получить ip-адрес, либо
> mpd оперирует данными из кэша ;) Ради интереса можно было-бы втиснуть
> в скрипт "эху" - поглядеть что там на самом деле в
> этот момент за значения, ну и естественно попробовать именно в таком
> синтаксисе вбить их с консоли ;)
> А вообще - ИМХО - в связке mpd & ipwf - возьмите
> за правило - если у Вас интерфейс "динамика" - пусть даже
> с приколоченным гвоздями адресом - везде, где только возможно - опирайтесь
> на имя интерфейса, а не его адрес... IPFW штука умная, в
> большинстве случаев - сама замечательно "разбирает" :)

echo $3 > file - выдает адрес х.х.х.х/32. Если вбить онное из консоли, т.е
ipfw nat 1 config ip x.x.x.x/32  - пишет bad ip adress, если же вбивать
ipfw nat 1 config ip x.x.x.x - съедает без проблем. Я в скрипте отбросил /32 и все заработало. Скрип не может стартануть до получения IP адреса, он то в доках обычно и фиурирует как ip-up, и стартует когда готовы все четыре параметра. А какой у Вас mpd? Я как-то одному знакомому настраивал на mpd4, так насколько я помню (но могу и ошибаться, пару лет назад это было) там не было такой ситуации. mpd4 и mpd5 довольно таки сильно отличаются.

   А за совет - спасибо. Обязательно воспользуюсь. Но хочу сказать, что однажды у меня была ситуация, где поднималось три ната, два из которых в одну сеть, плюс спутник и наземный канал. Поднималось это еще на FreeBSD 4.0 + pppd + natd там такие извраты приходилось применять. Но тогда еще сильно сказывалось отсутствие какого-либо опыта в данной теме и срочность выполнения поставленной задачи. Мне тогда пророчествовали, что данное вообще не реально связать, но слава Богу получилось.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру