Глава 21. Практическая настройка TCP/IP в NetBSD

Глава 21. Практическая настройка TCP/IP в NetBSD

Русский перевод: Михаил Сгибнев

21.1. Проверка конфигурации ядра

Прежде, чем мы начнем конфигурировать различные аспекты работы сети, нам необходимо проверить наличие некоторых необходимых параметров в ядре. Обратитесь к главе Глава 28, Компиляция ядра для получения дополнительной информации о конфигурации, компиляции и установке ядра. Здесь мы рассмотрим процесс конфирурирования ядра, касательно параметров сети. В качестве примера мы будем использовать файл конфигурации i386/GENERIC. Конфигурационный файл для других платформ содержат подробные комментарии и подсказки. Помимо представленной здесь информации, каждая опция содержит страницу руководства options(4) , так же как и драйверы устройств, например tlp(4).

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

options   NTP    # NTP phase/frequency locked loop

Если вы хотите запустить на машине Network Time Protocol (NTP), то для достижения максимальной точности советуем указать эту опцию. Впрочем, без нее NTP тоже будет работать. Для получения дополнительной информации, обратитесь к ntpd(8).

file-system  NFS    # Network File System client

Если вы хотите использовать жесткий диск другой машины с помощью Network File System (NFS), то вам необходима эта опция. Для того, чтобы узнать о NFS больше, обратитесь к Раздел 25.2, «Сетевая файловая система (Network File System - NFS)».

options   NFSSERVER  # Network File System server

С помощью этой опции включается серверное расширение протокола NFS. Включите ее, если хотите предоставить доступ к жесткому диску другим машинам сети. Более подробная информация о NFS находится в главе Раздел 25.2, «Сетевая файловая система (Network File System - NFS)».

#options  GATEWAY   # packet forwarding

Если вы хотите маршрутизировать пакеты между сетями или сетевыми интерфейсами, необходимо установить эту опцию. С помощью этой опции не только включается маршрутизация, но и увеличивается значение некоторых буферов. Смотрите options(4) , для получения более полной информации.

options   INET   # IP + ICMP + TCP + UDP

Эта опция включит код TCP/IPв ядро. Даже если вы не используете сеть, эта опция необходима для нормального функционирования связей внутри машины, например, для работы X Window System. Более подробно этот вопрос описан в inet(4).

options   INET6   # IPV6

Если вы хотите использовать IPv6, то эта опция для вас. Она входит в состав NetBSD начиная с релиза 1.5. Если вам она не нужна, то просто закомментируйте ее. Для получения дополнительной информации смотрите inet6(4) и главу Раздел 20.7, «Интернет протокол следующего поколения - IPv6».

#options  IPSEC   # IP security

Опция включает поддержку протокола IPsec, в том числе управление ключами и правилами, аутентификацию и компрессию. Эта опция не требует обязательного использования INET6, вы можете использовать IPsec с IPv4. Обратитесь к ipsec(4) для получения более подробной информации.

#options  IPSEC_ESP  # IP security (encryption part; define w/IPSEC)

Эта опция необходима для шифрования IPSEC.

#options  MROUTING  # IP multicast routing

Если необходимо марштутизировать многоадресные сервисы, например MBone, то необходимо включить эту опцию. Обратите внимание на то, что маршрутизация контролируется демоном mrouted(8).

options   NS    # XNS
#options  NSIP   # XNS tunneling over IP

Эта опция задействует семейство протоколов Xerox Network Systems(TM). Они не относятся к стеку протоколов TCP/IP и в настоящее время практически не используются. Дополнительная информация содержится в ns(4).

options   ISO,TPIP  # OSI
#options  EON    # OSI tunneling over IP

Эта опция включает стек протоколов OSI, который долгое время был вероятным будущим развития сети. В настоящий момент это уже история :-). Для получения более подробной информации обратитесь к iso(4).

options   CCITT,LLC,HDLC # X.25

Эта опция включает протокол X.25 для передачи данных через последовательные порты. Она используется обычно совместно с опцией OSI в сетях WAN.

options   NETATALK  # AppleTalk networking protocols

Включает поддержку стека протоколов AppleTalk. Для использования этого протокола необходимо наличие программного обеспечения. В качестве такового вы можете использовать pkgsrc/net/netatalk и pkgsrc/net/netatalk-asun. Дополнительная информация по протоколу AppleTalk содержится в atalk(4).

options   PPP_BSDCOMP  # BSD-Compress compression support for PPP
options   PPP_DEFLATE  # Deflate compression support for PPP
options   PPP_FILTER  # Active filter support for PPP (requires bpf)

Эти опции отвечают за реализацию протокола Point-to-Point. Первые две определяют алгоритмы сжатия, а третья обеспечивает поддержку пакетной фильтрации.

