В статье описывается процесс настройки NAT'а (natd) на простом примере
предоставления доступа к ресурсам внешней сети (или интернету) из внутренней
локальной сети.
Здесь мы будем рассматривать настройку ната на примере
соединения локальных сетей. Если вам нужно "раздавать" интернет на внутреннюю
сеть вместо этого, не расстраивайтесь, там всё точно также :)
Итак, у нас
есть сервер под управлением FreeBSD, подключенный к локальной сети провайдера
("внешняя сеть"). Также имеется один или несколько компьютеров ("внутреняя
сеть"), которым нужно дать достук ресурсам сети провайдера. Подключить
компьютеры внутренней сети напрямую к внешней нельзя, т.к. у нас есть всего 1
IP-Адрес во внешней сети, который выдан нашему серверу. Выходом из ситуации
будет соединение сетей через сервер (в данной ситуации всётаки "роутер" будет
более правильно) при помощи технологии NAT (Network Address
Translation) Предположим что сеть провайдера имеет диапазон 10.10.10.0/24, а
IP нашего роутера в ней 10.10.10.10 Внуренняя сеть же имеет диапазон
172.16.0.0/24 и IP нашего роутера в ней 172.16.0.1 Диапазон IP адресов во
внутренней сети может быть любой, однако необходимо чтобы он не пересекался с
диапазонами ни в одной внешней сети. Рекомендуется придерживаться
зарезервированных для локальных сетей диапазонов, которые не используются в
интернете, а именно:
Объединяя всё написанное
выше, получем такую схему сети:
Стоит
заметить, что если внутренняя сеть предстваляет из себя оди компьютер, то свитч
совершенно не нужен. Со схемой сети вроде разобрались, теперь переходим к
настройке нашего роутера.
Непосредственно за преобразование адресов (NAT)
отвечает демон NATD. Сам по себе он не может обрабтывать пакеты. Для
обработки пакет должен быть передан ему фаерволлом. В данной статье мы
используем фаерволл ipfw. Настройка сводится к нескольким шагам, некоторые вы
возможно пропустите, если система уже имеет подходящие настройки.
Для получения возможности использовать NAT и
Фаерволл, нам потребуется собрать новое ядро с дополнительными опциями. Более
подробно о сборке ядра можно почитать в соотвествующей главе Руководства по FreeBSD.
Необходимо
собрать ядро со следующими опциями: options IPFIREWALL options
IPDIVERT
Первая включает фаерволл ipfw, а вторая возможность
передавать пакеты на обработку приложениям.
Если вы раньше никогда не
собирали своё ядро, то не расстраивайтесь, здесь всё просто. Переходим в
папку с файлами ядер, содаём свой собственный конфиг ядра и добавляем в него
строчки опций. После чего остаётся только скомпилировать и установить новое
ядро. Теперь всё это пошагово:
cd /usr/src/sys/i386/conf cp
GENERIC NATKERNEL ee NATKERNEL
Изменяем строку ident
GENERIC на ident NATKERNEL после чего добавляем
строки options IPFIREWALL options IPDIVERT
и наконец,
сохраняем (ESC, a, a) -
Конфиг ядра готов. Теперь
компилируем: cd /usr/src make buildkernel
KERNCONF=NATKERNEL
Когда компиляция будет завершена, останется только
установить новое ядро. Это так же очень просто: cd /usr/src make
installkernel KERNCONF=NATKERNEL
Новое ядро начнёт работать после
перезагрузки компьютера. Однако сейчас перезгружать совсем не обязательно,
можно продолжить настройку.
Если вы ранее использовали фаерволл 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
Вот мы и добрались
до финального шага настройки. Сейчас нам необходимо внести некоторые
изменения в файл /etc/rc.conf для обеспечения автоматической настойки сети,
фаерволла и запуска NAT'а при загрузке системы.
Теперь
фаерволл: firewall_enable="YES" firewall_script="/etc/firewall.conf"
И
наконец
NAT: gateway_enable="YES" natd_enable="YES" natd_interface="rl0" Также
желательно добавить следующую строку в
/etc/sysctl.conf net.inet.ip.forwarding=1 Это аналогия
gateway_enable="YES"
На этом базовая настройка роутера
закончена. После перезагрузки NAT должен заработать. Если этого не
произошло, то проверьте правильно ли вы всё сделали.
На компьютерах внутренней сети
необходимо установить следующие параметры: IP: 172.16.0.2 -
172.16.0.254 Шлюз: 172.0.0.1
Вот так просто настраивается NAТ
в операционной системе FreeBSD :) Конечно, здесь рассмотрен довольно простой
случай использования NAT'а, но он также является основным.
Дополнительную
информацию можно получить из: man natd man ipfw man rc.conf