Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по FreeBSD (http://forum.oszone.net/forumdisplay.php?f=10)
-   -   [решено] Динамическое подключение IPFW & NAT (http://forum.oszone.net/showthread.php?t=113827)

Аlchemist 08-08-2008 10:09 870934

Динамическое подключение IPFW & NAT
 
Есть желание использовать ядро GENERIC и в связи с этим возник вопрос:
Как лучше подключить фаер с натом?
Для ipfw понял что так:
# echo 'ipfw_load="YES"' >> /boot/loader.conf
Ну и стандартные строки в rc.conf естественно...
Как подключить НАТ? причем хотелось бы использовать kernel NAT вместо natd.

Dm1try 08-08-2008 17:01 871266

Цитата:

Есть желание использовать ядро GENERIC
То есть FORWARD и DIVERT - использовать не планируете?

Цитата:

хотелось бы использовать kernel NAT вместо natd.
kernel NAT - это что?

Аlchemist 09-08-2008 00:26 871519

Цитата:

Цитата Dm1try
То есть FORWARD и DIVERT - использовать не планируете? »

как раз планирую и ищу способы альтернативной реализации
Цитата:

Цитата Dm1try
kernel NAT - это что? »

Вот тут обсуждали: http://www.opennet.ru/openforum/vslu...ID3/40608.html

А это я нашел в мане по ipfw:
Код:

NAT, REDIRECT AND LSNAT
    First redirect all the traffic to nat instance 123:

          ipfw add nat 123 all from any to any

    Then to configure nat instance 123 to alias all the outgoing traffic with
    ip 192.168.0.123, blocking all incoming connections, trying to keep same
    ports on both sides, clearing aliasing table on address change and keep-
    ing a log of traffic/link statistics:

          ipfw nat 123 config ip 192.168.0.123 log deny_in reset same_ports

    Or to change address of instance 123, aliasing table will be cleared (see
    reset option):

          ipfw nat 123 config ip 10.0.0.1

    To see configuration of nat instance 123:

          ipfw nat 123 show config

    To show logs of all the instances in range 111-999:

          ipfw nat 111-999 show

    To see configurations of all instances:

          ipfw nat show config

    Or a redirect rule with mixed modes could looks like:

          ipfw nat 123 config redirect_addr 10.0.0.1 10.0.0.66
                          redirect_port tcp 192.168.0.1:80 500
                          redirect_proto udp 192.168.1.43 192.168.1.1
                          redirect_addr 192.168.0.10,192.168.0.11
                                  10.0.0.100 # LSNAT
                          redirect_port tcp 192.168.0.1:80,192.168.0.10:22
                                  500              # LSNAT

    or it could be splitted in:

          ipfw nat 1 config redirect_addr 10.0.0.1 10.0.0.66
          ipfw nat 2 config redirect_port tcp 192.168.0.1:80 500
          ipfw nat 3 config redirect_proto udp 192.168.1.43 192.168.1.1
          ipfw nat 4 config redirect_addr
          192.168.0.10,192.168.0.11,192.168.0.12
                                        10.0.0.100
          ipfw nat 5 config redirect_port tcp
                          192.168.0.1:80,192.168.0.10:22,192.168.0.20:25 500


Dm1try 10-08-2008 09:37 872087

ТО есть, NAT работающий в kernel space.
Я знаю что в 7.x ipfw научился делать NAT без natd, но мне честно, лень, искать что нужно для этого.
Очевидно одно - пересборка ядра потребуется.

Попробуйте загрузить модулем pf, он и NAT умеет, и много чего еще.

Аlchemist 10-08-2008 14:23 872212

Поднял тестовую машину, дописал в rc.conf стандартные вещи:
firewall_enable="YES"
firewall_script="/etc/rules"
natd_enable="YES"
natd_interface="rl0"
в /boot/loader.conf:
ipfw_load="YES"'
- все пашет без пересборки ядра. Нат работает по стандартным правилам natd...

Dm1try 11-08-2008 11:47 872820

Очевидно Вы используете user space nat :)
Почему это так:
Код:

root@mail# more /etc/rc.d/natd
#!/bin/sh
#
# $FreeBSD: src/etc/rc.d/natd,v 1.5 2006/12/31 10:37:18 yar Exp $
#

# PROVIDE: natd
# KEYWORD: nostart nojail

. /etc/rc.subr
. /etc/network.subr

name="natd"
rcvar=`set_rcvar`
command="/sbin/${name}"
pidfile="/var/run/${name}.pid"
start_precmd="natd_precmd"
required_modules="ipdivert"

natd_precmd()
{
        if [ -n "${natd_interface}" ]; then
                dhcp_list="`list_net_interfaces dhcp`"
                for ifn in ${dhcp_list}; do
                        case "${natd_interface}" in
                        ${ifn})
                                rc_flags="$rc_flags -dynamic"
                                ;;
                        esac
                done

                if echo "${natd_interface}" | \
                    grep -q -E '^[0-9]+(\.[0-9]+){0,3}$'; then
                        rc_flags="$rc_flags -a ${natd_interface}"
                else
                        rc_flags="$rc_flags -n ${natd_interface}"
                fi
        fi

        return 0
}

load_rc_config $name
run_rc_command "$1"

Таким образом используется как не сложно догадаться: /sbin/natd.

Далее, обращаем внимание на вывод данной команды:
Код:

# ls -la /boot/kernel|grep nat
-r-xr-xr-x  1 root  wheel    14016 Jun 30 20:28 ipfw_nat.ko
-r-xr-xr-x  1 root  wheel    91520 Jun 30 20:28 ipfw_nat.ko.symbols

ИМХО, то есть для того чтобы использовать NAT in kernel space без пересборки ядра нужно:
Код:

kldload ipfw_nat
По зависимотям к данному модулю тянется:
Код:

# kldstat
Id Refs Address            Size    Name
 1    4 0xffffffff80100000 8fd0f8  kernel
 2    1 0xffffffffd9886000 128c    ipfw_nat.ko
 3    1 0xffffffffd9888000 5d93    libalias.ko

О чем собственно свидетельствует и надпись в dmesg моего ядра:
ipfw2 initialized, divert enabled, nat loadable, rule-based forwarding enabled, default to accept, logging limited to 1000 packets/entry by default

А все же желательно пересобрать ядро:
Код:

options        IPFIREWALL_NAT
options        LIBALIAS


Аlchemist 11-08-2008 12:16 872834

Dm1try, спасибо, все так и получается :)


Время: 16:21.

Время: 16:21.
© OSzone.net 2001-