Логика работы kernel based nat в freebsd 7

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
mafet
проходил мимо
Сообщения: 3
Зарегистрирован: 2008-09-12 17:26:10

Логика работы kernel based nat в freebsd 7

Непрочитанное сообщение mafet » 2008-09-12 17:27:26

Приветствую!
Возникла проблема с пониманием логики работы kernel based nat в freebsd 7.
Раньше использовал natd-там было всё более понятно.
Имеется роутер, стоящий в домовой сети. Инет на него получается через vpn.
fxp2 - интерфейс смотрящий в сеть провайдера $TCEXE имеет ип $TCEXE_IP
fxp0 - интерфейс смотрящий в домашнюю сеть $MAFNET имеет ип $MAF_IP
ng0 - впн-интерфейс, имеет ип $INET_IP
На роутере так же крутится www-сервер на 80 порту.
Для построения правил используется скрипт:

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

#!/usr/local/bin/bash

IPFW="/sbin/ipfw -q"
DEFAULTACTION="reset"

#------------------------Networks----------------------------------
TCEXE="10.0.0.0/8,172.16.0.0/15,89.19.160.130,89.19.160.132"
MAFNET="172.32.0.0/25"
#------------------------My_IPS------------------------------------
TCEXE_IP="172.17.152.35"
INET_IP="$(cat /etc/myip)"
MAF_IP="172.32.0.254"
#------------------------Other IPs---------------------------------
ALLMYIPS="${INET_IP},${MAF_IP},${TCEXE_IP}"
LOCALNETS="${TCEXE},${MAFNET}"
#------------------------------------------------------------------

case "$1" in
    start)
        echo 'Configuring IPFW...'
        ${IPFW} -f pipe flush
        ${IPFW} -f queue flush
        ${IPFW} -f flush

        ${IPFW} add 90 allow all from any to any

#разрешаю полный доступ к роутеру на всякий случай
		${IPFW} add 1000 allow all from 172.32.0.0/24 to me
        ${IPFW} add 1001 allow all from me to 172.32.0.0/24

#---------------------------------Divert------------------------------
#3000
        ${IPFW} nat delete 8668
        ${IPFW} nat 8668 config ip ${INET_IP} log reset same_ports
        ${IPFW} add 3000 nat 8668 all from ${MAFNET}                            to not ${LOCALNETS} out recv fxp0 xmit ng0

        ${IPFW} nat delete 8669
        ${IPFW} nat 8669 config ip ${TCEXE_IP} log reset same_ports
        ${IPFW} add 3010 nat 8669 all from ${MAFNET}                            to ${TCEXE} out recv fxp0 xmit fxp2

        ${IPFW} add 3030 nat 8668 all from not ${LOCALNETS}         			to ${INET_IP} in recv ng0
        ${IPFW} add 3040 nat 8669 all from ${TCEXE}                             to ${TCEXE_IP} in recv fxp2

#----------------------------------------------------------------------

        ${IPFW} add 3060 allow all from me to any
        ${IPFW} add 3060 allow icmp from any to me
        ${IPFW} add 3070 allow tcp from any to me established
        ${IPFW} add 3080 allow udp from any to me 123,1023-65535
        ${IPFW} add 3095 allow gre from any to me

#---------------------------------Allow from MAF to TCEXE------------
        ${IPFW} add 4000 allow all from ${MAFNET} to ${TCEXE}
        ${IPFW} add 4100 allow all from ${TCEXE} to ${MAFNET}
#---------------------------------Allow from MAF to INET---------
        ${IPFW} add 4500 allow all from ${MAFNET} to not ${LOCALNETS}
        ${IPFW} add 4600 allow all from not ${LOCALNETS} to ${MAFNET}
#----------------------------------------------------------------------
        ${IPFW} add 65534 ${DEFAULTACTION} log logamount 0 all from any to any
        ${IPFW} delete 90
        ;;
    stop)
        echo 'Configuring IPFW...'
        ${IPFW} flush
        ${IPFW} add 65534 allow all from any to any
        ;;
    *)
        echo "Usage: `basename $0` { start | stop | restart}"
        exit 64
esac
В данной конфигурации всё работает. Инет есть и на роутере и на домашнем компе за nat-ом. НО! Имеется так же доступ к 80 порту www-серверу с интернета, хотя его быть не должно, поскольку нет соответствующих правил для этого:
ext_server - внешний сервер использованный для тестирования

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

[root@ext_server ~]$ telnet mafet.ru 80
Trying 89.19.167.253...
Connected to mafet.ru.
Escape character is '^]'.
Добавляю опцию deny_in а так же добавляю заранее правило разрешающее доступ к VPN-серверу. Получается такой скрипт:

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

#!/usr/local/bin/bash

#8669 - 172.17.152.35
#8670 - 172.32.26.254
#8672 - 89.19.167.253

IPFW="/sbin/ipfw -q"
DEFAULTACTION="reset"

#------------------------Networks----------------------------------
TCEXE="10.0.0.0/8,172.16.0.0/15,89.19.160.130,89.19.160.132"
MAFNET="172.32.0.0/25"
#------------------------My_IPS------------------------------------
TCEXE_IP="172.17.152.35"
INET_IP="$(cat /etc/myip)"
MAF_IP="172.32.0.254"
#------------------------Other IPs---------------------------------
BLOCK_IP="172.16.53.102"
ALLMYIPS="${INET_IP},${MAF_IP},${TCEXE_IP}"
LOCALNETS="${TCEXE},${MAFNET}"
#------------------------------------------------------------------

