IPFW NAT корпоративная и гостевая подсети, два NATа

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
neekonoff
рядовой
Сообщения: 11
Зарегистрирован: 2017-04-06 15:51:54

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение neekonoff » 2017-04-06 16:06:07

Други, прошу помощи.
Есть корпоративная подсеть. Есть гостевая подсеть.
Есть диапазон айпи, выданный провайдером.
Есть два сетевых адаптера (на одном уже крутятся вланы с корп. и гостевой подсетями, на другом алиасы с айпишниками от провайдера).

Хочется гостевую подсеть натить на своем алиасе, но в голове что-то каша завариваться начинает.
В материале по ссылке ниже вроде бы похожие примеры есть, но все же не то.
http://www.lissyara.su/articles/freebsd ... /ipfw_nat/

Наведите на путь :)
Последний раз редактировалось f_andrey 2017-04-06 16:48:39, всего редактировалось 1 раз.
Причина: Автору. пожалуйста, выбирайте соответствующий раздел форума

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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35315
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение Alex Keda » 2017-04-07 15:55:38

Что именно у вас не получается?
Убей их всех! Бог потом рассортирует...

neekonoff
рядовой
Сообщения: 11
Зарегистрирован: 2017-04-06 15:51:54

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение neekonoff » 2017-04-07 23:39:57

Нет понимания, как это выглядеть будет. Не понимаю структуру..
Например: чем, скажем так, "физически" отличается "nat 1 config if em0..", от nat 1 config ip 1.2.3.4..."

Отправлено спустя 13 минут 24 секунды:
Потом, возможно ли полностью изолировать корп. и гостевую сети? Например в корп сети есть почта, снаружи отзывается на 1.2.3.4.
Как сделать так, чтобы из гостевой сети маршрут до почты шел через внешний интерфейс?

Отправлено спустя 38 минут 29 секунд:
Как указать NATу, как правильно маскировать трафик и из какой подсети?

default_vlan
проходил мимо
Сообщения: 4
Зарегистрирован: 2017-04-11 8:06:15

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение default_vlan » 2017-04-11 12:51:46

neekonoff писал(а): Например: чем, скажем так, "физически" отличается "nat 1 config if em0..", от nat 1 config ip 1.2.3.4..."
тем что на em0 могут быть алиасы и nat 1 будет работать со всеми ip на em0, нежели, как во втором случае, когда у вас указан конкретный ip.
neekonoff писал(а): Потом, возможно ли полностью изолировать корп. и гостевую сети?
да, deny-правилами ipfw, ну или, например:
192.168.1.0/24 - корпоративная сеть
192.168.2.0/24 - гостевая.
Натятся, соответственно, на конкретный ip или интерфейс. Отсюда и получается, что если внешнх ip 2, то проблемы в изолировании трафика особо не будет - одна сеть на один ip, вторая - на другой.
neekonoff писал(а): Как сделать так, чтобы из гостевой сети маршрут до почты шел через внешний интерфейс?
сервер во внутренней корп сети - или сервер наружу выносить, вне сети; или разрешающим правилом давать доступ из другой подсети через внешний интерфейс типа

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

route host MAIL_IP gw IP_em0
.
neekonoff писал(а): Как указать NATу, как правильно маскировать трафик и из какой подсети?
это про маскарадинг вопрос?

ИМХО. Сначала на бумаге разрисовать надо всю сетку, потом сервер нарисовать с натом, потом понять как именно те и другие пользователи будут ходить куда-либо, а потом уже решать как лучше. А если все пользователи в одной одноранговой сети и у них у всех общий интерфейс для нат, то смысла в этом телодвижении нет.

neekonoff
рядовой
Сообщения: 11
Зарегистрирован: 2017-04-06 15:51:54

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение neekonoff » 2017-04-12 22:20:53

Подсмотрев в хэндбук, набросал вот такое:
======================================================

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

root@:/usr/home/user1 # uname -a
FreeBSD 11.0-RELEASE-p1 FreeBSD 11.0-RELEASE-p1 #0 r306420: Thu Sep 29 01:43:23 UTC 2016 root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64
=======================================================

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

root@:/usr/home/user1 # cat /etc/rc.conf
defaultrouter="192.168.100.1"
ifconfig_hn0_alias0="192.168.100.5/24"
ifconfig_hn0_alias1="192.168.100.6/24"
ifconfig_hn1="10.1.10.1/24"
ifconfig_hn2="10.1.90.1/24"
dhcpd_enable="YES"
dhcpd_ifaces="hn1 hn2"
gateway_enable="YES"
firewall_enable="YES"
firewall_nat_enable="YES"
firewall_script="/etc/ipfw.conf"
sshd_enable="YES"
========================================================

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

root@:/usr/home/user1 # cat /etc/ipfw.conf
#!/bin/sh
ipfw -q -f flush

cmd="ipfw -q add"
skip1="skipto 801" #skipto NAT1
skip2="skipto 802" #skipto NAT2
ks="keep-state"
eif="hn0" #external if
iif="hn1" #inetrnal if
gif="hn2" #guest if
inet="10.1.10.0/24" #internal net
gnet="10.1.90.0/24" #guest net

$cmd 010 allow all from any to any via lo0
$cmd 011 allow all from $inet to $inet via $iif
$cmd 012 deny all from $inet to $gnet via $iif
$cmd 013 deny all from $gnet to $inet via $gif

ipfw -q nat 1 config ip 192.168.100.5 same_ports reset
ipfw -q nat 2 config ip 192.168.100.6 same_ports reset
$cmd 094 nat 1 ip from any to 192.168.100.5 in via $eif
$cmd 095 nat 2 ip from any to 192.168.100.6 in via $eif

$cmd 119 check-state
#------------------------Outgoing---------------------------------------------------
$cmd 120 $skip1 udp from $inet to any out via $eif $ks
$cmd 140 $skip1 tcp from $inet to any out via $eif setup $ks
$cmd 170 $skip1 tcp from me to any out via $eif setup $ks uid root
$cmd 180 $skip1 icmp from $inet to any out via $eif $ks
$cmd 190 $skip2 tcp from $gnet to any out via $eif setup $ks
$cmd 191 $skip2 udp from $gnet to 192.168.100.1 53 out via $eif $ks
$cmd 192 $skip2 icmp from $gnet to any out via $eif $ks
#------------------------Incoming----------------------------------------------------
$cmd 301 deny all from 172.16.0.0/12 to any in via $eif
$cmd 302 deny all from 10.0.0.0/8 to any in via $eif
$cmd 303 deny all from 127.0.0.0/8 to any in via $eif
$cmd 304 deny all from 0.0.0.0/8 to any in via $eif
$cmd 305 deny all from 169.254.0.0/16 to any in via $eif
$cmd 306 deny all from 192.0.2.0/24 to any in via $eif
$cmd 307 deny all from 204.152.64.0/23 to any in via $eif
$cmd 308 deny all from 224.0.0.0/3 to any in via $eif

$cmd 315 deny tcp from any to any 113 in via $eif
$cmd 320 deny tcp from any to any 137 in via $eif
$cmd 321 deny tcp from any to any 138 in via $eif
$cmd 322 deny tcp from any to any 139 in via $eif
$cmd 323 deny tcp from any to any 81 in via $eif

$cmd 330 deny all from any to any frag in via $eif
$cmd 332 deny tcp from any to any established in via $eif

$cmd 380 allow tcp from any to me 22 in via $eif setup limit src-addr 2

$cmd 400 deny log all from any to any in via $eif
$cmd 450 deny log all from any to any out via $eif
#----------------------------Skipto-------------------------------------------------
$cmd 801 nat 1 ip from $inet to any out via $eif
$cmd 802 nat 2 ip from $gnet to any out via $eif
$cmd 900 allow ip from any to any

$cmd 999 deny log all from any to any
#-------------------------------------------------------------------------------------
============================================================

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

root@:/usr/home/user1 # sysctl -a | grep ip.fw
net.inet.ip.fw.dyn_keep_states: 0
net.inet.ip.fw.dyn_keepalive: 1
net.inet.ip.fw.dyn_short_lifetime: 5
net.inet.ip.fw.dyn_udp_lifetime: 10
net.inet.ip.fw.dyn_rst_lifetime: 1
net.inet.ip.fw.dyn_fin_lifetime: 1
net.inet.ip.fw.dyn_syn_lifetime: 20
net.inet.ip.fw.dyn_ack_lifetime: 300
net.inet.ip.fw.dyn_max: 16384
net.inet.ip.fw.dyn_count: 2
net.inet.ip.fw.curr_dyn_buckets: 256
net.inet.ip.fw.dyn_buckets: 256
net.inet.ip.fw.enable: 1
net.inet.ip.fw.static_count: 37
net.inet.ip.fw.default_to_accept: 0
net.inet.ip.fw.tables_sets: 0
net.inet.ip.fw.tables_max: 128
net.inet.ip.fw.default_rule: 65535
net.inet.ip.fw.verbose_limit: 10
net.inet.ip.fw.verbose: 1
net.inet.ip.fw.autoinc_step: 100
net.inet.ip.fw.one_pass: 0
=======================================================
Все это работает, только если net.inet.ip.fw.one_pass=0
В хэндбуке об этой переменно не говорится, эмпирически вышло..
Но правильно ли это?
И как все-таки работает эта one_pass? В интернетах пишут, что оно только для dummynet. Но получается, что это не так. Подскажите пжлста.

Еще как-то напрягает правило 900 и nat in вначале скрипта. Получается, что на внешнем интерфейсе обрабатываются вообще все ходящие пакеты? И потом только фильтруются? Есть ли это гуд? Что будет под хорошей нагрузкой?

Подскажите альтернативную конструкцию? (альтернативную вот этой, стейтфул)

Отправлено спустя 28 минут 7 секунд:
default_vlan,
Почтовый сервак в $inet. Снаружи доступ к нему (к mail.korp-pochta.ru) посредствам форвардинга (в этих правилах не отражено, но на самом деле через параметр redirect_port mail_ip:25 и т.д.). Можно ли, чтоб из $gnet люди могли подключаться к почте через внешний интерфейс? То есть "некое устройство в $gnet" -> "nat 2" -> "defaltrouter провайдера" -> "nat 1 c redirct_port" -> "почтовый сервер"

default_vlan
проходил мимо
Сообщения: 4
Зарегистрирован: 2017-04-11 8:06:15

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение default_vlan » 2017-04-13 6:51:01

neekonoff писал(а): Все это работает, только если net.inet.ip.fw.one_pass=0
Google писал(а):net.inet.ip.fw.one_pass: 1 Когда установлено, пакет, выходящий из потока dummynet, не проходит через брандмауэр повторно, В противном случае, после обработки канала пакет повторно вводится в брандмауэр по следующему правилу.
Простыми словами, если для ната стоят фильтрующие правила (ниже после объявления самого ната) и параметр выставлен в состояние 1, то трафик, который прошел через нат, просто будет "выпулен" наружу не проходя повторную фильтрацию. Если состояние 0, то трафик будет фильтроваться согласно нижеследующим правилам.
neekonoff писал(а): nat in вначале скрипт
не увидел
neekonoff писал(а): Еще как-то напрягает правило 900
разрешает весь трафик. Для проверки - закоментируй правило и посмотри как будет жить. Вообще ipfw должен иметь дефолтное состояние - либо он лочит всё и разрешает только то, что нужно; либо разрешает всё и лочит только то, что нужно. В противном случае можно поймать геморрой в правилах, особенно когда одно правило будет перекрываться двумя другими.
neekonoff писал(а): Почтовый сервак в $inet. Снаружи доступ к нему (к mail.korp-pochta.ru) посредствам форвардинга (в этих правилах не отражено, но на самом деле через параметр redirect_port mail_ip:25 и т.д.). Можно ли, чтоб из $gnet люди могли подключаться к почте через внешний интерфейс? То есть "некое устройство в $gnet" -> "nat 2" -> "defaltrouter провайдера" -> "nat 1 c redirct_port" -> "почтовый сервер"
ну так проверь

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

nslookup mail.korp-pochta.ru
из гостевой сети и попробуй подключиться. Вообще, желательно бы схему сети ко всему этому приложить, потому что до конца не ясно как всё организовано, а пальцем в небо тыкать...