options   PFIL_HOOKS  # pfil(9) packet filter hooks
options   IPFILTER_LOG # ipmon(8) log support

Эти опции включают поддержку пакетной фильтрации в NetBSD с помощью IPfilter. Для получения дополнительной информации смотрите ipf(4) и ipf(8), для того, чтобы рассмотреть пример конфигурации, обратитесь к главе Раздел 21.5.1, «Настройка шлюза/межсетевого экрана».

# Compatibility with 4.2BSD implementation of TCP/IP. Not recommended.
#options  TCP_COMPAT_42

Эта опция необходима только в случае, если в сети есть машины, работающие под управлением 4.2BSD или стеком протоколов с этой ОС. Установка этой опции связана с наличием ошибки в реализации стека протоколов TCP/IP 4.2BSD, в результате которой неверно выставляется широковещательный адрес.

options   NFS_BOOT_DHCP,NFS_BOOT_BOOTPARAM

Эта опция разрешает поиск данных по протоколам DHCP или BOOTPARAM, в случае, если ядру указано использовать NFS в качестве корневой файловой системы. Для получения дополнительной информации смотрите diskless(8).

# Kernel root file system and dump configuration.
config   netbsd root on ? type ?
#config   netbsd root on sd0a type ffs
#config   netbsd root on ? type nfs

Этими переменными указывается, где ядро будет искать корневую файловую систему и ее тип. Если вы хотите указать использовать NFS через интерфейс tlp0, то должны указать здесь «root on tlp0 type nfs». Если указывается ? вместотипа устройства, то ядро пробует найти параметр самостоятельно.

# ISA serial interfaces
com0 at isa? port 0x3f8 irq 4  # Standard PC serial ports
com1 at isa? port 0x2f8 irq 3
com2 at isa? port 0x3e8 irq 5

Если вы хотите использовать PPP или SLIP, то необходимо настроить последовательные (com) интерфейсы. Настройка интерфейсов USB, PCMCIA или PUC осуществляется таким же образом.

# Network Interfaces

Этот довольно длинный список содержит драйверы сетевых карт. Пожалуйста, выберите тот, который соответствует имеющимся у вас аппаратным средствам. Для большинства драйверов доступна страница руководства man, например tlp(4), ne(4) и т.д.

# MII/PHY support

Эта секция содержит независимые от среды передачи интерфейсы для сетевых карт. Выберите тот, который соответствует вашим аппаратным средствам. Если вы не уверены в правильности выбора, оставьте все и посмотрите, какое выберет ядро. Для получения более подробной информации обратитесь к mii(4).

# USB Ethernet adapters
aue* at uhub? port ?   # ADMtek AN986 Pegasus based adapters
cue* at uhub? port ?   # CATC USB-EL1201A based adapters
kue* at uhub? port ?   # Kawasaki LSI KL5KUSB101B based adapters

Адаптеры USB-ethernet не могут работать на скоростях, превышающих 2MBit/s, но они очень удобны в использовании. Конечно, для поддержки работы этих устройств вам необходимо иметь другие опции USB, которые мы не будем рассматривать.

# network pseudo-devices
pseudo-device bpfilter  8  # Berkeley packet filter

Это псевдоустройство позволяет прослушивать пакеты всех типов. Это необходимо для работы утилиты tcpdump, демона rarpd и других приложений, которым необходимо анализировать сетевой трафик. Для получения дополнительной информации обратитесь к bpf(4).

pseudo-device ipfilter    # IP filter (firewall) and NAT

Эта опция разрешает пакетному фильтру IPfilter использовать интерфейсы (NAT, фильтрация пакетов и т.д.). Смотрите ipf(4) и Раздел 21.5.1, «Настройка шлюза/межсетевого экрана» для поучения более подробной информации.

pseudo-device loop     # network loopback

Это программный кольцевой сетевой интерфейс «lo0», на сегодняшний день используемый большим количеством программ, в том числе и для маршрутизации. Он обязательно должен присутствовать в системе. Для получения более подробной информации обратитесь к lo(4).

pseudo-device ppp    2  # Point-to-Point Protocol

Если вы хотите использовать PPP через последовательный интерфейс или ethernet (PPPoE), то вам необходима эта опция. Для получения более подробной информации обратитесь к ppp(4).

pseudo-device sl    2  # Serial Line IP

Serial Line IP является простой инкапсуляцией IP поверх последовательных линий. Она не включает в себя назначение IP адресов и другие опции, в настоящее время применяется все реже. Смотрите sl(4).

pseudo-device strip   2  # Starmode Radio IP (Metricom)

Если вы счастливый обладатель беспроводной сетевой карты Metricon Ricochet, то используйте это псевдоустройство. Для получения более подробной информации обратитесь к strip(4).

pseudo-device tun    2  # network tunneling over tty

