простые решения сложных проблем

В этой статье будет рассмотрена реализация простой (офисной или домашней) локальной сети c выходом в Интернет на базе операционной системы FreeBSD. Рассмотренный в предыдуших статьях сервер (он же шлюз в Интернет) будет реализован именно на этой операционной системе. Здесь мы рассмотрим только базовую установку FreeBSD и настройку выхода в Интернет, а дополнительные сетевые сервисы (FTP, WEB и пр.) будут рассмотренны в соответствующих статьях. Дальнейший материал будет основан на статье "Простая офисная локальная сеть с подключением к Интернет".

Базовая установка и настройка FreeBSD 

Итак, после подготовительных действий, рассмотренных в статье "Простая офисная локальная сеть с подключением к Интернет", приступим к установке операционной системы FreeBSD 6.2.

Образы CD можно скачать с сайта www.freebsd.org (2 CD).

После загрузки компьютера с инсталляционного CD запускается программа sysinstall, которая предназначена для установки и настройки FreeBSD. С помощью этой программы можно произвести настройку операционной системы не только во время установки, но и после, в любое время, запустив ее из командной строки (# sysinstall).

freebsd-net-1

 

Навигация в ней осуществляется с помощью следующих клавиш: стрелки курсора, <пробел><enter><tab> (причем <пробел> и <enter> эквивалентны, а клавиша <tab> аналогична стрелкам влево-вправо).
Чтобы вернуться на предыдущее меню, необходимо выбрать пункт Exit или [Cancel]. Омечать выбранные пункты можно или пробелом или enter-ом. (Из меню выбора пакетов (packages) можно выйти только, выбрав кнопку [Install], даже если вы никаких пакетов не хотите устанавливать.)

Начинаем установку.

1. Выбираем из меню пункт Custom.

2. Далее в появившемся меню выбираем пункт Partition и попадаем  в редактор слайсов (слайсы соответствуют первичным разделам в терминологии Windows и Linux; для установки FreeBSD достаточно одного слайса). Примечание: если в компьютере несколько жестких дисков, то сначала будет предложено меню выбора диска. 
Например, на моей машине уже есть два раздела с Windows XP , а остальное место обозначено как unused (не занято):

freebsd install 2 fdisk

Чтобы  удалить какой-либо раздел, на него надо стрелками вверх-вниз подвести курсор и нажать клавишу <D>, но если  необходимо оставить существующие разделы, например с Windows, то тогда их трогать не надо.
Чтобы создать слайс для freebsd надо подвести курсор на раздел, помеченный как unused, и нажать клавишу <C> (Create Slice). В появившемся окне надо ввести размер создаваемого слайса в блоках (или мегабайтах, добавив букву M после введенного числа, например - 1000M) или оставить значение по умолчанию для использования всего свободного пространства.
Далее соглашаемся с предложенным типом раздела (165 - для FreeBSD). В результате получаем слайс ad2s3, где  ad2s3 означает: ata disk 2slice 3.

freebsd install 3 fdisk

Для завершения редактирования слайсов  надо нажать клавишу <Q> (Finish).

3. В появившемся меню выбираем установку менеджера загрузки - BootMgr.

4. Выбираем пункт Label и попадаем в редактор разделов файловой системы FreeBSD. Здесь созданный ранее слайс  можно "нарезать" на разделы файловой системы FreeBSD. Это разбиение можно произвести автоматически, нажав клавишу <A> (Auto Defaults) или вручную. Попробуйте автоматическое разбиение. Удалить любой раздел  можно клавишей <D>. Но лучше вручную создать необходимые разделы. 
Для создания раздела курсор ставим на "нарезаемый" слайс ad2s3 (или какой там у вас... в самой верхней строке) и нажимаем клавишу <C> (Create), вводим размер создаваемого раздела (не забываем в конце числа букву M, если вводится размер в мегабайтах), выбираем тип "Swap" для swap раздела или "FS" - для всех остальных разделов и указываем точку монтирования. (Точка монтирования - это каталог, в который будет монтироваться раздел).  Повторяем процедуру для всех создаваемых разделов. Размеры разделов необходимо хорошо спрогнозировать. Например в разделе /var будут находиться временные файлы, лог-файлы, файлы баз данных, очереди  печати, почты и т.д.; в /usr (точнее в /usr/local) - все устанавливаемые дополнительно приложения; в /home - каталоги пользователей; размер раздела SWAP обычно выбирается равным одному-двум размерам RAM; для корневого раздела "/" достаточно 256MB.
У меня получилось так:

freebsd install 4 fdisk partition list

 

Как можно видеть, разделы файловой системы обозначаются добавлением буквы (a,b,...) к имени слайса. 
Завершаем редактирование разделов, нажав <Q> (Finish), и возвращаемся в меню.

5. Переходим к пункту Distributions, где можно выбрать тип базовой установки, и отмечаем опцию Developer, которая означает, что будут установлены все основные бинарные файлы (системные утилиты, библиотеки, компиляторы), исходники и документация. Соглашаемся на установку коллекции портов (Ports Collection). Далее, выбрав пункт Exit, возвращаемся в предыдущее меню и выбираем Commit, выбираем источник установки (в нашем случае CD/DVD) и отвечаем утвердительно на предупреждение о необратимости дальнейших действий. После этого идет процесс установки базовых компонентов системы. После завершения установки будет предложено вернуться  в кофигурационное меню для продолжения установки/насройки. Выбираем [YES] и возвращаемся в меню.

6. В пункте Root Password устанавливаем пароль пользователя root (администратора). Пункт User Manager не трогаем - пользователей добавим потом.

7. Руссифицируем консоль (пункт Console):

  •  в пункте Font выбираем IBM 866,
  •  в пункте Keymap выбираем Russia KOI8-R,
  •  в пункте Screenmap выбираем KOI8-R to IBM866,
  •  в пункте Ttys выбираем KOI8-R (cons25r).

8. Настраиваем мышь (пункт Mouse):

  • в пункте Type выбираем auto (в большинстве случаев),
  • в пункте Port выбираем PS/2 (или COM1...),
  • в пункте Enable включаем поддержку мыши и проверяем ее работу.

9. В пункте Networking можно настроить сеть:

  • в пункте Interfaces можно выбрать из списка и настроить определившиеся сетевые интерфейсы (для некоторых сетевых карточек возможно потребуется перекомпилировать ядро или настроить их, прежде чем они появятся в списке). Настроить сеть можно позже, см. раздел "Настройка сети" ниже.;
  • отмечаем опцию ssh, чтобы иметь защищенный удаленный доступ к системе;
  • отмечаем опцию Gateway, чтобы разрешить маршрутизацию ip пакетов между сетевыми интерфейсами (если машина будет использоваться как маршрутизатор).

Но к настройке сети мы еще вернемся в одной из следующих статей.

10. Пункт Security не трогаем.

11. Выбираем пункт Packages, чтобы сразу установить несколько пакетов, хотя устанавливать приложения лучше из портов. В CD-ROM должен быть установлен инсталляционный CD. Пока выберем только командный интерпретатор bash. Его можно найти  в группе shells. Ну, а далее по вкусу, например можно сразу выбрать установку XFree86-4.3, kde, moziila и т.д., хотя для сервера по большому счету иксы не нужны.
Отметив клавишей <enter> или <space> необходимые пакеты, выбираем внизу пункт [Install], затем [OK], ждем окончания установки и выходим из sysinstall. Соглашаемся на перезагрузку, не забываем вынуть CD. На этапе загрузки из меню загрузчика выбираем FreeBSD (если используется несколько ОС).

12. Входим в систему под именем root

13. Настраиваем консоль под себя. (Этот пункт выполнять необязательно).
Настроим и сделаем основным установленный нами командный интерпретатор bash (как в Linux).
Проверим, есть ли он в файле /etc/shells, если нет, то добавляем туда строку: /usr/local/bin/bash.
Сделать интерпретатор bash основным для суперпользователя root, можно командой: 

# pw usermod root -s /usr/local/bin/bash

Копируем файлы .bash_profile.bashrc.bash_logout из директории /usr/compat/linux/etc/skel в /root и /usr/share/skel, но уже с именами dot.bash_profiledot.bashrcdot.bash_logout соответственно. Сделать это можно следующими командами:

# cp /usr/compat/linux/etc/skel/.bash_profile  /root/.bash_profile 
# cp /usr/compat/linux/etc/skel/.bashrc  /root/.bashrc 
# cp /usr/compat/linux/etc/skel/.bash_logout  /root/.logout 
# cp /usr/compat/linux/etc/skel/.bash_profile  /usr/share/skel/dot.bash_profile 
# cp /usr/compat/linux/etc/skel/.bashrc  /usr/share/skel/dot.bashrc 
# cp /usr/compat/linux/etc/skel/.bash_logout /usr/share/skel/dot.logout

Теперь эти конфигурационные файлы при создании новых пользователей будут копироваться в их домашние каталоги.

Изменим настройки по умолчанию для интерактивной команды добавления пользователей adduser, запустив ее с ключом -C:

# adduser -C

(отвечаем class: russian, shell: bash, остальное оставляем по умолчанию).
Все. Теперь новые пользователи, созданные утилитой adduser, будут иметь руссифицированную консоль с командным интерпретатором bash.
И последний штрих. Для изменения приглашения командной строки в файлы .bashrc (и /usr/share/skel/dot.bashrc)  добавим строку: PS1='[u@h W]$ ', после чего приглашение будет выглядеть как [username@hostname currentdir]$ .
Отмечу, что редактировать конфигурационные файлы можно в простом текстовом редакторе ee, например:

# ee /usr/share/skel/dot.bashrc

Далее можно создавать новых пользователей с помощью утилиты adduser. Чтобы пользователь имел в дальнейшем возможность получать права суперпользователя root по команде su, его надо включить в группу wheel.
Переключать раскладку клавиатуры можно клавишей <CAPSLOCK>. При нажатой клавише <SHIFT> <CAPSLOCK> выполняет свою обычную функцию.

На этом начальная установка и настройка системы закончена.

Идем далее...

Конфигурирование ядра

Здесь мы коротко затронем вопросы конфигурирования и компиляции ядра.

Наверно, многие содрагались, услышав устрашающую фразу - "компиляция ядра системы". Однако, если спокойно разобраться, ничего страшного здесь нет. С точки зрения обывателя ядро - это "прослойка" между прикладными программами и "железом".  Прикладные программы не взаимодействуют с "железом" и между собой напрямую, все взаимодействие осуществляется через ядро, и взаимодействие это осуществляется через стандартный интерфейс системных вызовов. Кроме интерфейса системных вызовов ядро содержит файловую подсистему, подсистему управления процессами, подсистему ввода-вывода, драйверы устройств (модули ядра). Но нам пока важно лишь то, что ядро непосредственно взаимодействует с "железом", а FreeBSD  позволяет нам сконфигурировать ядро под конкретное "железо". Устанавливаемое по умолчанию ядро поддерживает много неиспользуемого в нашем случае оборудования и обеспечивает лишь базовую функциональность.

Приступим к конфигурации ядра

Настройка ядра FreeBSD осуществляется путем редактирования в любом текстовом редакторе конфигурационного файла ядра. По умолчанию это /usr/src/sys/i386/conf/GENERIC . Но мы будем редактировать не его, а его копию/usr/src/sys/i386/conf/NEW_GENERIC.
Для этого выполняем следующие команды:

# cd /usr/src 
# cp sys/i386/conf/GENERIC sys/i386/conf/NEW_GENERIC
# ee sys/i386/conf/NEW_GENERIC

В файле NEW_GENERIC удаляем поддержку оборудования, которого у нас нет, и функциональность, которая нам не нужна, просто комментируя или удаляя соответствующие строки. Если нет уверенности, то лучше ничего не удалять. Далее добавляем несколько параметров, чтобы включить NAT (трансляцию адресов - преобразование IP адресов локальной сети во внешний IP адрес), что даст возможность использовать в Интернете один внешний IP адрес всеми компьютерами локальной сети:

ident NEW_GENERIC
options IPFIREWALL
options IPDIVERT
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=1000

Здесь ident NEW_GENERIC определяет имя нового ядра (можно любое задать).
options IPFIREWALL - включает FIREWALL.
options IPFIREWALL_VERBOSE - включает логи файрвола.
options IPDIVERT - разрешает перенаправлять пакеты с одного сетевого интерфейса на другой, опция необходима для трансляции адресов, для "расшаривания" Интернета.

Списки поддерживаемых устройств и опций можно найти в файлах:
/usr/src/sys/i386/conf/NOTES и  /usr/src/sys/conf/NOTES.

Следующими командами выполняем компиляцию ядра:

# make buildkernel KERNCONF=NEW_GENERIC
# make installkernel KERNCONF=NEW_GENERIC

Перезагружаем компьютер. Все. Старое ядро автоматически будет сохранено в каталоге /boot/kernel.old.

Не PnP устройства можно настроить, отредактировав файл /boot/device.hints. Требуемому устройству (по аналогии с другими) можно задать номера прерываний, портов и пр. Тамже можно запретить использование какого-либо устройства. Например, у меня в "маме" была "криво" реализованна поддержка acpi, из-за чего глючила мышь, а перепрошивать bios не хотелось. Поэтому я просто отключил поддержку acpi в ядре, добавив в файл /boot/device.hints следующую строку:

hint.acpi.0.disabled="1"

Но это просто  пример. Надеюсь у вас все заработает нормально и без этого.

Еще один момент. Все определившиеся ядром устройства имеют буквенно-цифровые обозначения, например pcm0 - звуковая плата. Какие устройства, под какими именами и насколько удачно ядро смогло определить их и сконфигурировать, можно увидеть при загрузке системы или по команде dmesg.

Настройка сети

Теперь можно приступить к настройке нашего сервера как шлюза в Интернет.
Итак наш сервер имеет две сетевых платы: одна "смотрит" в Интернет, а вторая - в нашу локальную сеть. В сетевых настройках первой сетевой платы нам надо прописать IP адрес, шлюз, маску подсети и IP-адреса DNS-серверов, которые нам предоставил Интернет-провайдер. Пусть в нашем примере  нам провайдер предоставил:
внешний IP 195.34.10.134, 
шлюз провайдера 195.32.10.1,
DNS серверы: 195.34.32.116 и 87.240.1.2).