neekonoff
рядовой
Сообщения: 11
Зарегистрирован: 2017-04-06 15:51:54

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение neekonoff » 2017-04-13 13:48:47

Схемe прилагаю.
И, да. Могла смутить серая сеть на внешнем интерфейсе. Это просто потому, что оно крутится на типа "тестовом стенде", на hyper-v и под домашним роутером (который и есть defaultrouter 192.168.100.1).
Изображение

neekonoff
рядовой
Сообщения: 11
Зарегистрирован: 2017-04-06 15:51:54

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение neekonoff » 2017-04-14 13:50:20

Ребят, подскажите.
Дошел вот до такого:

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

#!/bin/sh
ipfw -q -f flush
ipfw -q -f table all flush

cmd="ipfw -q add"
ks="keep-state"
skip1="skipto 801"
skip2="skipto 802"
skip3="skipto 803"
ip1="1.1.1.1"
ip2="1.1.1.2"
ip3="1.1.1.3"
eif="vlan300"
iif="vlan110"
gif="vlan190"
inet="10.1.10.0/24"
gnet="10.1.90.0/24"
#------------------------------------------------------------------
cat /etc/blocked_ip.table | while read ip; do
ipfw table 1 add $ip
done
#------------------------------------------------------------------
$cmd 010 allow all from any to any via lo0
$cmd 011 allow all from $inet to $inet via $iif
$cmd 013 allow all from $inet to $inet via $iif
$cmd 014 deny all from $inet to $gnet via $iif
#-----------------------NAT config---------------------------------
ipfw -q nat 1 config ip $ip1 reset same_ports deny_in unreg_only \
	redirect_port tcp 10.1.10.12:443 443 \
	redirect_port tcp 10.1.10.12:25 25 \
	redirect_port tcp 10.1.10.12:80 80
ipfw -q nat 2 config ip $ip2 same_ports reset deny_in unreg_only \
	redirect_port tcp $ip2:2345 2345
ipfw -q nat 3 config ip $ip3 same_ports reset deny_in unreg_only
#-----------------------NAT in-------------------------------------
$cmd 101 nat 1 ip from any to $ip1 in recv $eif
$cmd 102 nat 2 ip from any to $ip2 in recv $eif
$cmd 103 nat 3 ip from any to $ip3 in recv $eif
#------------------------------------------------------------------
$cmd 109 check-state
#------------------------Outgoing----------------------------------
$cmd 110 $skip1 tag 1 tcp from 10.1.10.12 to any out via $eif setup $ks
$cmd 120 $skip1 tag 2 tcp from $inet to any out via $eif setup $ks
$cmd 140 $skip1 tag 2 ip from $inet to any out via $eif $ks
$cmd 170 $skip1 tag 2 tcp from me to any out via $eif setup $ks uid root
$cmd 180 $skip1 tag 2 ip from me to any out via $eif $ks uid root
$cmd 190 $skip1 tag 3 tcp from $gnet to any out via $eif setup $ks
#------------------------Incoming----------------------------------
$cmd 330 deny all from any to any frag in via $eif
$cmd 332 deny tcp from any to any established in via $eif

$cmd 380 allow tcp from any to me 2345 in via $eif setup limit src-addr 2
$cmd 390 allow tcp from any to 10.1.10.12 in via $eif setup $ks
#------------------------------------------------------------------
$cmd 400 deny log all from any to any in via $eif
$cmd 450 deny log all from any to any out via $eif
#----------------------------Skipto--------------------------------
$cmd 801 nat 1 ip from any to any out xmit $eif tagged 1
$cmd 802 nat 2 ip from any to any out xmit $eif tagged 2
$cmd 803 nat 3 ip from any to any out xmit $eif tagged 3
#------------------------------------------------------------------
$cmd 900 allow ip from any to any
$cmd 999 deny log all from any to any
net.inet.ip.fw.one_pass=0

в логах наблюдаю, что для 10.1.10.12 срабатывают правила 400 и 450. Не работает короче. 10.1.10.12 - это M$ Exchange 2013

