Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » FreeBSD: Не работает NAT

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

SilverLion

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
После перезагрузки прокси на FreeBSD 4.8 перестал лезть в инет. Пробовал делать пинг наружу - не идет. В правилах файрвола отключил divert на natd, по http могу выйти, а почта и аська не работают.  
 
Где искать?  
 
P.S. Если что рассказал непонятно, спрашивайте, буду пытаться объяснить. А пока извините, не спец.
 
P.P.S.
Проблема была в том, что при старте системы не запускается natd, хотя в rc.conf включен. Если знаете почему это может быть и как решить, приму с благодарностью.

Всего записей: 45 | Зарегистр. 27-01-2003 | Отправлено: 19:14 24-04-2004 | Исправлено: lynx, 01:56 02-12-2004
EndoR



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Присоединяюсь к вопросу.  
Содержимое rc.conf:

Код:
 
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_type="simple"
natd_program="/sbin/natd"
natd_enable="YES"
natd_flags="-interface em0"
 

При загрузке говорит: ipfw2 loaded, divert disabled...  
Какая переменная за это отвечает? как узнать вообще, включен divert в текущем ядре или нет? И как его включить, если нет? Заранее благодарен.

----------
Fear is an efficient tool of management.

Всего записей: 1159 | Зарегистр. 24-01-2002 | Отправлено: 15:35 11-06-2004
Drron

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Почитайте статью http://bardak.blood.ru/work/freebsd/shluz.htm Мне в свое время она помогла.

Всего записей: 826 | Зарегистр. 20-11-2003 | Отправлено: 17:22 11-06-2004
wchik



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SilverLion

Цитата:
В правилах файрвола отключил divert на natd

Проблема в этом
это же и есть нат!!!
 
Добавлено
EndoR
как узнать вообще, включен divert в текущем ядре или нет
Ты ядро новое создавал?
если нет то не включен
 
если создавал, глянь конфиги ядра там должны присутствовать строки
если этих нет то не включен, просто добавь и делай новое ядро
 
options IPFIREWALL  
options IPDIVERT  
options DUMMYNET  
 
 
options         IPFIREWALL_VERBOSE    
options         IPFIREWALL_VERBOSE_LIMIT=100    
Эти две не обязательно но желательно для возможности писать инфу в суслог

Всего записей: 518 | Зарегистр. 05-03-2002 | Отправлено: 10:16 14-06-2004
pazdak

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SilverLion

Цитата:
После перезагрузки прокси на FreeBSD 4.8 перестал лезть в инет.  

А до этого лазил, что ли ?
Если ДА, то тут в другом проблема, а не в ядре...
Если НЕТ, то нужна следующая строчка в ядре:
options IPDIVERT
она как раз и отвечает за divert пакетов, как вариант natd
 
ссылку данную выше неплохо бы почитать ВАМ ...

Всего записей: 381 | Зарегистр. 13-02-2003 | Отправлено: 08:16 15-06-2004
EndoR



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
wchik
еще рекомендовано добавить options IPFIREWALL_FORWARD. Когда добавляю, то выдается:

Код:
config PROXY
PROXY: unknown option "IPFIREWALL_FORWARD"

это критично? как этого избежать?
 
Добавлено
Собралось всё и без этого пункта.
Теперь возникает ессно вопрос, почему nat не работает Какой вообще смысл у divert? мы кидаем пакеты на порт? а если мне нужно, чтобы еще и icmp через нат ходило? и какой в divert способ построения правил?
опеннет перекопал. везде написано для тех, кто знает
смысл - нужно получить замену линуховым правилам:
[root@bla endor]# iptables -t nat -L
...
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       tcp  --  192.168.20.0/24      anywhere           tcp dpt:smtp to:1.2.3.4
SNAT       tcp  --  192.168.21.0/24      anywhere           tcp dpt:smtp to:1.2.3.4
SNAT       tcp  --  192.168.20.0/24      anywhere           tcp dpt:pop3 to:1.2.3.4
SNAT       tcp  --  192.168.21.0/24      anywhere           tcp dpt:pop3 to:1.2.3.4
SNAT       udp  --  192.168.20.0/24      anywhere           udp dpt:domain to:1.2.3.4
SNAT       udp  --  192.168.21.0/24      anywhere           udp dpt:domain to:1.2.3.4
SNAT       tcp  --  192.168.20.0/24      anywhere           tcp dpt:8000 to:1.2.3.4
SNAT       tcp  --  192.168.20.0/24      anywhere           tcp dpt:icq to:1.2.3.4
SNAT       icmp --  192.168.20.0/24      anywhere           to:1.2.3.4
...
как во фре это реализовать с помощью ipfw+ natd?
ЗЫ1 кстати, у меня не написано ничего типа -redirect-port. это нужно?

