PF+NAT+RDR с отличным от шлюза маршрутом по умолчанию

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Intodreams
проходил мимо
Сообщения: 9
Зарегистрирован: 2009-03-10 18:10:41

PF+NAT+RDR с отличным от шлюза маршрутом по умолчанию

Непрочитанное сообщение Intodreams » 2011-03-04 11:39:02

Добрый день, друзья.
Позвольте попросить немного помощи, ибо сроки горят, а от обилия инфы башка уже не может вычленить правильный ответ.
Есть некая локальная сеть, работает отличненько, дефолтным шлюзом крутится чертик с ipfw+natd. В сетку с недавнего времени внедрили сервер с некоторыми сервисами и mpd на борту. Соответственно выделили ему IP покрасивше и запустили, полет нормальный. Но вот на этом сервере ваш покорный слуга решил испробовать давно подмеченную вкусность в виде PF. Вроде разобрался, подучиваю синтаксис и т.д. и т.п. Но встала передо мной задача доселе не пробованная мною.
Для суммирования некоторых сервисов одним IP (ибо сервер запущен под факультативный бизнес компании) и немного отделить котлеты от мух необходимо пробросить к внутреннему серверу определенный порт. Задача вроде бы на 5 минут с перекуром, но проблема в том, что целевой сервер, на который пробрасываются порты имеет основным шлюзом отличный от сервера, который ему пробрасывает порт.
map.jpg
Зеленое - маршрут по умолчанию. Синее - маршрут проброса.
На данный момент порт пробрасывается, но на конечном сервере соединение на порт идет от внешнего IP коннектящегося. Как бы я не крутился с NATом, ну никак... Мозжечком понимаю что надо сделать так, чтобы сервак натил внешний IP во внутренний, но чет никак не получается =/
Листинг PF прилагается

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

SRV-BSD# cat /usr/local/etc/pf.conf

int_if="igb0"
ext_if="igb1"

vpn_ports="1701"
icmp_types="{echoreq, unreach}"

trusted_lan="192.168.0.0/24"
untrusted_lan="192.168.10.0/24"
localnet="127.0.0.0/8"
terminal_srv="192.168.0.253/32"
srv="192.168.0.111"

################ Set RETURN instead of DROP
set block-policy return
################ Allow lo0 and local network
set skip on lo0
set skip on $int_if

################ Normalize all incoming packets on all

scrub in all
scrub out all


nat on $ext_if from $trusted_lan to any -> $ext_if
nat on $ext_if from $untrusted_lan to any -> $int_if
nat on $int_if from $ext_if port 22221 to $srv port 2221 -> 192.168.0.252

rdr on $ext_if inet proto tcp to $ext_if port 22221 -> $srv port 2221


antispoof quick for $ext_if


pass in all
pass out all

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

TRANSLATION RULES:
nat on igb1 inet from 192.168.0.0/24 to any -> XX.XXX.XXX.XX
nat on igb1 inet from 192.168.10.0/24 to any -> { 192.168.0.2, 192.168.0.252, 192.168.10.2 } round-robin
nat on igb0 inet from XX.XXX.XXX.XX port = 22221 to 192.168.0.111 port = 2221 -> 192.168.0.252
rdr on igb1 inet proto tcp from any to XX.XXX.XXX.XX port = 22221 -> 192.168.0.111 port 2221

FILTER RULES:
scrub in all fragment reassemble
scrub out all fragment reassemble
block drop in quick on ! igb1 inet from XX.XXX.XXX.0/24 to any
block drop in quick inet from XX.XXX.XXX.XX to any
pass in all flags S/SA keep state
pass out all flags S/SA keep state
No queue in use

STATES:
all udp 224.0.0.1:626 <- 85.114.26.254:626       NO_TRAFFIC:SINGLE

INFO:
Status: Enabled for 12 days 01:12:07          Debug: Urgent

State Table                          Total             Rate
  current entries                        1
  searches                          434875            0.4/s
  inserts                            26246            0.0/s
  removals                           26245            0.0/s
Counters
  match                              26966            0.0/s
  bad-offset                             0            0.0/s
  fragment                               0            0.0/s
  short                                  0            0.0/s
  normalize                              0            0.0/s
  memory                                 0            0.0/s
  bad-timestamp                          0            0.0/s
  congestion                             0            0.0/s
  ip-option                              2            0.0/s
  proto-cksum                           49            0.0/s
  state-mismatch                        28            0.0/s
  state-insert                           0            0.0/s
  state-limit                            0            0.0/s
  src-limit                              0            0.0/s
  synproxy                               0            0.0/s

TIMEOUTS:
tcp.first                   120s
tcp.opening                  30s
tcp.established           86400s
tcp.closing                 900s
tcp.finwait                  45s
tcp.closed                   90s
tcp.tsdiff                   30s
udp.first                    60s
udp.single                   30s
udp.multiple                 60s
icmp.first                   20s
icmp.error                   10s
other.first                  60s
other.single                 30s
other.multiple               60s
frag                         30s
interval                     10s
adaptive.start             6000 states
adaptive.end              12000 states
src.track                     0s