Отправлено спустя 3 минуты 27 секунд:
Типа такого вот:
kernel: ipfw: 400 Deny TCP 213.87.154.64:31794 10.1.10.12:443 in via vlan300
kernel: ipfw: 450 Deny TCP 10.1.10.12:443 213.87.154.64:8895 out via vlan300

Отправлено спустя 40 секунд:
ну и по 25 и 80 портам тоже самое

neekonoff
рядовой
Сообщения: 11
Зарегистрирован: 2017-04-06 15:51:54

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение neekonoff » 2017-04-17 4:59:51

Покурив поболее, осознал, какой адов бред написал в правилах выше ХD
Теперь сломал весь мозг вот на этом:

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

#!/bin/sh
ipfw -q -f flush

cmd="ipfw -q add"

$cmd 010 allow all from any to any via lo0
$cmd 020 allow all from any to any via fxp0

ipfw -q nat 1 config ip 1.2.3.4 same_ports reset deny_in \
								redirect_port tcp 10.1.10.12:443 443 \
								redirect_port tcp 10.1.10.12:25 25

$cmd 100 nat 1 ip from any to any in via em0
								
$cmd 200 check-state

$cmd 300 skipto 800 tcp from 10.1.10.0/24 to any out via em0 setup keep-state

$cmd 400 deny all from any to any frag in via em0
$cmd 500 deny tcp from any to any established in via em0

$cmd 600 tcp from any to 10.1.10.12 25,443 in via em0 setup keep-state

$cmd 700 deny all from any to any via em0

$cmd 800 nat 1 ip from any to any out via em0

$cmd 900 allow all from any to any
$cmd 999 deny all from any to any
net.inet.ip.fw.one_pass=0

Подскажите, почему нет связи с 10.1.10.12 извне?

Ведь входящий трафик на внешний IP 1.2.3.4 на порт, например, 443:
На проходе IN:
1. Приходит на правило 100. Меняется адрес назначения (так как редирект_порт)
2. Далее выходит изната и, т.к. one_pass=0, доходит до правила 600 (в динамической таблице создается запись для пар адресов внутреннего и внешнего адреса), выходит из прохода IN и попадает в проход OUT.
На проходе OUT:
3. Доходит до правила 020 и отправляется на внутренний хост 10.1.10.12:443.

Ответный трафик от хоста 10.1.10.12
На проходе IN:
4. Доходит до правила 020, входит из прохода IN и попадает в проход OUT.
На проходе OUT:
5. Доходит до правила 200 и отправляется на внешний адрес (т.к. запись о соединении уже есть в динамической таблице).

Подскажите, где ошибка?

yanos
рядовой
Сообщения: 12
Зарегистрирован: 2013-12-14 16:53:04

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение yanos » 2020-12-11 17:28:17

neekonoff, Добрый день.
У вас все получилось? Примерно такая же задача с алиасами, двумя сетями, редиректом.
Можете ли вы показать конфиг ipfw?
Заранее спасибо.

yanos
рядовой
Сообщения: 12
Зарегистрирован: 2013-12-14 16:53:04

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение yanos » 2021-01-08 17:58:04

Прошу помощи. Ситуация похожая с ТС.
Есть диапазон ip выданный провайдером.
Есть две локальные сети (10.0.0.0/24, 10.0.1.0/24).
Примерно так:
defaultrouter="192.168.100.1"
ifconfig_ae0="192.168.100.2/29"
ifconfig_ae0_alias0="192.168.100.3/24"
ifconfig_re0="10.0.0.1/24"
ifconfig_re1="10.0.1.1/24"

Почтовый сервер 10.0.0.2
веб сервер - 10.0.0.3, 10.0.1.3.
Пользователи - 10.0.0.0/24.

Может поделитесь примерным конфигом ipfw c двумя NAT.
Заранее спасибо

WideAreaNetwork
сержант
Сообщения: 201
Зарегистрирован: 2017-01-10 14:37:13

IPFW NAT корпоративная и гостевая подсети, два NATа

Непрочитанное сообщение WideAreaNetwork » 2021-01-09 15:55:00

на PF не хотите нат поднять?