----------
Fear is an efficient tool of management.

Всего записей: 1159 | Зарегистр. 24-01-2002 | Отправлено: 12:07 16-06-2004 | Исправлено: EndoR, 16:20 16-06-2004
Drron

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В rc.conf должнобыть следующее
gateway_enable="YES"  
firewall_enable="YES"  
firewall_type="OPEN"  
natd_enable="YES"  
natd_interface="ваш внешний интерфэйс"  
natd_flags="-f /etc/natd.conf"  
 
создаём файл /etc/natd.conf и в нём пишем  
same_ports yes  
use_sockets yes  
 
делаем команды  
mv /etc/rc.firewall /etc/rc.firewall.old  
touch /etc/rc.firewall  
ee /etc/rc.firewall  
и в нём пишем  
#!/bin/sh  
#  
# enable transfer via loopback  
/sbin/ipfw -q flush  
/sbin/ipfw add divert natd all from any to any via ваш внешний интерфэйс  
/sbin/ipfw add pass all from any to any  
 
Если необходимо транслировать только одну подсеть то вместо двух последних строк должно быть  
/sbin/ipfw add divert natd all from 192.168.2.0/24 to any via ваш внешний интерфэйс  
/sbin/ipfw add divert natd all from any to me
При этом можно использовать различные конструкции с ограничением скорости, например
 
/sbin/ipfw -q add pipe 1 ip from any to 192.168.0.10
/sbin/ipfw -q pipe 1 config bw 200Kbit/s
/sbin/ipfw -q add divert natd all from 192.168.0.10 to any via ed0
/sbin/ipfw -q add pipe 2 ip from any to 192.168.0.11
/sbin/ipfw -q pipe 2 config bw 200Kbit/s
/sbin/ipfw -q add divert natd all from 192.168.0.1 to any via ed0
................................................................................
/sbin/ipfw add pass all from any to any
 
В этом случае в файл sysctl.conf необходимодобавить  
net.inet.ip.fw.one_pass=0

Всего записей: 826 | Зарегистр. 20-11-2003 | Отправлено: 16:56 16-06-2004 | Исправлено: Drron, 16:59 16-06-2004
EndoR



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Drron
всё это у меня есть.
для ясности пишу содержимое конфигов:
rc.conf:

Код:
 
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_type="simple"
natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="em0"
natd_flags="-f /etc/natd.conf -p 8668"
sshd_enable="YES"
squid_enable="YES"
 

ipfw show

Код:
 
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
00400 deny ip from 192.168.20.0/24 to any in via em0
00500 deny ip from 1.2.3.0/27 to any in via em1
00600 deny ip from any to 10.0.0.0/8 via em0
00700 deny ip from any to 172.16.0.0/12 via em0
00800 deny ip from any to 192.168.0.0/16 via em0
00900 deny ip from any to 0.0.0.0/8 via em0
01000 deny ip from any to 169.254.0.0/16 via em0
01100 deny ip from any to 192.0.2.0/24 via em0
01200 deny ip from any to 224.0.0.0/4 via em0
01300 deny ip from any to 240.0.0.0/4 via em0
01400 deny ip from 10.0.0.0/8 to any via em0
01500 deny ip from 172.16.0.0/12 to any via em0
01600 deny ip from 192.168.0.0/16 to any via em0
01700 deny ip from 0.0.0.0/8 to any via em0
01800 deny ip from 169.254.0.0/16 to any via em0
01900 deny ip from 192.0.2.0/24 to any via em0
02000 deny ip from 224.0.0.0/4 to any via em0
02100 deny ip from 240.0.0.0/4 to any via em0
02200 allow tcp from any to any established
02300 allow ip from any to any frag
02400 divert 8668 all from 192.168.20.0 to any out xmit em0
02500 divert 8668 all from any to 1.2.3.4
02600 allow icmp from any to any
65535 deny ip from any to any
 