Если сетевое устройство использует туннель, то оно обращается к файлу устройства /dev/tun*. Пакеты, направляемые на интерфейс tun0 могут быть прочитаны с /dev/tun0, а запись данных в /dev/tun0 отправит их с сетевого интерфейса tun0. Есть возможность использования QoS. Для получения более подробной информации обратитесь к tun(4).

pseudo-device gre    2  # generic L3 over IP tunnel

Инкапсуляция GRE используется для создания туннелей layer 3 поверх IP, с помощью нее возможна организация VPN. Для получения более подробной информации обратитесь к gre(4).

pseudo-device ipip   2  # IP Encapsulation within IP (RFC 2003)

Устройство инкапсуляции IP-in-IP. Для получения более подробной информации обратитесь к ipip(4).

pseudo-device gif    4  # IPv[46] over IPv[46] tunnel (RFC 1933)

Используя интерфейс GIF можно принимать туннели IPv6 поверх IPv4, которые могут использоваться в случае использования IPv6 через провайдера IPv4. Для получения более подробной информации обратитесь к gif(4).

#pseudo-device faith   1  # IPv[46] tcp relay translation i/f

Интерфейс faith обрабатывает трафик IPv6 TCP, что необходимо для реализации передачи IPv6-to-IPv4. Для получения более подробной информации обратитесь к faith(4).

#pseudo-device stf    1  # 6to4 IPv6 over IPv4 encapsulation

Это добавляет сетевое устройство, используемое для туннеля IPv6 через IPv4, при этом нет необходимости в конфигурировании туннеля ранее. Адрес источника исходящих пакетов содержат адрес IPv4, используемый при маршрутизации. Для получения более подробной информации обратитесь к stf(4) и Раздел 25.4, «IPv6 соединения и переход сквозь 6to4».

pseudo-device vlan     # IEEE 802.1q encapsulation

Этот интерфейс предоставляет поддержку IEEE 802.1Q Virtual LANs, назначая теги на фреймы Ethernet. Используя в сети коммутаторы, поддерживающие 802.1Q и настроенные на его использование, можно создать независисимые сети, имея единую физическую среду передачи данных. Что бы узнать больше, обратитесь к vlan(4).

21.2. Обзор конфигурационных файлов

Нижеприведенный список содержит перечень файлов, еоторые отвечают за конфигурирование сети. Настройка этих файлов могла быть осуществлена и ранее, сейчас же мы рассмотрим их назначение.

/etc/hosts

Файл, содержащий адреса удаленных машин. Каждая строка содержит адрес машины, ее имя и псевдоним. Маленькие сети могут использовать только этот файл, без задействования сервера имен.

/etc/resolv.conf

В этом файле указываются параметры, отвечающие за операции с Internet Domain Name System. В общем случае, в нем указываются адреса DNS серверов.

/etc/ifconfig.xxx

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

/etc/mygate

Содержит IP адрес шлюза по умолчанию.

/etc/nsswitch.conf

Файл, описывающий порядок обращения за разрешением имен. Он определяет порядок просмотра баз данных, в которых содержатся описания машин, пользователей, груп и т.д. Например, строка:

hosts: files dns

определяет, что адреса машин ищутся а двух местах: files (локальный файл /etc/hosts) и DNS, причем поиск сперва осуществляется в локальном файле.

Обычно не требуется модифицировать этот файл.

21.3. Подключение к Internet с помощью модема

Есть много способов подключиться к Internet. В этом разделе мы рассмотрим подключение к провайдеру с помощью модема, используя протокол PPP и самые простые настройки. Для настройки удаленного доступа вам необходимы следущие данные:

  1. Получить данные учетной записи от провайдера.

  2. Отредактировать /etc/resolv.conf и проверить /etc/nsswitch.conf.

  3. Создать каталоги /etc/ppp и /etc/ppp/peers если они еще не существуют.

  4. Создать сценарий соединения, файл конфигурации chat и файл опций pppd.

  5. Создать файл, содержащий имя пользователя и пароль.

На первый взгляд, процедура очень сложная, но это только кажется, вся настройка заключается только в редактировании нескольких файлов. В следующем примере, мы представим, что модем подключен к /dev/tty01 (COM2 в терминологии DOS).

Скажем несколько слов о различии между com, COM и tty. Для NetBSD, «com» является драйвером последовательного порта (в чем можно убедиться, просмотрев вывод команды dmesg), где «tty» -- имя этого порта. Нумерация начинается с 0, поэтому драйвер com0 управляет первым последовательным портом, имеющим имя tty00. В мире DOS, первому последовательному порту соответствует COM1 (0x3f8), второму порту соотвтетсвует COM2 и т.д. Поэтому, COM1 (DOS) и /dev/tty00 (NetBSD) -- одно и то же.

