Отже у нас є два інтерфейси:
ed0 - дивиться в бік ISP (200.200.200.1 netmask 255.255.255.252) ed1 дивиться в бік локальної мережі (192.168.1.1 netmask 255.255.255.0
Існує два варіанти реалізації NAT у FreeBSD. ipnat + ipf і natd + ipfw, ми зупинимося на останньому, оскільки ipfw більш популярний.
Для початку Собр ядро з наступними опціями:
# Включаємо підтримку firewall-a
options IPFIREWALL
options IPFIREWALL_VERBOSE
options "IPFIREWALL_VERBOSE_LIMIT = 100"
# Включаємо DIVERT пакетів приходять на інтерфейс для NAT
options IPDIVERT
Після команди make depend; make clean; make all; make install перезавантажити систему і займемося налаштуванням firewall-a. Створимо файл в /usr/local/etc/rc.d/firewall.sh і дамо йому право виконання chmod + x firewall.sh.
#! / Bin / sh
# Очищаємо попередні правила
/ Sbin / ipfw -f flush
# Дозволяємо NATD
/ Sbin / ipfw add divert natd ip from 192.168.1.0/24 to any out via ed0
/ Sbin / ipfw add divert natd ip from any to 200.200.200.1 in via ed0
# Нижче йде рядок відкриває роботу по всіх портах зовні
# Ви повинні самі написати правила фільтрації під вашу мережу
/ Sbin / ipfw add pass all from any to any via ed1
Тепер створимо файл /usr/local/etc/rc.d/natd.sh (давши на нього chmod + x):
#! / Bin / sh
# Запускаємо при старті natd і вказуємо щоб він працював з ed0 (ключ -n)
/ Sbin / natd -f /etc/natd.conf -n ed0
У файлі /etc/natd.conf прописуємо
same_ports yes use_sockets yes
У /etc/rc.conf обов'язково повинна бути рядок:
gateway_enable = "YES"
Через natd працюють будь-які поштові клієнти, будь-які версії ICQ і інших socks клієнтів - його настройка набагато краще ніж налаштовувати окремо проксі сервер на кожен сервіс окремо.