...и я не пингую из сети 192.168.20.0 адрес 1.2.3.4. непонятно, почему

----------
Fear is an efficient tool of management.

Всего записей: 1159 | Зарегистр. 24-01-2002 | Отправлено: 17:14 16-06-2004
Zmey



Strangled by Lynx
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Drron
А где опции которые нужно указать в ядре?
 
 
Вы народ не умеете пользоваться наверное очень полезной штукой называется она man natd там ведь серым по черному написано:
 
добавляем в ядро опции
 
 options IPFIREWALL
 options IPDIVERT
 
пересобираем ядро
 
Правим
vim /etc/rc.conf
gateway_enable=YES
или вместо этого выполняем команду
sysctl net.inet.ip.forwarding=1
 
К примеру внешний интерфейс у нас ed0
 
запускаем natd:
 
natd -interface ed0
 
в правила фаервола добавляем
 
/sbin/ipfw add divert natd all from any to any via ed0
/sbin/ipfw add pass all from any to any
 
Рекомендую проверить что у всех у кого что-то неработает все сделано именно так как здесь написано, а потом задавайте вопросы
 
Добавлено

Цитата:
...и я не пингую из сети 192.168.20.0 адрес 1.2.3.4. непонятно, почему


Цитата:
02400 divert 8668 all from 192.168.20.0 to any out xmit em0

 
Может быть нужно исправить на  
02400 divert 8668 all from 192.168.20.0/24 to any out xmit em0

Всего записей: 303 | Зарегистр. 07-12-2001 | Отправлено: 17:18 16-06-2004
EndoR



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Zmey

Цитата:
добавляем в ядро опции  
 
 options IPFIREWALL  
 options IPDIVERT  
 
пересобираем ядро  
 
Правим  
vim /etc/rc.conf  
gateway_enable=YES  
или вместо этого выполняем команду  
sysctl net.inet.ip.forwarding=1  
 
К примеру внешний интерфейс у нас ed0  
 
запускаем natd:  
 
natd -interface ed0  
 
в правила фаервола добавляем  
 
/sbin/ipfw add divert natd all from any to any via ed0  
/sbin/ipfw add pass all from any to any  
 
Рекомендую проверить что у всех у кого что-то неработает все сделано именно так как здесь написано, а потом задавайте вопросы  

я же написал, что всё сделал, как в статье и ядро пересобрал. проблема осталась. и man natd тоже читали. поэтому и задаем вопросы.

----------
Fear is an efficient tool of management.

Всего записей: 1159 | Зарегистр. 24-01-2002 | Отправлено: 17:24 16-06-2004
Zmey



Strangled by Lynx
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
EndoR
 
02400 divert 8668 all from 192.168.20.0/24 to any out xmit em0
В фаерволе так написано или нет?? ^^^

Всего записей: 303 | Зарегистр. 07-12-2001 | Отправлено: 17:39 16-06-2004
EndoR



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
тупой баклан....
не углядел, что у меня в rc.conf нету gateway_enable="YES"
сорь
сейчас покопаюсь малец, еще пара вопросов будет.
первый из них - почему, когда пишу в правиле divert natd, то кидается на порт 8668? в rc.conf у меня запускается например на порт 8678. соответственно, правила не работали.
и почему надо писать out xmit?  нельзя просто out?
 
Добавлено

Цитата:
первый из них - почему, когда пишу в правиле divert natd, то кидается на порт 8668? в rc.conf у меня запускается например на порт 8678. соответственно, правила не работали.  