В настройках второй сетевой платы надо прописать IP адрес 192.168.20.1, который принадлежит нашей локальной сети (см. "Простая офисная локальная сеть с подключением к Интернет").

Настройку сетевых интерфейсов можно произвести с помощью уже известной вам утилиты sysconfig  (см. пункт 9 базовой установки выше) или путем прямого редактирования файла /etc/rc.conf.

Так или иначе для нашего примера файл  /etc/rc.conf должен содержать следующие строки (сетевые настройки):

ifconfig_rl0="inet 195.34.10.134 netmask 255.255.255.0" # внешний IP и маска подсети, предоставленные провайдером
ifconfig_rl1="inet 192.168.20.1 netmask 255.255.255.0"   # внутренний IP, который будет шлюзом по умолчанию для нашей локальной сети
gateway_enable="YES" # режим маршрутизатора, позволяет пересылать пакеты между сетевыми интерфейсами
natd_enable="YES"  #  включаем NATD демон, который  занимается трансляцией адресов: внутренних во внешние и наоборот 
natd_interface="rl0"   # natd демон работает на внешнем интерфейсе
defaultrouter="195.34.10.1" # шлюз по умолчанию, который предоставил провайдер
firewall_enable="YES" # включаем firewall
firewall_type="OPEN" # пока ограничимся либеральным вариантом файрволла
hostname="myoffice.ru" # имя этого сервера
sshd_enable="YES" # для удаленного доступа к серверу