Помимо внешних модемов, подключаемых на COM-порты (используя /dev/tty0[012] на i386, /dev/tty[ab] на sparc, ...) могут использоваться USB модемы (/dev/ttyU*) и pcmcia/cardbus модемы (/dev/tty0[012]).

21.3.1. Получение информации о соединении

The first thing to do is ask the provider the necessary information for the connection, which means:

  • Телефонный номер модемного пула.

  • Метод аутентификации.

  • Имя пользователя и пароль.

  • IP адрес сервера имен.

21.3.2. resolv.conf и nsswitch.conf

В файле /etc/resolv.conf мы укажем данные, предоставленные нам провайдером. В этом примере DNS серверы имеют адреса «194.109.123.2» и «191.200.4.52».

Пример 21.1. resolv.conf

nameserver 194.109.123.2
nameserver 191.200.4.52

И теперь пример файла /etc/nsswitch.conf.

Пример 21.2. nsswitch.conf

# /etc/nsswitch.conf
group:   compat
group_compat: nis
hosts:   files dns
netgroup:  files [notfound=return] nis
networks:  files
passwd:  compat
passwd_compat: nis
shells:  files

По умолчанию, поиск имени осуществляется в первую очередь в файле /etc/hosts, после чего идет запрос к серверу DNS. Нет никаких причин изменять этот порядок.

21.3.3. Создание каталогов для pppd

Каталоги /etc/ppp и /etc/ppp/peers содержат конфигурационные файлы pppd. Их необходимо создать, так как после начальной установки NetBSD они не существуют. Права доступа на них должны быть выставлены в 700.

# mkdir /etc/ppp
# mkdir /etc/ppp/peers 

21.3.4. Сценарий соединения и файл конфигурации chat

Сценарий соединения использует параметры командной строки pppd, он располагается в /etc/ppp/peers и обычно называется по имени провайдера. Для примера, если имя провайдера BigNet , и имя вашей учетной записи у провайдера alan, то сценарий будет выглядеть следующим образом:

Пример 21.3. Сценарий соединения

# /etc/ppp/peers/bignet
connect '/usr/sbin/chat -v -f /etc/ppp/peers/bignet.chat'
noauth
user alan
remotename bignet.it

В предыдущем примере, для дозвона к провайдеру используется файл chat. О параметрах самого сценария подробнее можно узнать в странице руководства pppd(8).

Замечание

Если при установлении соединения возникают проблемы, то добавьте следующие две строки в сценарий:

debug
kdebug 4

В результате вы получите журнальный файл, где будет отображен процесс соединения. Смотрите pppd(8), syslog.conf(5).

Сценарий соединения вызывает приложение chat для установки физического соединения (инициализация модема, набор номера и т.д.). Параметры, передаваемые chat могут быть определены непосредственно в сценарии или вынесены в отдельный файл. В этом примере, номер модемного пула провайдера 0299999999 и мы получаем следущее: The connection script calls the chat application to deal with the physical connection (modem initialization, dialing, ...) The parameters to chat can be specified inline in the connection script, but it is better to put them in a separate file. If, for example, the telephone number of the POP to call is 02 99999999, an example chat script could be:

Пример 21.4. Файл конфигурации chat

# /etc/ppp/peers/bignet.chat
ABORT BUSY
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
'' ATDT0299999999
CONNECT ''

Замечание

Если с дозвоном возникают проблемы, то проверить его можно вручную, воспользовавшись утилитой cu(1).

21.3.5. Аутентификация

В течении процесса аутентификации каждая из двух систем идентифицируют друг друга, хотя на практике, конечно же вам незачем проверять подлинность провайдера. Для аутентификации будет использоваться один из этих методов:

  • PAP/CHAP

  • по имени пользователя

Большинство провайдеров использует аутентификацию PAP/CHAP.

21.3.5.1. Аутентификация PAP/CHAP

Аутентификационная информация (по простоу: пароль) хранится в файле /etc/ppp/pap-secrets для метода PAP и в /etc/ppp/chap-secrets для метода CHAP.

user * password

Для примера:

alan * pZY9o

Для обеспечения безопасности файлы pap-secrets и chap-secrets должны быть доступны только пользователю root и иметь права доступа «600».

# chown root /etc/ppp/pap-secrets
# chown root /etc/ppp/chap-secrets
# chmod 600 /etc/ppp/pap-secrets
# chmod 600 /etc/ppp/chap-secrets 

21.3.5.2. Аутентификация по имени пользователя

Этот тип аутентификации в настоящее время практически не используется. В этом случае, в файле chat вместо укаания на файлы PAP/CHAP должны указываться имя пользователя и пароль, так как chat может имитировать интерактивный вход в систему. Так же необходимо установить соответствующие права доступа к этому файлу.

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

Пример 21.5. Файл сhat с аутентификацией по имени пользователя

