Добрый день!
Есть 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-я строка и как это исправить?
> -если попытаться автоматизировать процесс и сделать это все в скрипте 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", т.е. перевод строки, тогда для третий строки это будет ошибкой, а в пятой все ок. Откусывайте.
> лень сейчас лезть в доки смотреть сколько параметров передает mpd в скрипт,
> если $3 последний параметр, то могу предположить, что в нем последним
> символом может быть "\n", т.е. перевод строки, тогда для третий строки
> это будет ошибкой, а в пятой все ок. Откусывайте.Параметров как минимум 4, откусывал - не помогает.
1 - а что "говорит" ipfw show до и после выполнения mpd-ip-up ?
2 - что в логах ?
>[оверквотинг удален]
> 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.
И будет счастье. =)
Сначала объявляем нат, а потом кониг, однако.
>>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. Думаю тогда все будет ок!
>[оверквотинг удален]
>>>Строку 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
С IP не пробовал.
Всем огромное спасибо за участие.
Михалыч, можеш не извеняться. На этом форуме меня очень радует то, что людей отсюда не посылают куда-подальше, как это делается на на некоторых форумах.
Я 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Еще раз: всем огромное спасибо за участие!
Да, вот еще, а как просмотреть конфиги ната в ipfw?
man ipfwipfw nat 1 show config
> 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
> ... вот в этом самом месте нужно было "замереть" и подумать :)Да, Вы правы на все 100! Замирал и думал. А пока думал решил написать на форум, обратиться а помощью! Думаю в этом нет ничего дурного.
>[оверквотинг удален]
> получаемый "в динамике" адрес... "не гут", совсем "не гут"... даже если
> это адрес, прибитый для Вас у провайдера гвоздями... Правильнее было-бы в
> данном случае - опереться в конфигурации на имя интерфейса - параметр
> $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
> ... Для того что б его можно было скармливать данным способом,
> нужно отбросить 3 последних символа, т.е. /32Странно, у меня при статическом адресе - ничего не отбрасывается - и kernel nat спокойно работает ... Есть подозрение, что у Вас просто к моменту обработки скрипта либо интерфейс не успевает получить ip-адрес, либо mpd оперирует данными из кэша ;) Ради интереса можно было-бы втиснуть в скрипт "эху" - поглядеть что там на самом деле в этот момент за значения, ну и естественно попробовать именно в таком синтаксисе вбить их с консоли ;)
А вообще - ИМХО - в связке mpd & ipwf - возьмите за правило - если у Вас интерфейс "динамика" - пусть даже с приколоченным гвоздями адресом - везде, где только возможно - опирайтесь на имя интерфейса, а не его адрес... IPFW штука умная, в большинстве случаев - сама замечательно "разбирает" :)
>[оверквотинг удален]
> к моменту обработки скрипта либо интерфейс не успевает получить 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 там такие извраты приходилось применять. Но тогда еще сильно сказывалось отсутствие какого-либо опыта в данной теме и срочность выполнения поставленной задачи. Мне тогда пророчествовали, что данное вообще не реально связать, но слава Богу получилось.