rl0 и rl1 - это имена сетевых интерфейсов в нашем примере (на чипе Realtek). Имена своих сетевых интерфейсов можете посмотреть командой ifconfig или через интерактивную утилиту настройки syscinstall

Если у вас есть еще какие либо удаленные локальные сети, например 192.168.40.0/24 и 192.168.50.0/24, доступ к которым из нашей локальной сети осуществляется через шлюзы 192.168.20.101 и  192.168.20.102 соответственно, то статические маршруты маршруты к этим сетям при необходимости можно задать следующим образом (в файле /etc/rc.conf):

static_routes="net1 net2"
routes_net1="192.168.40.0/24 192.168.20.101" # пакеты в подсетку 192.168.40.0/24 пойдут через шлюз 192.168.20.101
routes_net2="192.168.50.0/24 192.168.20.102" # пакеты в подсетку 192.168.50.0/24 пойдут через шлюз 192.168.20.102

Далее в файле /etc/resolv.conf прописываем адреса DNS серверов, которые нам предоставил провайдер:

domain myoffice.ru
nameserver 195.34.32.116
nameserver 87.240.1.2

Теперь чтобы изменения  вступили в силу, выполним команду /etc/netstart или перезагрузим сервер.

Проверяем работу сети.
Сначала пингуем до шлюза провайдера:

