ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

В помощь новичкам.

Итак, перед вами встала задача раздать Инет на компы за сервером FreeBSD.

Как и множество других вещей во FreeBSD эту задачу можно решить несколькими способами.

Кратко покажу как это можно сделать используя в кач-ве NAT`а процесс natd.

Запускать natd можно несколькими способами, я покажу тот который обычно использую я сам.

Для работы нам потребуются 2 вещи:

  1. firewall ipfw с его возможностью divert
  2. natd

Для того, чтобы приступить необходимо пересобрать ядро с опциями:

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPDIVERT

Так же можно добавить опции:

options IPFIREWALL_FORWARD
options IPFIREWALL_VERBOSE_LIMIT=1000
options IPFIREWALL_DEFAULT_TO_ACCEPT

Либо подгрузить ipfw как модуль:
/sbin/kldload /boot/kernel/ipfw.ko

Скажем что:

  • сетевая карта в сторону провайдера em0 c IP 10.10.1.2/30
  • сетевая карта в сторону локалки em1 с IP 192.168.1.1/24

Запустим процесс natd:

/sbin/natd -s -m -a 10.10.1.2

Процесс natd должен «висеть» на внешнем интерфейсе ВСЕГДА !

Добавим необходимые правила в ipfw, для того, чтобы трафик попадал в natd:

/sbin/ipfw add 300 divert 8668 ip from any to 10.10.1.2
/sbin/ipfw add 310 divert 8668 ip from 192.168.1.0/24 to any
/sbin/ipfw add 350 allow ip from any to 192.168.1.0/24
/sbin/ipfw add 360 allow ip from 192.168.1.0/24 to any

Этих 4-х правил достаточно, чтобы дать доступ в интернет подсети 192.168.1.0/24.

Для того, что бы после ребута, все это поднялось, можно сделать следущее.

1. отредактировать файл /etc/rc.conf добавив:

firewall_enable=»YES»
firewall_script=»/etc/rc.firewall»
firewall_type=»/usr/local/etc/firewall.conf»
firewall_quiet=»YES»
firewall_logging=»YES»
firewall_flags=»»

2. написать наши правила в /usr/local/etc/firewall.conf:

add 100 allow ip from me to me via lo0
add 105 deny ip from any to any via lo0
add 300 divert 8668 ip from any to 10.10.1.2
add 310 divert 8668 ip from 192.168.1.0/24 to any
add 350 allow ip from any to 192.168.1.0/24
add 360 allow ip from 192.168.1.0/24 to any
add 65000 allow ip from any to any

3. создать файл /usr/local/etc/rc.d/natd.sh:

#!/bin/sh
/sbin/natd -s -m -a 10.10.1.2

4. сделать файл /usr/local/etc/rc.d/natd.sh исполняемым:

/bin/chmod a+x /usr/local/etc/rc.d/natd.sh

Можно поступить и немного по другому, запустив natd на интерфейсе, а не на IP-адресе:

отредактировать файл /etc/rc.conf добавить:

natd_program=»/sbin/natd» # path to natd, if you want a different one.
natd_enable=»YES» # Enable natd (if firewall_enable == YES).
natd_interface=»em0″ # Public interface or IPaddress to use.
natd_flags=»» # Additional flags for natd.

изменить правило номер 300 на:

add 300 divert 8668 ip from any to any via em0

Для полного понимания загляните в мануалы:

man natd
man ipfw
Там есть подробное описание и примеры.

З.Ы. В FreeBSD 7.x можно использовать kernel nat, но лб этом как нить потом или кратко если в разделе "Советы" на сайте.
З.З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Похожие статьи:

    Не найдено

Прочитано: 20 060 раз(а)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 4,25 из 5)
Загрузка...
Отправить на почту Отправить на почту

комментариев 5

  1. raven сказал:

    Во FreeBSD7 и без natd можно обойтись

  2. admin сказал:

    Можно, но об этом в другой статье или потом в эту допишу, т.к. сам ещё не пользовал kernel nat, руки не доходят 🙁
    Комент в статье добавил.

    raven, хочешь сам напиши 😉 если ты уже копался с этим.
    мы тока ЗА 😉

  3. raven сказал:

    Авторство не мое 🙂 но делал по этой статье.
    http://www.opennet.ru/tips/info/1618.shtml

    ipfw nat во FreeBSD 7

    В конфигурацию ядра добавляем:

    options IPFIREWALL #firewall
    options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
    options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default
    options IPDIVERT
    options IPFIREWALL_FORWARD
    options DUMMYNET
    options IPFIREWALL_NAT #ipfw kernel nat support
    options LIBALIAS

    в /etc/make.conf:

    CFLAGS+= -DIPFIREWALL_NAT

    Далее пересобираем систему:

    cd /usr/src/ ; make builworld && make kernel KERNCONF=YourKern && make installworld
    reboot

    В конфигурационном файле ipfw:

    NatIP=»111.111.111.111″
    ipfw nat 123 config ip ${NatIP} log
    ipfw add 10 nat 123 ip from 192.168.0.0/16 to any
    ipfw add 20 nat 123 ip from any to ${NatIP}

    Наслаждаемся достоинствами kernel nat

  4. admin сказал:

    а если нуна натить не на ипе, а на интерфейсе ?

  5. raven сказал:

    судя по ману, так: ipfw nat 123 config if ${ext_iface}

Добавить комментарий

Вам следует авторизоваться для размещения комментария.