так. с этим разобрались   /etc/services

----------
Fear is an efficient tool of management.

Всего записей: 1159 | Зарегистр. 24-01-2002 | Отправлено: 17:45 16-06-2004 | Исправлено: EndoR, 17:47 16-06-2004
Zmey



Strangled by Lynx
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
и почему надо писать out xmit?  нельзя просто out?

 
 
Можно сколько угодно раз
 
Вот как написано в примерах в man ipfw

Цитата:
 
to any out
to any in
 

 
А вот если тебе нужно интерфейс указывать, тогда нужно или xmit или via

Всего записей: 303 | Зарегистр. 07-12-2001 | Отправлено: 18:28 16-06-2004 | Исправлено: Zmey, 18:29 16-06-2004
EndoR



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
А вот если тебе нужно интерфейс указывать, тогда нужно или xmit или via  

пока смутно понимаю разницу между xmit, recv и via
 
кстати, а какой порядок прохождения правил? вроде написано, что после divert пакет дальше по правилам не идет. тогда всю фильтрацию по адресам надо ставить до divert?

----------
Fear is an efficient tool of management.

Всего записей: 1159 | Зарегистр. 24-01-2002 | Отправлено: 19:22 16-06-2004 | Исправлено: EndoR, 19:26 16-06-2004
Zmey



Strangled by Lynx
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
пока смутно понимаю разницу между xmit, recv и via  

Нет разницы. Это также как и то что ты можешь написать allow, а можешь написать pass.
 

Цитата:
тогда всю фильтрацию по адресам надо ставить до divert?

Насколько я понимаю то да.

Всего записей: 303 | Зарегистр. 07-12-2001 | Отправлено: 07:06 17-06-2004
wchik



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EndoR
нет как-раз наоборот, всю фильтрацию по адресам надо ставить ПОСЛЕ divert
т.е. можно и до, но лучше после
например если ты указываешь правило

Цитата:
allow ip from any to any 25

а потом

Цитата:
divert 8668 all from any to any via eth0

и

Цитата:
allow ip from any to any

 
то у тебя будет нат работать для всего КРОМЕ 25-го порта
потому как любые запросы о получении почты из внешней сети будут роутиться а не нататься соответственно будут зарезаты пограничным маршрутизатором
 
я делаю наоборот:

Цитата:
divert 8668 all from any to any via eth0
allow ip from any to any 25
allow ip from any 25 to any
...
deny ip from any to any
 

то-есть дивертится все, а потом уже то что надо разрешается а остальное режется

Всего записей: 518 | Зарегистр. 05-03-2002 | Отправлено: 10:35 17-06-2004 | Исправлено: wchik, 11:09 17-06-2004
EndoR



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
wchik
а мне не всё нужно дивертить. у меня там сквид висит. а дивертиться должна только почта и днс (ну еще там парочка приблуд ). у меня пока не получилось дивертить обращения на конкретные порты. и еще - после диверта какой будет адрес отправки?

Цитата:
кстати, а какой порядок прохождения правил?  

а что насчет этого?

----------
Fear is an efficient tool of management.

Всего записей: 1159 | Зарегистр. 24-01-2002 | Отправлено: 11:30 17-06-2004
wchik



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
порядок проходжения правил никто не отменял просто диверт это еще не конец цепочки после преобразования адресов пакет отдается фаеру обратно и тот уже решает что делать дальше
 
если не хочешь натить все а позаморачиваться вот тебе набросок правил если что не понятно пиши
 
разберешься?  
 
rl0 - внеш
rl1 - внутр

Цитата:
 
#!/bin/sh
fwcmd="/sbin/ipfw -q"
 
${fwcmd} -f flush
 
#Allow SSh
${fwcmd} add allow ip from any to any 22 setup
 
#Setup loopback
${fwcmd} add pass all from any to any via lo0
${fwcmd} add deny all from any to 127.0.0.0/8
${fwcmd} add deny ip from 127.0.0.0/8 to any
 