# ping 195.34.10.1

Потом до сервера DNS:

# ping  195.34.32.116

А потом до любых интернет-узлов:

# ping yandex.ru

Пингуем машины в своей локальной сети, например:

# ping  192.168.20.4

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

Настройка выхода в Интернет рабочих компьютеров (рабочих станций) в локальной сети 

Теперь переходим к настройке рабочих компьютеров.
Если для рабочих компьютеров используются статические IP адреса (т.е. вводятся вручную, а не раздаются через сервер DHCP), то надо просто в настройках протокола TCP/IP у каждого рабочего компьютера прописать:

статический IP-адрес (уникальный для каждого компьютера в локальной сети, например 192.168.20.4),
маску подсети (255.255.255.0 в нашем случае)
шлюз по умолчанию (192.168.20.1, т.е. IP нашего сервера на FreeBSD, который и является шлюзом в Интернет)
DNS серверы (такие же как у сервера, предоставленные провайдером)

Делается это в Windows XP через:

Пуск-Панель управления-Сетевые подключения на значке сетевого подключения к локальной сети кликаем правой кнопкой мыши, выбираем "свойства" - Настройки TCP/IP.

Перезагружаем компьютер и проверяем работу сети:

Пуск-Выполнить-cmd-ok

Далее в появившемся черном окне интерпретатора пингуем сначала наш сервер (он же - шлюз в нашей локальной сети), затем шлюз интернет-провайдера, днс-сервер, любые узлы в Интернет по имени, например:

ping  192.168.20.1
ping  195.34.10.1
ping  195.34.32.116
ping  ofnet.ru

Если все пакеты проходят, то вас можно поздравить с успехом.

 

Оставьте свой комментарий: