В помощь новичкам.
Итак, перед вами встала задача раздать Инет на компы за сервером FreeBSD.
Как и множество других вещей во FreeBSD эту задачу можно решить несколькими способами.
Кратко покажу как это можно сделать используя в кач-ве NAT`а процесс natd.
Запускать natd можно несколькими способами, я покажу тот который обычно использую я сам.
Для работы нам потребуются 2 вещи:
- firewall ipfw с его возможностью divert
- 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, но лб этом как нить потом или кратко если в разделе "Советы" на сайте.
З.З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !
Похожие статьи:
- Не найдено
raven сказал:
Во FreeBSD7 и без natd можно обойтись
21.01.2009, 16:55admin сказал:
Можно, но об этом в другой статье или потом в эту допишу, т.к. сам ещё не пользовал kernel nat, руки не доходят 🙁
Комент в статье добавил.
raven, хочешь сам напиши 😉 если ты уже копался с этим.
21.01.2009, 17:03мы тока ЗА 😉
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
22.01.2009, 11:10admin сказал:
а если нуна натить не на ипе, а на интерфейсе ?
22.01.2009, 11:42raven сказал:
судя по ману, так: ipfw nat 123 config if ${ext_iface}
23.01.2009, 11:35