IPFW + NAT. Не получается.

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Nadz Goldman
рядовой
Сообщения: 12
Зарегистрирован: 2007-07-10 9:52:29

IPFW + NAT. Не получается.

Непрочитанное сообщение Nadz Goldman » 2007-08-23 13:54:32

Всем хай!..

Имеется выход в инет.
Необходимо поднять гейт.
Я делаю так:

Гейт (настраиваемая фря) - 192.168.13.1

Есть сетки
192.168.0.0/24
192.168.1.0/24
192.168.10.0/24
192.168.13.0/30
192.168.20.0/24
192.168.21.0/24
192.168.22.0/24
192.168.23.0/24
192.168.60.0/24

У каждой подсети свой роутер. Адрес роутера имеет вид: 192.168.сеть.70

rl0 - внеш.ний.ай.пи - внешний интерфейс
rl1 - 192.168.13.1 - внутренний интерфейс

Ядро собрано с опциями:

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=20
options IPFIREWALL_FORWARD
options IPDIVERT


/etc/rc.conf

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

static_routes="lan0 lan1 lan10 lan13 lan20 lan21 lan22 lan23 lan60"
route_lan0="-net 192.168.0.0/24 192.168.0.70 -interface rl1"
route_lan1="-net 192.168.1.0/24 192.168.1.70 -interface rl1"
route_lan10="-net 192.168.10.0/24 192.168.10.250 -interface rl1"
route_lan13="-net 192.168.13.0/30 192.168.13.2 -interface rl1"
route_lan20="-net 192.168.20.0/24 192.168.20.250 -interface rl1"
route_lan21="-net 192.168.21.0/24 192.168.21.250 -interface rl1"
route_lan22="-net 192.168.22.0/24 192.168.22.70 -interface rl1"
route_lan23="-net 192.168.23.0/24 192.168.23.70 -interface rl1"
route_lan60="-net 192.168.60.0/24 192.168.60.250 -interface rl1"

defaultrouter="вне.шний.гейт.прова"
hostname="alisa.local"
ifconfig_rl0="inet вне.шний.ай.пи  netmask 255.255.255.0"
ifconfig_rl1="inet 192.168.13.1  netmask 255.255.255.252"

gateway_enable="YES"

firewall_enable="YES"
firewall_logging="YES"
firewall_script="/etc/ipfw.sh"

natd_enable="YES"
natd_interface="rl0"
natd_flags="-m -u"

/etc/ipfw.sh

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

IfOut="rl0"
IpOut="вне.шний.ай.пи/30"

IfIn="rl1"
IpIn="192.168.13.1/30"

mail="22,25,53,110,143,465,585,993,995"
http="53,80,1328,8080,5190,909"
prts=1025-65534

ipfw -f flush
ipfw -f pipe flush
ipfw -f queue flush

ipfw add allow ip from any to any via lo0
ipfw add deny ip from any to 127.0.0.0/8
ipfw add deny ip from 127.0.0.0/8 to any

ipfw add deny all from 127.0.0.0/8 to any in recv $IfOut
ipfw add deny all from 10.0.0.0/8 to any in recv $IfOut
ipfw add deny all from 172.16.0.0/16 to any in recv $IfOut
ipfw add deny all from 192.168.0.0/16 to any in recv $IfOut

#ipfw add allow all from 192.168.0.0/16 to any in recv $IfIn
#ipfw add allow all from any to 192.168.0.0/16 out xmit $IfIn

ipfw add divert natd all from 192.168.0.0/16 to not 192.168.0.0/16 out xmit $IfOut
ipfw add divert natd all from any to $IpOut in recv  $IfOut

ipfw add allow tcp from $IpOut $prts to any $mail, $http out xmit $IfOut
ipfw add allow tcp from any $mail,$http to $IpIn $prts in recv $IfOut established

echo "DNS"
ipfw add allow udp from $IpOut $prts to any 53 xmit $IfOut
ipfw add allow udp from any 53 to $IpOut $prts in recv $IfOut
ipfw add allow udp from any 53 to 192.168.0.0/16 in recv $IfOut

${ipfw} add allow icmp from any to me icmptypes 0,3,4,11,12 in 
${ipfw} add allow icmp from any to 192.168.0.0/16 icmptypes 0,3,4,11,12 in recv $IfOut 
${ipfw} add allow icmp from me to any icmptypes 3,8,12 out

echo "ssh"
ipfw add allow tcp from any to $IpIn 909 in recv $IfIn
ipfw add allow tcp from $IpIn 909 to any out xmit $IfIn established

# block and log
ipfw add deny log tcp from any to $IpOut in recv $IfOut setup

echo "########### BEGIN USERS   ###############################"

ipfw add allow tcp from 192.168.0.38 $mail,$http to any out xmit $IfOut
ipfw add allow tcp from any to 192.168.0.38 $mail,$http in recv $IfOut established

.....

echo "########### END USERS     ###############################"

