Настройка сети
Протокол разрешения адреса
Первое, что необходимо помнить об устройствах Ethernet -- как беспроводных 802.11a/b/g, так и более традиционных сетевых карт CAT5/CAT6 -- это то, что у каждого Ethernet устройства имеется уникальный 6 байтный идентификатор. Эти идентификаторы распределены по группам, каждая из которых присвоена производителю; вы можете посмотреть эти группы в IANA. Ethernet в общем "просто работает" на физическом уровне, однако системе требуется отобразить идентификатор Ethernet на используемый IP адрес, чтобы была возможность работы с IP.
Протокол Address Resolution Protocol (ARP) позволяет машинам узнавать IP адреса друг друга внутри локальной Ethernet сети. Что касается протокола, ARP в основном реализован в драйвере сетевого устройства (как модуль ядра); инструмент arp позволяет вам посмотреть статус системы ARP и немного ее настроить. В данный момент мы предположим, что у каждой машины есть свой IP адрес, либо статический либо полученный с помощью DHCP.
Когда система Linux (или любое другое устройство Ethernet) желает обратиться к IP адресу, то с помощью широковещательного запроса Ethernet ARP посылает сообщение с запросом "кто есть X.X.X.X сообщите Y.Y.Y.Y". Целевая система формирует ARP ответ "X.X.X.X это hh:hh:hh:hh:hh:hh" и посылает его запрашивающему устройству. Ответ ARP кэшируется короткое время в /proc/net/arp, чтобы избежать постоянного восстановления отображения между аппаратными Ethernet адресами и IP адресами.
Горри Фэйрхерст предоставляет хорошее описание ARP (смотриРесурсы).
Утилита arp
Утилита Linux arp позволяет вам изучать и модифицировать статус ARP отображений. Простейший доклад о статусе может выглядеть как в Листинге 1:
Листинг 1. Доклад о статусе ARP
$ arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.2.1 ether 00:03:2F:09:61:C7 C eth0
|
Здесь говорится, что определенному устройству назначен в этой сети адрес 192.168.2.1 (судя по виду, этот адрес соответствует маршрутизатору\шлюзом, что в данном случае так и есть). Тот факт, что только одна запись содержится в этом списке, не означает, что в сети больше не существует других устройств, так как записи ARP других устройств могут быть просрочены. ARP стирает записи после короткого промежутка времени -- в течение нескольких минут, а не секунд или часов -- чтобы позволить сетям самим реконфигурироваться в случае добавления или удаления устройств или изменения установок на машинах. Кэшируя запись ARP в течение короткого времени, можно не посылать новые запросы во время работы большинства сетевых сессий.
Любой вид IP запроса машины, которая может находиться в локальной сети, заставляет ядро посылать ARP запрос; если получен ответ ARP , то машина добавляется в кэш ARP (как в Листинге 2):
Листинг 2. Взаимодействие с другими IP адресами
$ ping -c 1 192.168.2.101 > /dev/null
$ ping -c 1 192.168.2.101 > /dev/null
$ ping -c 1 192.168.2.102 > /dev/null
$ ping -c 1 192.168.32.32 > /dev/null
$ ping -c 1 192.168.32.32 > /dev/null
$ arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.2.1 ether 00:03:2F:09:61:C7 C eth0
192.168.2.101 ether 00:30:65:2C:01:11 C eth0
192.168.2.100 ether 00:11:24:9D:1E:4B C eth0
192.168.2.102 ether 00:48:54:83:82:AD C eth0
|
В этом случае, первые четыре адреса действительно существуют в сети Ethernet, но 192.168.32.32 не существует, поэтому от него ARP ответ не получен. Заметим, что если вам удалось подключиться к адресам не через локальный маршрут, то в кэш ARP ничего не добавится (смотри Листинг 3):
Листинг 3. Ничего не добавляется в кэш ARP
$ ping -c 1 google.com
PING google.com (216.239.57.99) 56(84) bytes of data.
64 bytes from 216.239.57.99: icmp_seq=1 ttl=235 time=109 ms
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 109.123/109.123/109.123/0.000 ms
$ arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.2.1 ether 00:03:2F:09:61:C7 C eth0
|
Google доступен (так как маршрут уже настроен), но 216.239.57.99 не локален, поэтому в ARP ничего не добавляется. Седьмое руководство в этой серии, по теме 214, рассматривает проблемы с сетью и демонстрирует, как установить значение ARP вручную.
PPP, PAP и CHAP
Протокол Point-to-Point Protocol (PPP) используется для установления связи с Internet через dial-up модемы, прямые последовательные соединения, DSL, и другие типы связи точка-точка (иногда включая PPPoE как "псевдо-уровень" поверх Ethernet, этот протокол обеспечивает установление подключения). Демон pppd работает совместно с включенным в ядро PPP драйвером, чтобы установить и поддерживать PPP соединение с другой системой (обычно называемой узлом) и установить адреса Internet Protocol (IP) для каждого конца соединения.
PPP, в особенности pppd, запрашивает аутентификацию у второго участника соединния и предоставляет ему свои аутентификационные данные. Такая аутентификация выполняется с использованием простой системы паролей Password Authentication Protocol (PAP) или сессионной системы Challenge Handshake Authentication Protocol (CHAP). Из двух упомянутых, CHAP более безопасен, если обе стороны его поддерживают.
Опции PPP, как правило, хранятся в /etc/ppp/options. Конфигурация PAP осуществляется через файл паролей PAP /etc/ppp/pap-secrets, для CHAP она осуществляется через файл паролей CHAP /etc/ppp/chap-secrets.
Файл паролей PAP/CHAP
Файл /etc/ppp/pap-secrets содержит разделенные пробелами поля клиента, сервера, пароля, и допустимого локального IP адреса. Последнее поле может быть пустым (и как правило оно именно пустое при динамическом назначении IP адреса). Файл паролей PAP должен быть сконфигурирован отдельно для каждого пользователя. Хотя PPP -- это протокол взаимодействия равноправных систем, в целях подключения мы будем называть запрашивающую машину клиентом, а ожидающую машину сервером. Например, машина bacchus в моей сети может иметь следующий файл настроек:
Листинг 4. Настройка pap-secrets на bacchus
# Every regular user can use PPP and uses passwords from /etc/passwd
# INBOUND connections
# client server secret acceptable local IP addresses
* bacchus "" *
chaos bacchus chaos-password
# OUTBOUND connections
bacchus * bacchus-password
|
Машина bacchus будет принимать соединения от любых обычных пользователей, а также принимать соединения с машины chaos (требуя пароль chaos-password в последнем случае). При подключении к другим машинам bacchus будет просто использовать свое собственное имя и предлагать пароль bacchus-password каждому узлу.
Соответственно машина chaos в моей сети может содержать следующий файл:
Листинг 5. Машина chaos более консервативна в выборе соединений
# client server secret acceptable local IP addresses
chaos bacchus chaos-password
bacchus chaos bacchus-password
|
Машина chaos более консервативна в отношении к кому она будет подключаться. Она обменялась параметрами доступа только с bacchus. Вы можете настроить каждый файл /etc/ppp/options и определить имя пользователя и пароль, если требуется.
Использование паролей CHAP требует, чтобы оба узла могли аутентифицировать друг друга. При условии, что двустороння аутентификация настроена в паролях PAP, файл паролей CHAP может выглядеть, как в приведенных выше примерах.
Соединение с помощью mgetty
Файл паролей PAP может быть использован с функцией AUTO_PPP mgetty. mgetty 0.99+ уже настроена на запуск pppd с опцией login. Она сообщает, pppd надо обратиться за справкой к /etc/passwd (и /etc/shadow в свою очередь) после того как пользователь передал этот файл.
В общем, программа getty может быть настроена, чтобы принимать соединения от последовательных устройств, включая модемы и последовательные порты. Например, для проводной линии или консоли tty, вы можете запустить:
/sbin/getty 9600 ttyS1
в вашем терминале. Для старых телефонных линий с модемом в 9600/2400/1200 бод можно запустить команду:
/sbin/getty -mt60 ttyS1 9600,2400,1200.
Настройка маршрутизации
В разделе обсуждения протокола Address Resolution Protocol мы видели, как назначаются адреса в локальной сети. Однако чтобы взаимодействовать с машинами вне локальной сети, необходимо иметьмаршрутизатор. В общих чертах маршрутизатор -- это просто компьютер, который подсоединяется к нескольким сетям, и поэтому может брать пакеты из одной сети и передавать их в другие. Именно отсюда и пошло название "Internet": это "сеть, состоящая из сетей", в которой каждый маршрутизатор, в конечном счете, может достучаться до любой другой сети, которая "подключена к Internet."
Пятое руководство этой серии по теме 210 рассматривает управление клиентом сети и DHCP. DHCP назначит как IP адреса, так и адрес маршрутизатора. Однако, если у клиента фиксированный IP адрес, или в целях тестирования, команда Linux route позволит вам просмотреть и модифицировать таблицы маршрутизации. Более новая команда ip также позволит вам модифицировать таблицы маршрутизации, используя более мощный синтаксис.
Таблица маршрутизации просто позволяет вам определить, через какой маршрутизатор или узел посылать пакет, на основе определенного шаблона в адресе. Шаблон адреса определяется комбинацией адреса и маски подсети. Маска подсети -- это битовый шаблон, обычно представляется в форме групп чисел, разделенных точками, которые сообщают ядру о том, какие биты адреса доставки считать как сетевой адрес, а какие оставшиеся биты считать как подсеть. Команда ip может принять упрощенный /NN формат битовых масок. В общем, в маске и адресе нулевые биты это "метасимволы".
Например, простая сеть с одним внешним шлюзом может содержать таблицу маршрутизации как в Листинге 6:
Листинг 6. Типичная простая таблица маршрутизации
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
|
Это значит, что сетевой пакет на любой IP адрес, который соответствует шаблону "192.168.2.*" преназначен компьютеру из локальной сети и будет направлен прямо на нужный узел (полученный при помощи ARP). Все остальные пакеты будут посылаться на маршрутизатор "192.168.2.1", который перенаправит их по назначению. Машина 192.168.2.1 должна быть подсоединена к одной или нескольким внешним сетям.
Однако в более сложном случае вы можете по другому определить шаблон назначения. Придумаем пример, положим, что вы хотите направить определенные адреса /16 через другие шлюзы. Вы можете сделать это, как показано в Листинге 7:
Листинг 7. Изменение маршрута сетей /16
$ route add -net 216.109.0.0 netmask 255.255.0.0 gw 192.168.2.2
$ route add -net 216.239.0.0 netmask 255.255.0.0 gw 192.168.2.3
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
216.109.0.0 192.168.2.2 255.255.0.0 UG 0 0 0 eth0
216.239.0.0 192.168.2.3 255.255.0.0 UG 0 0 0 eth0
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
|
Пакеты на адреса вида "216.109.*" и "216.239.*" будут теперь направляться через маршрутизаторы 192.168.2.2 и 192.168.2.3, соответственно (оба находятся в локальной сети). Пакеты на локальные адреса или адреса, несоответствующие шаблону, будут направляться так же, как и раньше. Вы можете использовать командуroute delete, чтобы удалить маршруты.
|