#Squid
${fwcmd} add allow ip from any to any 3128 setup
${fwcmd} add allow ip from me to any 80 setup
${fwcmd} add allow ip from any 80 to me
 
#NAT http for admin
${fwcmd} add divert 8668 ip from any to any 80 via rl0
${fwcmd} add divert 8668 ip from any 80 to any via rl0
${fwcmd} add allow ip from 192.168.0.7 to any 80 setup
${fwcmd} add deny ip from 192.168.0.0/24,192.168.1.0/24 to any 80
 
#NAT mail msn and icq for all
${fwcmd} add divert 8668 ip from any to any 1863 via rl0
${fwcmd} add divert 8668 ip from any 1863 to any via rl0
${fwcmd} add divert 8668 ip from any to any 25 via rl0
${fwcmd} add divert 8668 ip from any 25 to any via rl0
${fwcmd} add divert 8668 ip from any to any 110 via rl0
${fwcmd} add divert 8668 ip from any 110 to any via rl0
${fwcmd} add divert 8668 ip from any to any 5190 via rl0
${fwcmd} add divert 8668 ip from any 5190 to any via rl0
${fwcmd} add allow ip from any to any 25,110,1863,5190 setup
 
#NAT for ICMP
${fwcmd} add divert 8668 icmp from any to any via rl0
${fwcmd} add allow icmp from any to 212.82.219.59 in via rl0 icmptype 0,3,4,11,12
${fwcmd} add allow icmp from 212.82.219.59 to any out via rl0 icmptype 3,8,12
${fwcmd} add allow icmp from 212.82.219.59 to any out via rl0 frag
${fwcmd} add deny log icmp from any to any in via rl0
 
#allow IP through if setup succeeded
${fwcmd} add pass all from any to any established
 
# Allow IP fragments to pass through
${fwcmd} add pass all from any to any frag
 
 

 
Добавлено
а забыл фаейр скомпилен закрытого типа (у тебя может быть наоборот) потому последним правилом у меня по умолчанию запретить все всем
 
Добавлено

Цитата:
еще - после диверта какой будет адрес отправки?

какой потребуется, обычно из 10 000 и выше
но может быть и 53 например некоторые сервисы требуют (вроде, точно не помню)

Всего записей: 518 | Зарегистр. 05-03-2002 | Отправлено: 12:31 17-06-2004
EndoR



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
еще - после диверта какой будет адрес отправки?  
какой потребуется, обычно из 10 000 и выше  

не порт, а адрес какой?

Цитата:
фаейр скомпилен закрытого типа  

аналогично

Цитата:
#Squid  
${fwcmd} add allow ip from any to any 3128 setup  
${fwcmd} add allow ip from me to any 80 setup  
${fwcmd} add allow ip from any 80 to me  

это не совсем понятно. а если порт не 80, тогда как быть?

Цитата:
${fwcmd} add divert 8668 icmp from any to any via rl0  
${fwcmd} add allow icmp from any to 212.82.219.59 in via rl0 icmptype 0,3,4,11,12  
${fwcmd} add allow icmp from 212.82.219.59 to any out via rl0 icmptype 3,8,12  
${fwcmd} add allow icmp from 212.82.219.59 to any out via rl0 frag  
${fwcmd} add deny log icmp from any to any in via rl0  

хоть убей, но это не работает. интерфейс внешний. айпишник тоже. и все равно не работает.
nat висит при этом на стандартном 8668.

----------
Fear is an efficient tool of management.

Всего записей: 1159 | Зарегистр. 24-01-2002 | Отправлено: 21:31 29-06-2004
EndoR



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ура! Заработало.
Проблема была в том, что я менял созданный скрипт (фаер - SIMPLE). А там вначале стоят несколько правил, которые запрещали нат. (озаглавленные как deny spoofing и т.п.). и еще - тестил работу вначале на icmp и забыл настройки в ядре поправить - там был запрещен редирект icmp.
wchik


----------
Fear is an efficient tool of management.

Всего записей: 1159 | Зарегистр. 24-01-2002 | Отправлено: 21:59 02-07-2004
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » FreeBSD: Не работает NAT


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru