IPFW & NAT

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
sergey2140
рядовой
Сообщения: 21
Зарегистрирован: 2011-01-19 13:48:39

IPFW & NAT

Непрочитанное сообщение sergey2140 » 2011-01-19 13:57:23

Всем добрый день!

Есть хост А, хост Б и хост С. Нужно сделать редирект трафика с хоста А на хост С через хост Б. Хост Б должен выступать редиректором. Сделать нужно все средствами ipfw и nat.
Все адреса на хостах - белые.

fwd - вроде как вообще не то.
nat - вроде как оно, но пакеты из nata не выходят.

Вот часть правил файрвола на хосте Б:

Код: Выделить всё

/sbin/ipfw nat 1 config log same_ports redirect_port tcp адрес_хоста_С:ХХ ХХ
/sbin/ipfw add 00350 nat 1 tcp from me to адрес_хоста_С 25 out via re0
/sbin/ipfw add 00352 nat 1 tcp from any to me 25 in via re0
Ткните, плз, носом в ошибку. Спасибо.
Последний раз редактировалось terminus 2011-01-19 15:31:09, всего редактировалось 1 раз.
Причина: Убедительная просьба юзать теги [code] при оформлении листингов. Всегда пишите про проблемы с фаерволами в тему Networks.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: IPFW & NAT

Непрочитанное сообщение Termitnik » 2011-01-19 14:38:50

Если все адреса белые, то NAT не нужен.

sergey2140
рядовой
Сообщения: 21
Зарегистрирован: 2011-01-19 13:48:39

Re: IPFW & NAT

Непрочитанное сообщение sergey2140 » 2011-01-19 14:40:22

Termitnik писал(а):Если все адреса белые, то NAT не нужен.
А как это реализовать тогда?

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: IPFW & NAT

Непрочитанное сообщение hizel » 2011-01-19 15:27:15

ну хватает тонны информации, как то: схемы сети, таблиц маршрутизации со всех трех хостов и полные листинги правил всех фаерволов опять же со всех трех хостов
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: IPFW & NAT

Непрочитанное сообщение terminus » 2011-01-19 15:36:51

Хоят Б является default gateway для С, для А? На Б только один сетевой интерфейс или сколько?
Схему рисуйте.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Termitnik
сержант
Сообщения: 169
Зарегистрирован: 2008-04-05 20:09:45
Откуда: Киев

Re: IPFW & NAT

Непрочитанное сообщение Termitnik » 2011-01-19 15:37:36

sergey2140 писал(а):
Termitnik писал(а):Если все адреса белые, то NAT не нужен.
А как это реализовать тогда?
Опишите ситуацию подробнее. Как выходят в интернет хосты А и С?

sergey2140
рядовой
Сообщения: 21
Зарегистрирован: 2011-01-19 13:48:39

Re: IPFW & NAT

Непрочитанное сообщение sergey2140 » 2011-01-19 16:40:00

Termitnik писал(а):
sergey2140 писал(а):
Termitnik писал(а):Если все адреса белые, то NAT не нужен.
А как это реализовать тогда?
Опишите ситуацию подробнее. Как выходят в интернет хосты А и С?
Спасибо всем за интерес к проблеме. Итак:

Хост А - подключен статикой, две сетевые платы, на одной белый адрес, на другой серый. Трафик генерируется telnetом.
telnet адрес_хоста_Б порт
Хост Б - подключен статикой, один интерфейс.
Хост С - подключен статикой, две сетевые платы, на одной белый адрес, на другой серый.

На всех хостах FreeBSD 8.1.

Запускаю telnet на хосте А. Вижу приходящий трафик на хосте Б. На выходе из файрвола на хосте Б ничего нет. Я так понимаю, не отрабатывает nat. Вот правила на хосте Б (за исключением правил, разрешающих доступ по ssh)

Код: Выделить всё

00005  672 347928 allow ip from any to any via lo0
00010    0      0 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17
00011    0      0 deny icmp from any to any frag
00350    0      0 nat 1 tcp from me to адрес_хоста_С dst-port 25 out via re0
00352   12    720 nat 1 tcp from any to me dst-port 25 in via re0
00400    1     76 allow icmp from any to any
00500    0      0 check-state
00700  723 124084 allow tcp from me to any dst-port 20,21,80,443,3128 keep-state
00701  368  44664 allow tcp from me to any dst-port 1024-65535 keep-state
00800   63   4554 allow udp from me to any dst-port 53
00801   63   8184 allow udp from any 53 to me
00802    0      0 allow udp from me 53 to any
00803    0      0 allow udp from any to me dst-port 53
10000  144  11868 deny ip from any to any
Вот nat

Код: Выделить всё

ipfw nat 1 config log same_ports redirect_port tcp адрес_хоста_С:25 25

sergey2140
рядовой
Сообщения: 21
Зарегистрирован: 2011-01-19 13:48:39

Re: IPFW & NAT

Непрочитанное сообщение sergey2140 » 2011-01-19 16:41:27

terminus писал(а):Хоят Б является default gateway для С, для А? На Б только один сетевой интерфейс или сколько?
Схему рисуйте.
default интерфейсы всех трех хостов никак не связаны между собой. На Б один сетефой интерфейс.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: IPFW & NAT

Непрочитанное сообщение terminus » 2011-01-19 17:33:26

sergey2140 писал(а):
Спасибо всем за интерес к проблеме. Итак:

Хост А - подключен статикой, две сетевые платы, на одной белый адрес, на другой серый. Трафик генерируется telnetом.
telnet адрес_хоста_Б порт
Хост Б - подключен статикой, один интерфейс.
Хост С - подключен статикой, две сетевые платы, на одной белый адрес, на другой серый.

На всех хостах FreeBSD 8.1.

Запускаю telnet на хосте А. Вижу приходящий трафик на хосте Б. На выходе из файрвола на хосте Б ничего нет. Я так понимаю, не отрабатывает nat. Вот правила на хосте Б (за исключением правил, разрешающих доступ по ssh)

Код: Выделить всё

00005  672 347928 allow ip from any to any via lo0
00010    0      0 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17
00011    0      0 deny icmp from any to any frag
00350    0      0 nat 1 tcp from me to адрес_хоста_С dst-port 25 out via re0
00352   12    720 nat 1 tcp from any to me dst-port 25 in via re0
00400    1     76 allow icmp from any to any
00500    0      0 check-state
00700  723 124084 allow tcp from me to any dst-port 20,21,80,443,3128 keep-state
00701  368  44664 allow tcp from me to any dst-port 1024-65535 keep-state
00800   63   4554 allow udp from me to any dst-port 53
00801   63   8184 allow udp from any 53 to me
00802    0      0 allow udp from me 53 to any
00803    0      0 allow udp from any to me dst-port 53
10000  144  11868 deny ip from any to any
Вот nat

Код: Выделить всё

ipfw nat 1 config log same_ports redirect_port tcp адрес_хоста_С:25 25
/etc/rc.conf

Код: Выделить всё

gateway_enable="YES"
Добавте, если небыло.

нат

Код: Выделить всё


/sbin/ipfw nat 1 config log same_ports redirect_port tcp адрес_хоста_С:23 23
/sbin/ipfw nat 2 config log same_ports 

/sbin/ipfw add 355 nat 1 tcp from адрес_хоста_A to me 23 in recv re0
/sbin/ipfw add 356 nat 2 tcp from адрес_хоста_A to адрес_хоста_С 23 out xmit re0

/sbin/ipfw add 357 nat 2 tcp from адрес_хоста_C 23 to me in recv re0
/sbin/ipfw add 358 nat 1 tcp from адрес_хоста_С 23 to адрес_хоста_A out xmit re0

/sbin/ipfw add 359 allow all from any to any via re0

это может не заработать так как получается схема "однорукого бандита" - вроде были правила о том, что система не должна маршрутизировать трафик в сеть из которой он пришел (из 10.10.10.1 в 10.10.10.3 например).
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

sergey2140
рядовой
Сообщения: 21
Зарегистрирован: 2011-01-19 13:48:39

Re: IPFW & NAT

Непрочитанное сообщение sergey2140 » 2011-01-19 17:56:35

terminus писал(а):
/etc/rc.conf

Код: Выделить всё

gateway_enable="YES"
Добавте, если небыло.
Есть на всех хостах.
terminus писал(а): нат

Код: Выделить всё


/sbin/ipfw nat 1 config log same_ports redirect_port tcp адрес_хоста_С:23 23
/sbin/ipfw nat 2 config log same_ports 

/sbin/ipfw add 355 nat 1 tcp from адрес_хоста_A to me 23 in recv re0
/sbin/ipfw add 356 nat 2 tcp from адрес_хоста_A to адрес_хоста_С 23 out xmit re0

/sbin/ipfw add 357 nat 2 tcp from адрес_хоста_C 23 to me in recv re0
/sbin/ipfw add 358 nat 1 tcp from адрес_хоста_С 23 to адрес_хоста_A out xmit re0

/sbin/ipfw add 359 allow all from any to any via re0

Вижу обмен между хостами А и Б.

Код: Выделить всё

00355    6    360 nat 1 tcp from адрес_хоста_A to me dst-port 25 in recv re0
00356    0      0 nat 2 tcp from адрес_хоста_A to адрес_хоста_С dst-port 25 out xmit re0
00357    0      0 nat 2 tcp from адрес_хоста_С 25 to me in recv re0
00358    0      0 nat 1 tcp from адрес_хоста_С 25 to адрес_хоста_A out xmit re0
00359  702  62657 allow ip from any to any via re0
Я так понимаю, что пакет вошел в nat и ушел по правилу 359.
terminus писал(а):
это может не заработать так как получается схема "однорукого бандита" - вроде были правила о том, что система не должна маршрутизировать трафик в сеть из которой он пришел (из 10.10.10.1 в 10.10.10.3 например).
Это логично, но у меня же разные сети. Интерфейс, правда, один - но сети разные.

терминус_
проходил мимо

Re: IPFW & NAT

Непрочитанное сообщение терминус_ » 2011-01-19 18:00:55

one_pass как выставлен? Попробуйте поставить его в 0.

Вооюще же в 8.1 поломали это самый one_pass - поэтому нужно правило 359

Я так понимаю, что еще не заработало? на 356-358 пакетиков не видно...

терминус_
проходил мимо

Re: IPFW & NAT

Непрочитанное сообщение терминус_ » 2011-01-19 18:04:05

И это

Код: Выделить всё

/sbin/ipfw nat 1 config log same_ports redirect_port tcp адрес_хоста_С:23 23
/sbin/ipfw nat 2 config log same_ports 
тут надо добавить параметр if или ip - какие пдреса ему использовать для маскировки/демаскировки?

Это логично, но у меня же разные сети. Интерфейс, правда, один - но сети разные.
со стороны А 192.168.1.2, а со стороны С 10.10.10.2? тогда так:

Код: Выделить всё

/sbin/ipfw nat 1 config ip 192.168.1.2 log same_ports redirect_port tcp адрес_хоста_С:23 23
/sbin/ipfw nat 2 config ip 10.10.10.2 log same_ports 

sergey2140
рядовой
Сообщения: 21
Зарегистрирован: 2011-01-19 13:48:39

Re: IPFW & NAT

Непрочитанное сообщение sergey2140 » 2011-01-19 18:07:15

терминус_ писал(а):one_pass как выставлен? Попробуйте поставить его в 0.

Вооюще же в 8.1 поломали это самый one_pass - поэтому нужно правило 359

Я так понимаю, что еще не заработало? на 356-358 пакетиков не видно...
one_pass был равен 1. Установил в 0 и попробовал. Ситуация не изменилась.
Вот еще статистика по natу

Код: Выделить всё

ipfw nat show

nat 2:
nat 1: icmp=0, udp=0, tcp=2, sctp=0, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=2


sergey2140
рядовой
Сообщения: 21
Зарегистрирован: 2011-01-19 13:48:39

Re: IPFW & NAT

Непрочитанное сообщение sergey2140 » 2011-01-19 18:39:39

терминус_ писал(а):И это

Код: Выделить всё

/sbin/ipfw nat 1 config log same_ports redirect_port tcp адрес_хоста_С:23 23
/sbin/ipfw nat 2 config log same_ports 
тут надо добавить параметр if или ip - какие пдреса ему использовать для маскировки/демаскировки?

Это логично, но у меня же разные сети. Интерфейс, правда, один - но сети разные.
со стороны А 192.168.1.2, а со стороны С 10.10.10.2? тогда так:

Код: Выделить всё

/sbin/ipfw nat 1 config ip 192.168.1.2 log same_ports redirect_port tcp адрес_хоста_С:23 23
/sbin/ipfw nat 2 config ip 10.10.10.2 log same_ports 
Э.... Не совсем понятно, простите. Частные сети не нужны для редиректов. Я сделал так, надеюсь понял, что вы имели в виду

Код: Выделить всё

/sbin/ipfw nat 1 config ip адрес_хоста_А log same_ports redirect_port tcp адрес_хоста_С:25 25
/sbin/ipfw nat 2 config ip адрес_хоста_С log same_ports

/sbin/ipfw add 355 nat 1 tcp from адрес_хоста_А to me 25 in recv re0
/sbin/ipfw add 356 nat 2 tcp from адрес_хоста_А to адрес_хоста_С 25 out xmit re0

/sbin/ipfw add 357 nat 2 tcp from адрес_хоста_С 25 to me in recv re0
/sbin/ipfw add 358 nat 1 tcp from адрес_хоста_С 25 to адрес_хоста_А out xmit re0

/sbin/ipfw add 359 allow all from any to any via re0
Где адрес_хоста_А и адрес_хоста_С - белые адреса. Ситуация не изменилась, вижу обмен между А и Б.

терминус_
проходил мимо

Re: IPFW & NAT

Непрочитанное сообщение терминус_ » 2011-01-19 18:44:03

Б как общается с А и С? Они все в одной подсети или А и С в разных сетях, а на Б адреса из одеих сетей?

там в настройке натов должны быть адрес(а) Б.

sergey2140
рядовой
Сообщения: 21
Зарегистрирован: 2011-01-19 13:48:39

Re: IPFW & NAT

Непрочитанное сообщение sergey2140 » 2011-01-19 18:50:06

терминус_ писал(а):Б как общается с А и С? Они все в одной подсети или А и С в разных сетях, а на Б адреса из одеих сетей?

там в настройке натов должны быть адрес(а) Б.
Каждый из хостов независимо подключен к интернету. Каждый подключен статикой, у каждого разные адреса.

терминус_
проходил мимо

Re: IPFW & NAT

Непрочитанное сообщение терминус_ » 2011-01-19 18:55:50

я мозг сломал...
с этого надо было начинать - что они не в одной подсети, и что связь между ними вообще через Ынтернет. :st:

там в настройке натов должны быть

Код: Выделить всё

/sbin/ipfw nat 1 config ip адрес_хоста_Б log same_ports redirect_port tcp адрес_хоста_С:25 25
/sbin/ipfw nat 2 config ip адрес_хоста_Б log same_ports
а вообще изврат какой-то, да... :pardon:

sergey2140
рядовой
Сообщения: 21
Зарегистрирован: 2011-01-19 13:48:39

Re: IPFW & NAT

Непрочитанное сообщение sergey2140 » 2011-01-19 19:09:31

терминус_ писал(а):я мозг сломал...
с этого надо было начинать - что они не в одной подсети, и что связь между ними вообще через Ынтернет. :st:
Сорри, забыл указать, что они связываются через Интернет.
терминус_ писал(а): там в настройке натов должны быть

Код: Выделить всё

/sbin/ipfw nat 1 config ip адрес_хоста_Б log same_ports redirect_port tcp адрес_хоста_С:25 25
/sbin/ipfw nat 2 config ip адрес_хоста_Б log same_ports
а вообще изврат какой-то, да... :pardon:
О! Вот теперь работает!!! Вижу и tcpdumpом обмен и telnet зацепился! Логика работы тоже примерно понятна. Спасибо вам огромное!!!!

Ну как изврат.... А применять rinetd - не изврат? ;-)

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: IPFW & NAT

Непрочитанное сообщение terminus » 2011-01-19 20:20:48

Обратите внимание на

Код: Выделить всё

/sbin/ipfw add 359 allow all from any to any via re0
Это надо из-за того, что в 8.1 поломали one_pass - он там всегда в 0 для ната - ьрафик после натов возвращается в фаервол.
Собственно этот allow all from any to any будет влияить на все правила которые стоят после него ;-)

Если после натов есть какие-то правила которые нужны то надо делать какой-то хитрый skipto на них.

Еще - в свойствах первого ната можно выставить deny_in для секюрности. Тогда через него не будут проходить никакие пакеты не имеющией проброса через redirect_port. Но это уже просто для кучи так как from адрес_хоста_А to me 25 уже ограничивает...
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

sergey2140
рядовой
Сообщения: 21
Зарегистрирован: 2011-01-19 13:48:39

Re: IPFW & NAT

Непрочитанное сообщение sergey2140 » 2011-01-20 13:18:11

terminus писал(а):Обратите внимание на

Код: Выделить всё

/sbin/ipfw add 359 allow all from any to any via re0
Это надо из-за того, что в 8.1 поломали one_pass - он там всегда в 0 для ната - ьрафик после натов возвращается в фаервол.
Понял, спасибо! Странно, что поломали. Для файрвола одна из ключевых настроек. Добавил несколько правил, разрешающих хождение трафика на хосты А и С.
terminus писал(а): Собственно этот allow all from any to any будет влияить на все правила которые стоят после него ;-)

Если после натов есть какие-то правила которые нужны то надо делать какой-то хитрый skipto на них.

Еще - в свойствах первого ната можно выставить deny_in для секюрности. Тогда через него не будут проходить никакие пакеты не имеющией проброса через redirect_port. Но это уже просто для кучи так как from адрес_хоста_А to me 25 уже ограничивает...
Тоже поставил на всякий случай.

Спасибо всем за помощь.