LIMITS:
states        hard limit    10000
src-nodes     hard limit    10000
frags         hard limit     5000
tables        hard limit     1000
table-entries hard limit   100000

OS FINGERPRINTS:
696 fingerprints loaded
SRV-BSD#
Люди добрые, бью ушами по щекам, помогите. Желательно с разъяснением.

Хостинговая компания 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/


Intodreams
проходил мимо
Сообщения: 9
Зарегистрирован: 2009-03-10 18:10:41

Re: PF+NAT+RDR с отличным от шлюза маршрутом по умолчанию

Непрочитанное сообщение Intodreams » 2011-03-04 16:23:45

По ссылке по ipfw разбор полетов, но ситуация аналогичная. Покопал на тему TCP Proxy в pf, буду пробовать nc.

Гость
проходил мимо

Re: PF+NAT+RDR с отличным от шлюза маршрутом по умолчанию

Непрочитанное сообщение Гость » 2011-03-04 16:34:59

поставте rinetd или bounce
или вообще создайте прокси на ssh
и спите спокойно
не надо усложнять фаерволы до уровня когда вы в них сами еле еле разбираетесь
не надо ити по пути vadim64
делайте все настолько просто, насколько это возможно

Intodreams
проходил мимо
Сообщения: 9
Зарегистрирован: 2009-03-10 18:10:41

Re: PF+NAT+RDR с отличным от шлюза маршрутом по умолчанию

Непрочитанное сообщение Intodreams » 2011-03-05 12:28:16

Решил проблему с помощью bounce, спасибо огромное за совет.
Кратко опишу чего и как:

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

#cd /usr/local/ports/net/bounce
#make install clean
...
#echo "bounce_enable="YES" >> /etc/rc.conf
#echo "bounce_connections="r1" >> /etc/rc.conf
#echo "bounce_r1_options="-a XX.XXX.XXX.XX -p 22221 192.168.0.111 2221" >> /etc/rc.conf
#/usr/local/etc/rc.d/bounce start
Starting bounce.
Ready to bounce connections from port 22221 to 192.168.0.111 on port 2221 
pf.conf

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

################ Interfaces
int_if="igb0"
ext_if="igb1"

################ Ports
vpn_ports="1701"
icmp_types="{echoreq, unreach}"

################ Networks
net_my_local="192.168.0.0/24"
net_vpn_local="192.168.10.0/24"

################ IPs
srv="192.168.0.111"
terminal_srv="192.168.0.253"
ip_my_local="192.168.0.252"
ip_my_vpn="192.168.10.2"


################ Set RETURN instead of DROP
set block-policy return

################ Allow lo0 and local network
set skip on lo0
set skip on $int_if

################ Normalize all incoming packets on all
################ interfaces (making packet from fragments
################ on gateway then sending further)
scrub in all
scrub out all


####################################################################
####################################################################
## NAT
####################################################################
nat on $ext_if from $net_my_local to any -> $ext_if


####################################################################
####################################################################
## Redirects
####################################################################

#rdr pass on $ext_if inet proto tcp to $int_if port 2221 -> $srv port 2221

############### Antispoof
antispoof quick for $ext_if

####################################################################
####################################################################
## Policies
####################################################################
block log all

################ Pass PPTP port in
pass in quick on $ext_if inet proto tcp to $ext_if port 1723

################ Pass PPTP clients to internal service IP
pass in quick from $net_vpn_local to $ip_my_vpn

################ Pass SRV from world
pass in quick on $ext_if inet proto tcp from any to $ext_if port 22221


################ Pass all out from me and my lan
pass out on $ext_if from $ext_if to any
pass out on $ext_if from $net_my_local to any
В целом добавил разрешающее правило на внешний интерфейс (внутренний у меня без огнестены), включил bounce и все заработало. Жалко, конечно, что нет возможности решить проблему с помощью pf. Все таки лишний сервис поднимать не очень по феншую.

Intodreams
проходил мимо
Сообщения: 9
Зарегистрирован: 2009-03-10 18:10:41

Re: PF+NAT+RDR с отличным от шлюза маршрутом по умолчанию

Непрочитанное сообщение Intodreams » 2011-03-05 15:52:58

Вопрос в догонку: может быть как-нибудь можно все это разрулить только лишь через pf? Пускай громоздко, излишне, но только через pf?

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

Re: PF+NAT+RDR с отличным от шлюза маршрутом по умолчанию

Непрочитанное сообщение terminus » 2011-03-05 22:12:48

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

Intodreams
проходил мимо
Сообщения: 9
Зарегистрирован: 2009-03-10 18:10:41

Re: PF+NAT+RDR с отличным от шлюза маршрутом по умолчанию

Непрочитанное сообщение Intodreams » 2011-03-08 11:33:10

Да вот как-то не соображу что именно писать в файрволле. Уже столько напробовался, что глаза замылены дальше некуда. Да и NAT к rdr почему-то не подключается =/