# /etc/ppp/peers/bignet.chat
ABORT BUSY
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
'' ATDT0299999999
CONNECT ''
TIMEOUT 50
ogin: alan
ssword: pZY9o

21.3.6. Опции pppd

Для для размещения опций pppd нам потребуется создать файл /etc/ppp/options (chmod 644).

Пример 21.6. /etc/ppp/options

/dev/tty01
lock
crtscts
57600
modem
defaultroute
noipdefault

Для понимания значений этих опций, обратитесь к странице руководства pppd(8).

21.3.7. Проверка модема

Перед установкой соединения хорошей идеей будет провести маленькую проверку модема, которая позволит нам удостовериться в работоспособности модема и наличии физического соединения. Для этого теста мы будем использовать программу cu(1).

  1. Создадим файл /etc/uucp/port следующего содержания:

    type modem
    port modem
    device /dev/tty01
    speed 115200

    (укажите порт, используемый вами, вместо /dev/tty01).

  2. Выполните команду cu -p modem для посылки команд на модем. Для примера:

    # cu -p modem
    Connected.
    ATZ
    OK
    ~.
    
    Disconnected.
    #

    В предыдущем примере на модем была подана команда ATZ, на что тот ответил OK: мы можем сделать вывод о исправности модема. Для выхода из cu(1) наберите ~ (tilde) и потом . (dot).

Если модем не работает, проверьте правильность его подключения к компьютер (в том числе и правильность указания порта утилите cu(1)).

Когда при запуске cu(1) появляется сообщение «Permission denied», проверьте владельца файла /dev/tty##, им должен быть "uucp". Для примера:

$ ls -l /dev/tty00
crw------- 1 uucp wheel 8, 0 Mar 22 20:39 /dev/tty00

Если владельцем является root, то такое сообщение вы точно получите:

$ ls -l /dev/tty00
crw------- 1 root wheel 8, 0 Mar 22 20:39 /dev/tty00
$ cu -p modem
cu: open (/dev/tty00): Permission denied
cu: All matching ports in use

21.3.8. Установка соединения

Наконец, все готово и соединиться с провайдером можно командой:

# pppd call bignet

где bignet имя существующего сценария соединения. Просмотреть сообщения pppd, появляющиеся в ходе соединения, можно следующей командой:

# tail -f /var/log/messages

Для отключения используйте команду kill -HUP для pppd.

 # pkill -HUP pppd 

21.3.9. Использование сценария для подключения и отключения

Когда соединение установлено, наступило время написать несколько сценариев для автоматизации нашей работы. Эти два сценария мы назовем, для примера, ppp-start и ppp-stop.

ppp-start используется для соединения с провайдером:

Пример 21.7. ppp-start

#!/bin/sh
MODEM=tty01
POP=bignet
if [ -f /var/spool/lock/LCK..$MODEM ]; then
echo ppp is already running...
else
pppd call $POP
tail -f /var/log/messages
fi

ppp-stop используется для закрытия соединения:

Пример 21.8. ppp-stop

#!/bin/sh
MODEM=tty01
if [ -f /var/spool/lock/LCK..$MODEM ]; then
echo -f killing pppd...
kill -HUP `cat /var/spool/lock/LCK..$MODEM`
echo done
else
echo ppp is not active
fi

Эти два сценария предполагают, то когда pppd активен, то создается файл LCK..tty01 в каталоге /var/spool/lock . Этот файл содержит идентификатор процесса (pid) pppd.

Они должны быть исполняемыми:

# chmod u+x ppp-start ppp-stop

21.3.10. Выполнение команд после дозвона

Если вы обнаружили, что всегда после дозвона выполняете один набор команд, то вы можете поместить их в сценарий /etc/ppp/ip-up, который вызывается pppd(8) после установления соединения. Соответственно, перед закрытием соединения, выполняется /etc/ppp/ip-down. Сценарии должны быть выполняемыми. Для получения дополнительной информации, обратитесь к странице руководства pppd(8).

21.4. Создание маленькой домашней сети

Работа с сетью является одной из основных сил Unix вообще и NetBSD в частности. Настройка сети проста, непринужденна и нет никакой необходимости покупать дополнительное программное обеспечение, поскольку все необходимое уже входит в состав системы. В разделе Раздел 21.5, «Настройка Internet шлюза с IPNAT» рассматривается процесс конфигурирования NetBSD в качестве шлюза локальной сети, использующего IPNAT для предоставления доступа в Интернет машинам локальной сети через единственный IP адрес маршрутизатора. Единственным условием будет наличие поддерживаемых NetBSD сетевых плат (обратитесь к INSTALL.* за списком поддерживаемого оборудования).

В начале, необходимо установить сетевую карту и подсоединить ее к хабу, концентратору, коммутатору или непосредственно к машине (смотрите Рисунок 21.1, «Сеть с шлюзом»).