Это уже с самого нуля переписанные правила.
По предыдущему варианту правил убежало 700 метров трафика =(((

Отсюда вопросы: почему по netstat -nr показываются маршруты в локальную сеть через внешний интерфейс (rl0)?
И будет ли это работать? =)
И как правильно раздавать инет юзерам. Т.е. - так, как я это написал или как-то по-другому?
Надо ли вообще писать роуты?
Т.е. это же гейт.
К нему приходят пакеты. А он уже их натит, фаерволит и передает (если они прошли) defaultrouter'у
Т.е. маршруты-то до других сетей ему ненужны. Верно?

Но с другой стороны, если я не пишу маршрутов, то и не могу с гейта пинговать машины в сети.
...

Блин.
Ничего не понимаю ВООБЩЕ.
Сейчас снова сидел с Фряхой. Толку - ноль. Вообще запутался.
Прописал маршруты на локальные сетки, а фряха машины внутри сети вообще не видит!
Внешние айпишники пингует, а внутренние нет.

И еще...

Убрал вообще нафиг статические маршруты из /etc/rc.conf от греха подальше.

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

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: IPFW + NAT. Не получается.

Непрочитанное сообщение schizoid » 2007-08-23 14:20:20

а че так?
ipfw add divert natd all from 192.168.0.0/16 to not 192.168.0.0/16 out xmit $IfOut
ipfw add divert natd all from any to $IpOut in recv $IfOut
и это, намалюй рисунок...шота образно трудно представить.
интрефейс, который в сеть смотрит он куда включен? в свич шоле? и че у него маска 30?
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Nadz Goldman
рядовой
Сообщения: 12
Зарегистрирован: 2007-07-10 9:52:29

Re: IPFW + NAT. Не получается.

Непрочитанное сообщение Nadz Goldman » 2007-08-23 14:33:04

Маска /30 понта ради
13,1 - гейт в инет.
13.2 - роутер
Вложения
Безымянный.JPG

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: IPFW + NAT. Не получается.

Непрочитанное сообщение schizoid » 2007-08-23 14:52:33

а так пробовал?

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

add divert 8668 ip from 192.168.0.0/16 to any out xmit rl0
add divert 8668 ip from any to me in recv rl0
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: IPFW + NAT. Не получается.

Непрочитанное сообщение schizoid » 2007-08-23 14:58:14

И как правильно раздавать инет юзерам. Т.е. - так, как я это написал или как-то по-другому?
Надо ли вообще писать роуты?
для каждой сетки не нада
Раздавать инет см. выше, правила для НАТа
К нему приходят пакеты. А он уже их натит, фаерволит и передает (если они прошли) defaultrouter'у
Т.е. маршруты-то до других сетей ему ненужны. Верно?
верно
Но с другой стороны, если я не пишу маршрутов, то и не могу с гейта пинговать машины в сети.
...
маску на гейте /16 сделай и будешь всех видеть
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Nadz Goldman
рядовой
Сообщения: 12
Зарегистрирован: 2007-07-10 9:52:29

Re: IPFW + NAT. Не получается.

Непрочитанное сообщение Nadz Goldman » 2007-08-24 13:53:44

Короче. Взял сегодня пример Lissyar'ы и полностью его скопировал на гейт.
Т.е. ядро собрал с нужными опциями (кроме default_to_accept), сетевухам дал нужные айпишники, в скрипте все поправил...

В общем, сделал все так, что бы был с одной стороны инет, с другой - одна тачка, а между ними - гейт.
Никаких маршрутов не писал.
На гейте указаны ДНС прова, гейт прова...

Мой гейт пингуется изнутри.
Но наружу никто не ходит...
Блин.
Да что не так-то...

_kirill_
ст. сержант
Сообщения: 311
Зарегистрирован: 2007-05-11 9:41:21
Откуда: Tashkent
Контактная информация:

Re: IPFW + NAT. Не получается.

Непрочитанное сообщение _kirill_ » 2007-08-25 21:10:27

Nadz Goldman писал(а):Короче. Взял сегодня пример Lissyar'ы и полностью его скопировал на гейт.
Т.е. ядро собрал с нужными опциями (кроме default_to_accept), сетевухам дал нужные айпишники, в скрипте все поправил...

В общем, сделал все так, что бы был с одной стороны инет, с другой - одна тачка, а между ними - гейт.
Никаких маршрутов не писал.
На гейте указаны ДНС прова, гейт прова...

Мой гейт пингуется изнутри.
Но наружу никто не ходит...
Блин.
Да что не так-то...
а что конкректно тебе надо сделать кроме ipfw + nat?

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

Re: IPFW + NAT. Не получается.

Непрочитанное сообщение Alex Keda » 2007-08-25 22:37:26

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

маску на гейте /16 сделай и будешь всех видеть
небудет. если я правильно понял - то подсети а не хосты же у него.
начальная идея с ручным роутингом - верная, просто надо сесть с бумажкой расписать пути пакетов от клиентов до инета и обратно.
и всё встанет на свои места.
===========
бумажка - рулит :)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
OSBoy
сержант
Сообщения: 228
Зарегистрирован: 2007-04-09 12:17:50
Откуда: Из капусты

Re: IPFW + NAT. Не получается.

Непрочитанное сообщение OSBoy » 2007-08-30 16:24:04

Для раздачи интернета у тебя должно быть нечто вроде этого:

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

add allow ip from 192.168.0.0/16 to any in via ${IfIn}
add divert 8668 ip from 192.168.0.0/16 to any out recv ${Ifin} xmit ${IfOut}
add allow ip from ${IpOut} to any out via ${IfOut}
add divert 8668 ip from any to ${IpOut} in via ${IfOut}
add allow ip from any to 192.168.0.0/16 in via ${IfOut}
add allow ip from any to 192.168.0.0/16 out via ${IfIn}

Аватара пользователя
kolesya
сержант
Сообщения: 191
Зарегистрирован: 2006-10-17 15:54:01
Откуда: Украина, Киев

Re: IPFW + NAT. Не получается.

Непрочитанное сообщение kolesya » 2007-09-07 19:47:13

картинку разрисуй поподробнее, мож и ответят те толком ... :P