Настройка NAT во FreeBSD
В статье описывается процесс настройки NAT’а (Network Address Translation) на простом примере предоставления доступа к ресурсам внешней сети (или интернету) из внутренней локальной сети.
В данной статье мы будем рассматривать настройку Nat на примере раздачи интернета в локальную сеть.
Итак, у нас есть сервер под управлением FreeBSD, подключенный к сети провайдера («внешняя сеть»).
Также имеется один или несколько компьютеров («внутренняя сеть»), которым нужно дать доступ к ресурсам сети интернет.
Подключить компьютеры внутренней сети напрямую к внешней нельзя, так как у нас есть всего 1 IP-Адрес во внешней сети, который выдан нашему серверу.
Выходом из ситуации будет соединение сетей через сервер (в данной ситуации всётаки «роутер» будет более правильно) при помощи технологии NAT
Предположим что сеть провайдера имеет диапазон 123.123.123.0/24, а IP который выдал нам провайдер 123.123.123.111.
Внутренняя сеть же имеет диапазон 192.168.10.0/24 и IP нашего роутера в ней 192.168.0.1
Диапазон IP адресов во внутренней сети может быть любой, однако необходимо чтобы он не пересекался с диапазонами ни в одной внешней сети.
Рекомендуется придерживаться зарезервированных для локальных сетей диапазонов, которые не используются в интернете, а именно:
10.0.0.0 — 10.255.255.255
172.16.0.0 — 172.31.255.255
192.168.0.0 — 192.168.255.255
Итак в итоге мы имеем:
Внешняя сеть(сеть интернет):
Интерфейс: rl0
IP: 123.123.123.111
Маска под сети: 255.255.255.0
Шлюз: 123.123.123.1
Внутренняя сеть(локальная сеть):
Интерфейс: rl1
IP: 192.16.0.1
Маска под сети: 255.255.255.0
Настройка сервера
Непосредственно за преобразование адресов (NAT) отвечает демон NATD.
Сам по себе он не может обрабатывать пакеты. Для обработки пакет должен быть передан ему фаерволлом.
В данной статье мы используем фаерволл ipfw.
Настройка сводится к нескольким шагам, некоторые вы возможно пропустите, если система уже имеет подходящие настройки:
1. Сборка ядра
Для получения возможности использовать NAT и Фаерволла, нам потребуется собрать новое ядро с дополнительными опциями:
options IPFIREWALL options IPDIVERT
Более подробно о сборке ядра можно почитать в соответствующей главе Руководства по FreeBSD
Первая опция включает фаерволл ipfw, а вторая — возможность передавать пакеты на обработку приложениям.
Если вы раньше никогда не собирали своё ядро, то не расстраивайтесь, здесь всё просто.
Переходим в папку с файлами где хранится не скомпилированое ядро, создаём свою собственную конфигурацию ядра и добавляем в него строчки опций которые Вам необходимы
После чего остаётся только скомпилировать и установить новое ядро.
Для компиляции нового ядра выполните следующие действия:
cd /usr/src/sys/i386/conf cp GENERIC MYKERNEL ee MYKERNEL
Изменяем строку
ident GENERIC
на
ident MYKERNEL
после чего добавляем строки
options IPFIREWALL options IPDIVERT
и сохраняем.
Конфигурация ядра готова. Теперь осталось ее скомпилировать и установить новое ядро:
cd /usr/src make buildkernel KERNCONF=MYKERNEL make installkernel KERNCONF=NATKERNEL
2. Настройка фаерволла
Если вы ранее использовали фаерволл ipfw, то необходимо добавить к нему следующее правило:
divert natd ip any to any via rl0
Означает оно следующее: передавать все ip пакеты на обработку внешней программе, «висящей» на стандартном порту natd (8668).
Если же фаерволл у вас не настроен, то мы его сейчас настроим ![]()
Создаём файл /etc/firewall.conf и пишем в нём следующие строки:
fw="/sbin/ipfw -q" ${fw} -f flush ${fw} add divert natd ip any to any via rl0 ${fw} add 65534 allow ip any to any
После чего сохраняем файл.
Теперь необходимо поставить права на выполнение данного файла.
chmod 700 /etc/firewall.conf
3. Настройка параметров авто запуска сети, фаерволла и natd
Сейчас нам необходимо внести некоторые изменения в файл /etc/rc.conf для обеспечения автоматической настойки сети, фаерволла и запуска NAT‘а при загрузке системы.
Сеть:
ifconfig_rl0="inet 123.123.123.111 netmask 255.255.255.0" ifconfig_rl1="inet 192.168.0.1 netmask 255.255.255.0" defaultrouter="123.123.123.1"
Фаерволл:
firewall_enable="YES" firewall_script="/etc/firewall.conf"
NAT:
gateway_enable="YES" natd_enable="YES" natd_interface="rl0"
Если Вы хотите перенаправить какой-то определенный порт на определенный компьютер в сети то необходимо отредактировать(создать) файл /etc/natd.conf и прописать в нем:
redirect_port tcp 192.168.0.2:3389 3389
Данная строчка означает что все входящие соединения на внешний порт 3389 будут перенаправлены на 192.168.10.2:3389
Также желательно добавить следующую строку в /etc/sysctl.conf
net.inet.ip.forwarding=1
Это аналогия gateway_enable=»YES»
На этом базовая настройка сервера закончена.
После перезагрузки NAT должен заработать.
Если этого не произошло, то проверьте правильно ли вы всё сделали.