Затем проверьте, что сетевая карта определена ядром, проанализировав вывод команды dmesg. В следующем примере показано сообщение об обнаруженной карте стандарта NE2000.

...
ne0 at isa0 port 0x280-0x29f irq 9
ne0: NE2000 Ethernet
ne0: Ethernet address 00:c2:dd:c1:d1:21
...

Если карта не распознана ядром, то проверьте наличие необходимого драйвера в файле конфигурации ядра и правильность установки прерывания. Для примера, это строка isa NE2000 в файле конфигурации и карте назначено IRQ 9.

...
ne0 at isa? port 0x280 irq 9 # NE[12]000 ethernet cards
...

Если конфигурация карты отличается, то возможно, она не будет работать. В этом случае, вам придется изменить параметры конфигурации, откомпилировать и установить новое ядро или изменить настройки карты (джамперы или установочный диск).

Следущая команда покажет текущую конфигурацию сетевой карты.

# ifconfig ne0
ne0: flags=8822<BROADCAST,NOTRAILERS,SIMPLEX,MULTICAST> mtu 1500
  address: 00:50:ba:aa:a7:7f
  media: Ethernet autoselect (10baseT)
  inet6 fe80::250:baff:feaa:a77f%ne0 prefixlen 64 scopeid 0x1 

Программная конфигурация сетевой карты осуществляется довольно просто. Назначем ей IP адрес «192.168.1.1».

# ifconfig ne0 inet 192.168.1.1 netmask 0xffffff00

Обратите внимание, что используемые здесь сети 10.0.0.0/8 и 192.168.0.0/16 принадлежат диапазону частных сетей.

Повторное выполнение предыдущей команды приведет к другому результату:

# ifconfig ne0
ne0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  address: 00:50:ba:aa:a7:7f
  media: Ethernet autoselect (10baseT)
  inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
  inet6 fe80::250:baff:feaa:a77f%ne0 prefixlen 64 scopeid 0x1 

Вывод команды ifconfig изменился: теперь отображается IP адрес и появилось два новых флага «UP» и «RUNNING». Если статус интерфейса не «UP», то пакеты через него посылаться не будут.

Машине был назначен IP адрес 192.168.1.1, принадлежащий диапазону частных сетей и немаршрутизируемого в Internet. Конфигурирование закончено и его необходимо проверить. При наличии другой машины в сети, можно использовать утилиту ping. Для примера, адрес соседней машины 192.168.1.2:

# ping 192.168.1.2
PING ape (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=255 time=1.286 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=255 time=0.649 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=255 time=0.681 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=255 time=0.656 ms
^C
----ape PING Statistics----
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.649/0.818/1.286/0.312 ms

После перезагрузки нам потребуется провести повторное конфигурирование сетевой карты. Для того, чтобы избежать этого, добавим следущие строки в /etc/rc.conf:

auto_ifconfig=yes
ifconfig_ne0="inet 192.168.1.1 netmask 0xffffff00" 

В этом примере была установлена переменная ifconfig_ne0, так как ядром была определена именно ne0. Если вы используете другуюю сетевую карту, то измените имя переменной.

Во время следующей загрузки сетевая карта будет настроена автоматически.

Если у вас есть маршрутизатор, подключенный к Интернет, то вы можете использовать его в качестве шлюза по умолчанию. Для этого необходимо указать в переменной defaultroute IP адрес маршрутизатора в файле /etc/rc.conf:

defaultroute=192.168.0.254

Не рекомендуется указывать вместо адреса маршрутизатора его доменное имя, так как в случае внешнего DNS сервера, вы не смошете разрешить в адрес его имя и споткнетесь о проблему "курицы-и-яйца".

Если в вашей сети немного машин, то можно использовать файл /etc/hosts, который будет содержать соответствие адресов именам машин внутренней сети. Для примера:

Пример 21.9. /etc/hosts

#
# Host Database
# This file should contain the addresses and aliases
# for local hosts that share this file.
# It is used only for "ifconfig" and other operations
# before the nameserver is started.
#
#
127.0.0.1    localhost
::1     localhost
#
# RFC 1918 specifies that these networks are "internal".
# 10.0.0.0 10.255.255.255
# 172.16.0.0 172.31.255.255
# 192.168.0.0 192.168.255.255

192.168.1.1 ape.insetti.net ape
192.168.1.2 vespa.insetti.net vespa
192.168.1.0 insetti.net

Если вы соединяетесь через nternet Service Provider или используете локальный Domain Name Server (DNS), то можете использовать его для разрешения имен в IP адреса дополнительно к /etc/hosts, который содержит список машин только локальной сети. Для конфигурирования системы на использование DNS необходимо отредактировать /etc/resolv.conf, где будут указаны адреса DNS серверов и имена доменов, для машин, чьи имена будут расширяться до полных. Например, если у нас имеется DNS сервер 192.168.1.2 и имя домена "home.net", то файл /etc/resolv.conf будет выглядеть следущим образом:

# /etc/resolv.conf
domain home.net
nameserver 192.168.1.2 

Проверьте файл /etc/nsswitch.conf, он должен ыглядеть подобно рассмотренному в разделе Пример 21.2, «nsswitch.conf».

Подведем итог. Для настройки сети нам необходимо: установленный и подключенный к сети сетевой адаптер, который в последствии конфигурируется командой ifconfig и прописывается в /etc/rc.conf. Файлы /etc/resolv.conf и /etc/nsswitch.conf должны быть настроены на использование DNS. Эта настройка подходит маленькой сети без дополнительных функций.

21.5. Настройка Internet шлюза с IPNAT

Таинственный акроним IPNAT раскрывается как Internet Protocol Network Address Translation и позволяет маршрутизировать внутреннюю сеть (такую, как описана в Раздел 21.4, «Создание маленькой домашней сети») в Интернет. Это означает то, что имея только один реальный (статический или динамический) IP адрес, назначенный шлюзу, можно предоставить одновременный доступ в Интернет всем машинам локальной сети.

Некоторые примеры использования IPNAT могут быть найдены в каталоге /usr/share/examples/ipf, смотрите файлы BASIC.NAT и nat-setup.

НРеализация этого примера более подробно рассмотрена в разделе Рисунок 21.1, «Сеть с шлюзом»: The setup for the example described in this section is detailed in Рисунок 21.1, «Сеть с шлюзом»: host 1 подключен к провайдеру с помощью модема и получает динамический IP адрес. Машины host 2 и host 3 выходят в Интернет с помощью IPNAT, выполняющегося на host 1 и являющегося для остальных машин сети шлюзом по умолчанию.

Рисунок 21.1. Сеть с шлюзом

Сеть с шлюзом

21.5.1. Настройка шлюза/межсетевого экрана

Для использования IPNAT в ядро должно быть включено псевдоустройство «pseudo-device ipfilter» и включена маршрутизация пакетов. Проверить это можно выполнив:

# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding = 1

Если результат равен «1», как в примере выше, то маршрутизация включена. Если нет, то есть два способа устранить данное упущение:

  1. Откомпилировать новое ядро, включив опцию GATEWAY.

  2. Включить эту опцию в текущем ядре следующей командой:

    # sysctl -w net.inet.ip.forwarding=1

    Вы можете добавить эту опцию в файл /etc/sysctl.conf, для того, чтобы она устанавливалась во время начальной загрузки.

    net.inet.ip.forwarding=1

Остальная часть этой главы рассказывает , как создать конфигурацию IPNAT с автоматическим запуском после подключения к провайдеру. Имея таким образом настроенный маршрутизатор мы можем предоставить доступ в Интернет всем машинам локальной сети, даже если они работают под управлением операционной системы, отличной от NetBSD.

Для начала, нам необходимо создать файл /etc/ipnat.conf, содержащий следующие правила:

map ppp0 192.168.1.0/24 -> 0/32 proxy port ftp ftp/tcp
map ppp0 192.168.1.0/24 -> 0/32 portmap tcp/udp 40000:60000
map ppp0 192.168.1.0/24 -> 0/32

Диапазон адресов 192.168.1.0/24 принадлежит локальной сети. В первой строке конфигурационного файла включается поддержка активного режима работы ftp через маршрутизатор. Вторая используется для правильной обработки tcp и udp пакетов, так как мы используем портмаппинг (много машин локальной сети в один реальный адрес). Третья используется для работы ICMP, ping и т.д.

Создаем файл /etc/ppp/ip-up, который будет вызываться после создания PPP сессии:

#!/bin/sh
# /etc/ppp/ip-up
/etc/rc.d/ipnat forcestart

Создаем файл /etc/ppp/ip-down, который будет вызываться после закрытия PPP сессии:

#!/bin/sh
# /etc/ppp/ip-down
/etc/rc.d/ipnat forcestop

Файлы ip-up и ip-down должны быть выполняемыми:

# chmod u+x ip-up ip-down

Маршрутизатор готов к работе.

21.5.2. Конфигурирование клиентской машины

Создаем файл /etc/resolv.conf, в котором указываем адрес DNS сервера, тот же, что и на маршрутизаторе.

Затем, необходимо установить шлюз по умолчанию:

# route add default 192.168.1.1

192.168.1.1 является адресом шлуза и был нами сконфигурирован выше.

Конечно, если вы не хотите выполнять эту команду каждый раз после перезагрузки, то стоит определить переменную «defaultroute» в файле /etc/rc.conf.

Процесс настройки может отличаться, в зависимости от используемой операционной системы.

Эту настройку необходимо выполнить на всех машинах.

21.5.3. Некоторые полезные команды

Следующие команды могут использоваться для диагностики проблем:

ping

Используется для проверки доступности удаленной машины, путем отправки ICMP пакетов.

netstat -r

Отображает таблицу маршрутизации (аналогично route show).

traceroute

Показывает путь пакета до удаленной машины.

tcpdump

Используется на маршрутизаторе для нализа трафика TCP/IP.

21.6. Общая настройка LAN

Маленькая сеть, пример которой рассматривался выше, содержит много элементов. настраиваемых вручную. В больших сетях, где имеется централизованное управление используется DHCP сервер для автоматического назначения сетевых параметров клиентским машинам. Для настройки NetBSD на использование клиента DHCP необходимо активировать переменную:

dhclient=yes

в /etc/rc.conf. В этом случае IP адрес будет получен автоматически, создастся файл /etc/resolv.conf и пропишется маршрут по умолчанию.

21.7. Соединение двух компьютеров через последовательный кабель

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

21.7.1. Соединение NetBSD с BSD или Linux

Самый простой пример, когда обе машины работают под управлением NetBSD: создаем соединение по протоколу SLIP. На первой машине выполним команду:

# slattach /dev/tty00
# ifconfig sl0 inet 192.168.1.1 192.168.1.2

На второй машине выполним команду:

# slattach /dev/tty00
# ifconfig sl0 inet 192.168.1.2 192.168.1.1

Теперь вы можете проверить соединение с помощью команды ping, например, выполните со второй машины:

# ping 192.168.1.1

Если связь налажена, то вы можете использовать команды типа ftp, telnet и все остальные обычным образом. Имя машн может быть записано в файл /etc/hosts.

  • В предыдущем примере мы использовали первый последовательный порт (/dev/tty0). В случае необходимости, замените не используемый вами.

  • IP адреса 192.168.x.xзарезервированы для использования во «внутренних» сетях. Первая машина имеет адрес 192.168.1.1, а вторая 192.168.1.2.

  • Для увеличения скорости передачи данных, может использоваться опция -s speed команды slattach.

  • ftp может использоваться, только если активно inetd и запущен сервер ftpd.

Linux

Если одна из машин работает под управлением Linux, то на ней необходимо выполнить следующие команды (предположим, что ее адрес 192.168.1.2):

# slattach -p slip -s 115200 /dev/ttyS0 &
# ifconfig sl0 192.168.1.2 pointopoint 192.168.1.1 up
# route add 192.168.1.1 dev sl0

Не забудте «&» в первой команде.

21.7.2. Соединение NetBSD и Windows NT

NetBSD и Windows NT можно легко (почти) соединить используя все тотже нуль-модемный кабель. В теории всего лишь требуется создать « Подключение удаленного доступа» в Windows NT и запустить pppd в NetBSD.

Создайте файл .ppprc в каталоге /root и запустите pppd от пользователя root. В качестве примера используйте нижеследующее:

connect '/usr/sbin/chat -v CLIENT CLIENTSERVER'
local
tty00
115200
crtscts
lock
noauth
nodefaultroute
:192.168.1.2

Значение первой строки будет рассмотрено позже, далее указывается адрес 192.168.1.2, назначаемый Windows NT и указывается порт tty00, к которому будет подключен кабель.

На стороне NT должно быть установлено устройство null modem из Панели управления и удаленное соединение должно использовать именно его. Драйвер, идущий в комплект поставки Windows NT 4 не является на 100% нуль-модемным: при создании соединения он посылает строку CLIENT, а ожидает ответ CLIENTSERVER. Эта проблема как раз и решается первой строкой файла .ppprc. chat должен ответить NT, иначе соединение будет разорвано.

В конфигурации удаленного доступа используйте следущие параметры: нуль-модем, номер телефона «1» (все равно не используется), PPP сервер, использовать только протокол TCP/IP и получать IP адрес и адрес сервера DNS автоматически. Используйте для порта аппаратное управление потоком и настройки порта 115200 8N1.

Все готово для соединения.

  • Соедините две машины используя нуль-модемный кабель.

  • Запустите pppd на NetBSD. Для просмотра сообщений от pppd: tail -f /var/log/messages).

  • Запустите соединение удаленного доступа на Windows NT.

21.7.3. Соединение NetBSD и Windows 95

Установка соединения с Windows 95 похожа на работу Windows NT: Удаленный доступ на Windows 95 и сервер PPP на NetBSD Большинство(если не все) выпусков Windows 95 не имеют драйвера null modem, поэтому его придется установить отдельно и повторить все настройки, указанные в разделе NT. Будет одно отличие в файле .ppprc (строка вызова chat удалена).

Если вам не удалось найти нуль-модемный драйвер для Windows 95, то можно попробовать сделать так:

В этом случае, chat подражает ответам стандартного модема и Windows 95 может работать.

Обновлено: 16.03.2015