Страница 1 из 1

IPFW & NAT

Добавлено: 2011-01-19 13:57:23
sergey2140
Всем добрый день!

Есть хост А, хост Б и хост С. Нужно сделать редирект трафика с хоста А на хост С через хост Б. Хост Б должен выступать редиректором. Сделать нужно все средствами 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
Ткните, плз, носом в ошибку. Спасибо.

Re: IPFW & NAT

Добавлено: 2011-01-19 14:38:50
Termitnik
Если все адреса белые, то NAT не нужен.

Re: IPFW & NAT

Добавлено: 2011-01-19 14:40:22
sergey2140
Termitnik писал(а):Если все адреса белые, то NAT не нужен.
А как это реализовать тогда?

Re: IPFW & NAT

Добавлено: 2011-01-19 15:27:15
hizel
ну хватает тонны информации, как то: схемы сети, таблиц маршрутизации со всех трех хостов и полные листинги правил всех фаерволов опять же со всех трех хостов

Re: IPFW & NAT

Добавлено: 2011-01-19 15:36:51
terminus
Хоят Б является default gateway для С, для А? На Б только один сетевой интерфейс или сколько?
Схему рисуйте.

Re: IPFW & NAT

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

Re: IPFW & NAT

Добавлено: 2011-01-19 16:40:00
sergey2140
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

Re: IPFW & NAT

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

Re: IPFW & NAT

Добавлено: 2011-01-19 17:33:26
terminus
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 например).

Re: IPFW & NAT

Добавлено: 2011-01-19 17:56:35
sergey2140
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 

Re: IPFW & NAT

Добавлено: 2011-01-19 18:07:15
sergey2140
терминус_ писал(а):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


Re: IPFW & NAT

Добавлено: 2011-01-19 18:39:39
sergey2140
терминус_ писал(а):И это

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

/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
терминус_
Б как общается с А и С? Они все в одной подсети или А и С в разных сетях, а на Б адреса из одеих сетей?

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

Re: IPFW & NAT

Добавлено: 2011-01-19 18:50:06
sergey2140
терминус_ писал(а):Б как общается с А и С? Они все в одной подсети или А и С в разных сетях, а на Б адреса из одеих сетей?

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

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:

Re: IPFW & NAT

Добавлено: 2011-01-19 19:09:31
sergey2140
терминус_ писал(а):я мозг сломал...
с этого надо было начинать - что они не в одной подсети, и что связь между ними вообще через Ынтернет. :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 - не изврат? ;-)

Re: IPFW & NAT

Добавлено: 2011-01-19 20:20:48
terminus
Обратите внимание на

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

/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 уже ограничивает...

Re: IPFW & NAT

Добавлено: 2011-01-20 13:18:11
sergey2140
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 уже ограничивает...
Тоже поставил на всякий случай.

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