case "$1" in
    start)
        echo 'Configuring IPFW...'
        ${IPFW} -f pipe flush
        ${IPFW} -f queue flush
        ${IPFW} -f flush

        ${IPFW} add 90 allow all from any to any

        ${IPFW} add 1000 allow all from 172.32.0.0/24,10.10.10.10,10.0.0.60 to me
        ${IPFW} add 1001 allow all from me to 172.32.0.0/24,10.10.10.10,10.0.0.60

#---------------------------------Divert------------------------------
#3000
        ${IPFW} nat delete 8668
        ${IPFW} nat 8668 config ip ${INET_IP} log deny_in reset same_ports
        ${IPFW} add 3000 nat 8668 all from ${MAFNET}                            to not ${LOCALNETS} out recv fxp0 xmit ng0

        ${IPFW} nat delete 8669
        ${IPFW} nat 8669 config ip ${TCEXE_IP} log deny_in reset same_ports
        ${IPFW} add 3010 nat 8669 all from ${MAFNET}                            to ${TCEXE} out recv fxp0 xmit fxp2

        ${IPFW} add 3030 nat 8668 all from not ${LOCALNETS}               to ${INET_IP} in recv ng0
        ${IPFW} add 3040 nat 8669 all from ${TCEXE}                             to ${TCEXE_IP} in recv fxp2

#----------------------------------------------------------------------

        ${IPFW} add 3060 allow all from me to any
        ${IPFW} add 3060 allow icmp from any to me
        ${IPFW} add 3070 allow tcp from any to me established
        ${IPFW} add 3080 allow udp from any to me 123,1023-65535
        ${IPFW} add 3095 allow gre from any to me

#---------------------------------Allow from GODE to TCEXE------------
        ${IPFW} add 4000 allow all from ${MAFNET} to ${TCEXE}
        ${IPFW} add 4100 allow all from ${TCEXE} to ${MAFNET}
#---------------------------------Allow from MAF&GODE to INET---------
#       ${IPFW} add 4499 allow all from 172.32.0.0/24 to any limit src-addr 1
        ${IPFW} add 4500 allow all from ${MAFNET} to not ${ALLMYIPS},${LOCALNETS}
        ${IPFW} add 4600 allow all from not ${ALLMYIPS},${LOCALNETS} to ${MAFNET}
#----------------------------------------------------------------------
        ${IPFW} add 65534 ${DEFAULTACTION} log logamount 0 all from any to any
        ${IPFW} delete 90
        ;;
    stop)
        echo 'Configuring IPFW...'
        ${IPFW} flush
        ${IPFW} add 65534 allow all from any to any
        divert
        ;;
    stop2)
        echo 'Configuring IPFW...'
        ${IPFW} flush
        ${IPFW} add 65534 allow all from any to any
        ;;
    *)
        echo "Usage: `basename $0` { start | stop | restart}"
        exit 64
esac
Доступ на порты роутера пропадает, но вместе с тем пропадает и доступ в инет и в сеть с роутера. Инет не пропадает, т.к. я прописал отдельное правило для доступа к vpn-серверу. При этом разумеется доступ с моей домашней тачки к впн-серверу пропал, т.к я написал правило до nat-а. Если правила доступа с роутера в сеть поставить перед nat-ом, то нат соответственно работать вообще не будет, но зато будет работать инет и сеть на роутере.

Как с учётом этого всего мне заставить работать инет с сетью на роутере и на машинах за NAT-ом и иметь только определенный диапазон открытых портов на роутере.[/i]

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

Аватара пользователя
uHk
мл. сержант
Сообщения: 134
Зарегистрирован: 2008-05-21 15:16:48
Откуда: Москва
Контактная информация:

Re: Логика работы kernel based nat в freebsd 7

Непрочитанное сообщение uHk » 2008-09-13 2:23:24

net.inet.ip.fw.one_pass - может это поможет?
надо сразу брать лошадь за рога

mafet
проходил мимо
Сообщения: 3
Зарегистрирован: 2008-09-12 17:26:10

Re: Логика работы kernel based nat в freebsd 7

Непрочитанное сообщение mafet » 2008-09-13 2:24:23

Побывал, к сожалению не помогает :-(
у меня есть подозрение что можно пошаманить с keep-state check-state и с skipto. Но пока не могу придумать как :-(

Nix86
проходил мимо

Re: Логика работы kernel based nat в freebsd 7

Непрочитанное сообщение Nix86 » 2008-09-13 14:04:20

А можно увидеть ipfw show
Меня смущает первое правило

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

${IPFW} add 90 allow all from any to any

mafet
проходил мимо
Сообщения: 3
Зарегистрирован: 2008-09-12 17:26:10

Re: Логика работы kernel based nat в freebsd 7

Непрочитанное сообщение mafet » 2008-09-13 14:10:35

оно потом удаляется.

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

 ${IPFW} delete 90
Криво, но обычно помогает не потерять доступ к роутеру :-)