UnixMountainSkiFun

Unix Горы Лыжи

01-06-2008 17:38

Проблема №1: Сеть Parallel Line Internet Protocol (PLIP)


Linux поддерживает протокол, называемый PLIP, название которого происходит от Parallel Line Internet Protocol (Internet-протокол через параллельный порт). Современный параллельные порты имеют возможность для двухсторонней коммуникации. PLIP использует эту возможность для передачи IP-пакетов.

Чтобы поднять PLIP, нам потребуется рассмотреть следующее:

  • Основы параллельного порта
  • Настройки BIOS для принтерного порта (BIOS printer port setup)
  • Двусторонние кабели для принтерных портов
  • Компиляцию Linux-ядра (не пугайтесь!)
  • Настройки PLIP-тунелирования
  • Настройки masquerading-а (опционально)

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

Перед тем как ринуться в атаку, рассмотрим некоторые основы параллельных портов, чтобы вы усвоили терминологию.

Основы параллельного порта

Большинство коммуникационных устройств, которые не подключены к шинам (ISA, VLB, PCI, USB и прочим такого рода) -- так называемые "последовательные" (serial) устройства. Если говорить конкретнее, это RS-232 последовательные устройства. Если не вдаваться в детали, то последовательное устройство это устройство, где биты, составляющие байт, пересылаются отдельными импульсами, один за другим, по одному проводу. В противовес этому, параллельное устройство, это устройство с восьмью проводами, по одному на каждый бит в пересылаемом байте, и в котором все биты пересылаются "разом", за один такт.

Конечно же последовательные порты имеют больше чем один провод, да и параллельные порты больше чем восемь. Имеются провода, что в том, что в другом устройствах, которые используются для управляющих сигналов и для так называемой "общей шины" или "земли", а последовательные порты имеют два провода для данных: один для входящих данных, а другой -- для исходящих. Названия устройствам, последовательное (serial) и параллельное (parallel), получились потому, что байт представляется как последовательность импульсов (отсюда последовательное), или как параллельная, групповая пачка импульсов, передавамых одновременно.

Наверняка вы заметили, что в то время как, последовательные устройства имеют два провода для данных, один на вход, а другой на выход, я упомянул только один набор из восьми проводов для данных параллельного устройства. Это исходит из спецификации параллельного интерфейса, который был разработан более чем 30 лет назад компанией Centronics, для использования только в качесиве принтерного интерфейса. В то время принтеры были весьма простыми (dumb) устройствами, которые просто получали и печатали данные. Им просто нечего было сказать компьютеру (кроме может быть по управляющим проводам вякнуть "Out Of Paper" (Бумаги давай!)). Параллельный порт никогда не предназначался для двухсторонней коммуникации. Когда-то же это должно было прекратиться?

Четыре типа параллельных портов

Так как PLIP это небольшой hack для компьютера, не могущего взаимодействовать по сети другим образом, сильно "завязан" на понимание аппаратной части компьютера, то боюсь, что Вы столкнетесь, может и в небольшой степени, с миром аппаратного обеспечения.

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

Рассмотрим каждый из них.

SPP: Standard Parallel Port (Стандартный параллельный порт)

SPP исключительно однонаправленный интерфейс, или по крайней мере предназначался для этого. Помните, как я сказал, что стандартный параллельный кабель использует восемь бит для данных и некоторое количество управляющих проводов? Управляющие провода устанавливают значения в статусном регистре контроллера параллельного порта. Единственное, что делает соединяющий кабель параллельного порта, так это соединяет пять проводов исходящих данных по одну сторону интерфейса, с пятью на другой стороне. При обратной передаче данных, все происходит точно также, но в другом направлении. Данные посылаются по четыре бита за раз. (Пятый бит используется для рукопожатия (handshaking) -- термин, означающий "управляющий сигнал". Две стороны должны договориться о том, когда символ готов к прочтению, и когда такой символ будет прочитан; иначе передаваемые символы могут потеряться или быть считаными повторно.) Этот тот самый тип интерфейса, для которого был написан PLIP, это наименьший общий делитель параллельных интерфейсов.

PS/2: Возлюбленный мутант IBM-а

IBM предприняла попытку исправить множество проколов в исходном дизайне PC, создавая полностью новую разработку, которая впрочем отличалась новым набором проколов. Результатом таких разработок явилось семество PS/2. PS/2 под управлением IBM OS/2, была попыткой IBM восстановить свое господство на рынке PC, в нише SOHO (small office/home office). Я практически уверен, что вы не используете ни PS/2, ни OS/2, то можете себе представить, что случилось с этой IBM-овской разработкой.

Впрочем вопросы успешности или провала честолюбивых IBM-овских планов по захвату мира нас мало волнуют, по крайней мере в этой книге. Нас скорее интересует параллельный порт PS/2 и его отличия от SPP. IBM посчитала, что двунаправленный параллельный порт был бы замечательной идеей, поэтому они добавили "трехуровневую" ("tri-state") возможность к аппаратной части, которая посылала сигналы по проводам данных, позволяя таким образом компьютерному порту не только посылать нули и единицы, но также и прослушивать.

Функционирование что SPP, что PS/2, состоит в пересылке неструктурированных байт-данных между компьютером и перефирийным устройством.

EPP: Улучшенный параллельный порт

Интерфейс EPP добавил некоторые протоколы к двухсторонним коммуникационным каналам. Посредством параллельного EPP-интерфейса возможны четыре типа передач данных:

  • Циклы чтения данных
  • Циклы записи данных
  • Циклы чтения адресов
  • Циклы записи адресов

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

Спецификация EPP была разработана специальной группой промышленных производителей, в числе которых были Xircom и Zenith Data Systems. Одна из главных ее особенностей состоит в том, что каждый цикл может быть завершен за один циклы ISA-шины. Это делает возможным тот факт, что подключенное к EPP-порту устройство, трактуется как если бы оно было Industry Standard Architecture совместимое устройство. Такая возможность делает эту спецификацию весьма удобной для программистов драйверов и производителей устройств, -- тех, кто заинтересован в подключении к ISA-шине EPP-устройства, с минимумом затрат.

ECP: Порт с улучшенными возможностями

Стандарт ECP был разработан Hewlett-Packard совместно Microsoft Corporation. Такая ситуация может оказаться сюрпризом для тех из нас, которые являются приверженцами Linux (которые как правило испытывают неприязнь и недоверие к Microsoft-у), однако несмотря на участие в этом проекте Microsoft-а, ECP стал первой спецификацией параллельного порта, с момента SPP, прошедшей все открытые стандарты. Теперь, также известный как IEEE 1284 Extended Capabilities Port Protocol и ISA Interface Standard, этот стандарт определяет полностью ISA-совместимый протокол шины для параллельных портов. Помимо этого, он определяет некоторое количество протоколов, улучшенных с точки зрения производительности, а также отличается улучшенным дизайном, в числе плюсов которого: RLE-компрессия, FIFO для input- и output-каналов, DMA и программируемый I/O. Этот стандарт позволяет достичь значительного повышения производительности, по сравнению с прежними стандартами.

Так что же все это означает? Увы не так уж и много. Код Linux, который отвечает за реализацию PLIP, написан так, чтобы работать со всеми этими режимами. Это означает, что мы не получим всего того великолепия преимуществ, которые предоставляют нам PS/2, EPP и ECP. Однако все же о них важно важно знать. Хоть PLIP их и не использует, тем не менее Linux-овый Parallel Port IDE драйвер, который позволяет подключить к параллельному порту Zip-дисководы, CD-ROM-дисководы, внешние жесткие диски и сканеры, использует все возможности, предоставляемые такими спецификациями.

Кроме того, некоторые ECP-контроллеры параллельного порта, будут использовать FIFO-буферы, даже в режиме SPP, повышая таким образом производительность, так что в любом случае получается выгодно использовать более "продвинутые" режимы.

Двунаправленные кабели для принтерного порта

Так как PLIP был написан как наименьший общий делитель SPP, то для того, чтобы организовать двусторонний PLIP, потребуется особый кабель. Простейший способ получить такой кабель, это сходить в ваш местный СуперПуперМегаМикроКомпьютероСклад и купить Laplink-кабель. Это общее название для такого рода кабелей, оно появилось еще во времена MS-DOS-овской программы Laplink, которая была первой программой соединявшей компьютеры таким хитрым способом, -- для этого был необходим особым образом спаянный кабель.

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

  • 2 разъема DB-25, с кожухами, типа "папа"
  • 12-ти проводниковый кабель (можно порыться в столе, обязательно найдется...)
  • Обжимной инструмент и/или паяльник, в зависимости от того, какой тип разъема DB-25 удалось достать

Для начала, я порекомендовал бы вам не делать это самостоятельно, а просто купить Laplink-кабель. Не так уж он дорого и стоит. Тем не менее, если вы получаете удовольствие от канифольных парОв, то приобретите экранированный 12-ти проводниковый кабель. Не делайте кабель слишком длинным. Длинные кабели более восприимчивы к радиочастотным помехам. И наконец, соедините кабель согласно таблице:

Разъем №1, номер штырькаРазъем №2, номер штырька
215
313
412
510
611
105
116
124
133
152
1717
2525

Компиляция Linux-ядра с поддержкой PLIP

Изменения требуемые для PLIP

Большинство необязательного кода в ядре Linux может быть либо не включено в него, либо вкомпилировано прямо в ядро, либо построено в виде модулей. Модули предоставляют превосходную гибкость, однако это приводит к небольшому снижению производительности из-за необходимости загрузки модуля. Если вам требуется загрузить или выгрузить их, то необходимо использовать некоторый набор комманд (insmod, rmmod и т.д.), чтобы манипулировать ими. Лично я считаю, что много проще вкомпилировать весь необходимый код в ядро, а затем, если потребуется, что-то еще, то загружать другое (или вообще третье) ядро, с необходимой функциональностью. Одна из замечательных способностей Linux состоит в том, что одну и ту же задачу можно решить разными способами. Вы можете выбрать любой путь.

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

Я продемонстрирую некоторые изменения в конфигурации, с помощью интерфейса make menuconfig, а некоторые с помощью make xconfig, -- таким образом вы прочувствуете тонкости каждого из методов. Не важно какой из инструментариев Вы увидите на иллюстрациях, важно, что все изменения должны быть сделаны.

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

Итак, рассмотрим изменения в порядке их появления. Сначала, перейдите в General Settings (Рисунок 4-1). Когда вы войдете в этот раздел (нажатием Return в menuconfig или щелкая по его названию мышкой в xconfig), то увидите пункты, показанные на Рисунке 4-2. Нас интересуют "Parallel port support" и "PC-style hardware". Они оба должны быть вкомпилированы в ядро.

Рисунок 4-1. Опция General.

Рисунок 4-2. Содержимое General.

Теперь перейдем к рассмотрению опции Network, показанной на Рисунке 4-3 (на этот раз для разнообразия xconfig).

Рисунок 4-3. Опция Network.

Это весьма большой раздел, поэтому мы рассмотрим его более чем на одном рисунке. Тут нас интересуюет параметр "Network firewalls". На Рисунке 4-4 он первым. Этот параметр должен быть "вкомпилирован" в ядро.

Рисунок 4-4. Параметры Network, часть №1.

Рисунок 4-5 показывает следующую порцию, которая является всего лишь "проскроллированным" экраном, который показан на Рисунке 4-4. Интересующие элементы на этом рисунке это: "IP: firewalling," "IP: masquerading," и "IP: ICMP masquerading". Первые два из них должны быть "вкомпилированны" в ядро. Последний необязателен, однако если Вы желаете, чтобы Ваш PLIP-компьютер был способен ping-овать хосты из оставшейся части сети, то он также должен быть "вкомпилирован".

Рисунок 4-5. Параметры Network, часть №2.

Теперь можно собрать и инсталлировать новое ядро в точности так, как было описано в Главе 1, в разделе Достижение комфорта с исходным кодом.

Инсталляция нового ядра

Или вы это уже умеете? Есть одна тонкость в установке PLIP-ядра. Она состоит в том, что необходимо добавить секцию для нового ядра в файл ''/etc/lilo.conf', так как показано красным шрифтом:

 boot     = /dev/hda
 vga      = normal
 read-only
 linear
 prompt
 timeout  = 30

  image  = /boot/vmlinuz
  label  = linux
  root   = /dev/hda3

  image  = /boot/vmlinuz.suse
  label  = suse
  root   = /dev/hda3

  image  = /boot/vmlinuz.new
  label  = new
  root   = /dev/hda3
  append = "parport=0x378,7"

  other  = /dev/hda1
  label  = win

Последняя из этих вновь добавленных строк требует объяснения. Опция lilo "append=" позволяет указать "параметры ядра". Понимайте такой текст, как "аргументы коммандной строки" ядра. Linux-ядро по умолчанию использует polling-драйвер для параллельных портов. Polling это когда система периодично "просматривает" порт, чтобы узнать можно ли отправить или получить символ. Этот подход противоположен подходу с прерываниями (interrupts), когда система не обращает внимания на порт до тех пор, пока порт не выставит "прерывание", говорящее о том, что состояние устройства изменилось. В этом случае компьютер бросает все и обрабатывает событие на порту.

Linux использует polling-драйвер по умолчанию так как многие (как правило старые) компьютеры не имеют понятия о том, что такое IRQ (номер прерывания), в применении к понятию параллельного порта. Polling-драйвер прекрасно работает со старыми спецификациями параллельных портов. (Самое худшее, что может случиться, -- принтер должен ждать пока компьютер передаст некоторое количество данных). Однако, в случае двунаправленного трафика, неприятности кроются в том, что некоторые данные могут "перезаписаться" (а следовательно потеряться) новыми входящими данными до того, как компьютер в очередной раз обратит внимание на порт. Для работы в сети это смерти подобно.

Если вы желаете работать только с PLIP, то необходимо активировать interrupt-драйвер. Это достигается указанием драйверу (называемому parport) адреса порта и IRQ-номера вашего параллельного порта. В результате мы получим lp-порт с стандартными адресом 0x0378 и IRQ 7. Убедитесь, что эти параметры действительно соответствуют Вашей аппаратной части. Если на вашем компьютере более чем один параллельный порт, то вы можете сообщить параметры желаемого параллельного порта драйверу.

Убедитесь что сделали то, о чем я говорил! Если вы все настроили, но PLIP не работает, то перво-наперво проверьте установки адреса и IRQ-номера порта. PLIP просто откажется работать с polling-драйвером.

Настройка PLIP-тунелирования

Чтобы использовать PLIP необходимо сделать изменения в настройках двух компьютеров. Далее в этой главе мы будем называть эти два компьютера plipserver и plipclient.

Сначала, в файле /etc/hosts, на обоих компьютерах, создайте записи для каждого из хостов:

 10.0.0.1        plipserver
 10.0.0.2        plipclient

Я люблю использовать немаршрутизируемую (nonrouting) IP-подсеть 10.x.x.x. Ниодин компьютер в Internet не может иметь адрес из этого диапазона. Имеются и другие немаршрутизируемые диапазоны, однако этот действительно просто запомнить.

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

Настройка на стороне Сервера

Для начала необходимо "поднять" сетевой интерфейс. Это достигается с помощью команды ifconfig. Вот эта команда (запустите эту команду на plipserver):

 # ifconfig plip0 plipserver pointopoint plipclient netmask 255.255.255.0 up

Вот что мы увидим после выполнения этой команды (опять же с помощью ifconfig):

 eth0      Link encap:Ethernet  HWaddr 00:04:AC:D9:05:7F
           inet addr:168.135.196.112  Bcast:168.135.199.255 Mask:255.255.252.0
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:15357136 errors:0 dropped:0 overruns:0 frame:2
           TX packets:5981809 errors:0 dropped:0 overruns:0 carrier:17241
           collisions:2629247 txqueuelen:100
           Interrupt:10

 lo        Link encap:Local Loopback
           inet addr:127.0.0.1  Mask:255.0.0.0
           UP LOOPBACK RUNNING  MTU:3924  Metric:1
           RX packets:2736675 errors:0 dropped:0 overruns:0 frame:0
           TX packets:2736675 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0

 plip0     Link encap:Ethernet  HWaddr FC:FC:0A:00:00:FE
           inet addr:10.0.0.1  P-t-P:10.0.0.2  Mask:255.255.255.0
           UP POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
           RX packets:985771 errors:0 dropped:308 overruns:0 frame:0
           TX packets:942471 errors:350 dropped:0 overruns:0 carrier:350
           collisions:253 txqueuelen:10
           Interrupt:7 Base address:0x378

(Не обращайте внимание на счетчики пакетов -- я поднял этот интерфейс несколько дней назад!) Отметим, что я использовал сеть класса C с маской сети (255.255.255.0). Вы можете использовать любое правильное значение сетевой маски для сети 10.x.x.x, например такое как 255.0.0.0; главное убедитесь, что используете одну и ту же сетевую маску по обе стороны интерфейса.

Настройка интерфейса на стороне Клиента

Здесь мы предполагаем, что на клиентской стороне поднять только loopback-интерфейс, поэтому никаких других записей в таблице маршрутизации plipclient-а нет. Чтобы поднять plip-интерфейс и маршрутизировать все сетевые пакеты через него, выполним две команды:

 # ifconfig plip0 plipclient pointopoint plipserver netmask 255.255.255.0 up
 # route add default gw plipserver

Теперь попробуем про-ping-овать сервер с клиента:

 # ping plipserver
 PING plipserver (10.0.0.1): 56 data bytes
 64 bytes from plipserver: icmp_seq=0 ttl=255 time=13.301 ms
 64 bytes from plipserver: icmp_seq=1 ttl=255 time=13.734 ms
 64 bytes from plipserver: icmp_seq=2 ttl=255 time=13.709 ms
 --- plipserver ping statistics ---
 3 packets transmitted, 3 packets received, 0% packet loss
 round-trip min/avg/max = 13.301/13.581/13.734 ms
 #

Помимо этого также должен работать ping клиента со стороны сервера.

Настройка NAT (aka IP Masquerade)

Если все, что вам было нужно, это добраться с клиента до сервера, то на этом можно остановиться. Однако, если требуется обеспечить доступ ко всем прочим компьютерам, к которым может обращаться сервер, то необходимо немного поднастроить оба компьютера.

Описываемая тут настройка будет предельно упрощена. Мы рассмотрим только то, что действительно необходимо для того, чтобы дать возможность вашему клиентскому PLIP-компьютеру использовать соединение "главного" ("host") компьютера с оставшейся частью сети и/или Internet. Мы настроим прозрачную трансляцию сетевых адресов (transparent network address translation), также известную (AKA) как IP Masquerading. Установка полностью конфигурируемого firewall-а не входит в данное рассмотрение.

Настройка на стороне Сервера

В этот раз давайте делать все наоборот. Я покажу все команды, которые потребуется запустить, а уже потом объясню, что означает каждая из них. Если Вы читаете эту книгу в том порядке в котором она написана, то а) я приятно удивлен и б) просто освежу те темы, которые более подробно освещались в Главе 3. Если хотите, можете трактовать все эти команды как волшебное заклинание и пропустить эту часть главы. Я рекомендую прочитать эту часть главы, однако не шибко переживайте если не поймете ее.

Эти команды должны быть выполнены от имени root на серверной стороне:

 # modprobe ip_masq_ftp
 # echo "1" > /proc/sys/net/ipv4/ip_forward
 # echo "1" > /proc/sys/net/ipv4/ip_always_defrag
 # /sbin/ipchains -M -S 7200 10 160
 # /sbin/ipchains -P forward DENY
 # /sbin/ipchains -A forward -s 10.0.0.0/24 -j MASQ

Первая команда загружает модуль, который поддерживает masquerading FTP-протокола. Так как FTP требует, чтобы удаленный хост был способен открывать обратное соединение с клиентом, то этот протокол требует специального модуля для поддержания обратного пути (return path). Имеются и другие протоколы, включая cuseeme и конечно же Quake. В данном примере я решил использовать только FTP. Причем я использую "модульный" подход. Вот почему используется команда modprobe.

Вторая команда "поднимает" IP forwarding.

Третья команда говорит серверной стороне всегда дефрагментировать фрагментированные IP-датаграммы (IP datagrams). Если вы не понимаете о чем идет речь, то не волнуйтесь, вы и не должны об этом знать. ;) Грубо говоря, это низкоуровневый протокол Internet-а, называемый IP. IP-пакеты называются датаграммами (datagrams). Теоретически IP-датаграмма может быть длиной до 64К. Каждый сетевой интерфейс (Ethernet, token-ring, AX.25 и т.д.) имеет MTU или maximum transmission unit, -- наибольший размер пакета, который данная физическая сеть может передавать. В случае Ethernet он как правило установлен в 1500 байт. Если IP-датаграмма пересылается через интерфейс, и если датаграмма больше чем MTU интерфейса, то такая датаграмма разбивается на "фрагменты", каждый из которых достаточно мал для того, чтобы пройти "сквозь" интерфейс. Говоря в общем, если датаграммы фрагментированы, то они такими и остаются, так как требуются компьютерные ресурсы и время для того, чтобы их снова объединить, -- единственно возможно только еще более фрагментировать их в одном из пунктов путешествия. Говоря другими словами, в течение их маршрута они могут становиться только все меньше и меньше, но никогда не станут больше. Датаграммы объединяются в полном объеме только в пункте назначения.

Это становится проблемой, когда IP-датаграмма переносит TCP-поток или данные UDP-датаграммы. Только первый фрагмент имеет информацию о том, какой порт получает данные. Последующие фрагменты не имеют такой информации. Предположим, что мы имеем две masquerad-инговые FTP-сессии и два клиентских компьютера, общающиеся с одним и тем же сервером. Приходит фрагмент 1 сессии 1, -- он отсылается тому клиенту, которому положено. Приходит фрагмент 1 сессии 2, -- он также отсылается правильно. Теперь прибывает фрагмент 2 сессии 2. И теперь нет возможности понять к какой сессии он принадлежит, -- к первой или второй.

По этой причине, компьютер, который выполняет masquerading должен "нарушать традицию" и объединять (дефрагментировать) все IP-датаграммы, таким образом, чтобы они собирались в одно целое (unit). Если Вы желаете узнать больше по этой теме, то прочитайте превосходную книгу Internetworking with TCP/IP от Douglas E. Comer.

Третья команда -- первая из трех "ipchains"-команд. "ipchains"-команда формирует "правила firewall". Первая из них:

 ipchains -M -S 7200 10 160

И вот что она делает: аргумент -M сообщает ipchains, что это запрос на masquerade. Аргумент -S говорит ipchains, что мы устанавливаем параметры masquerade. Помните, чтобы использовать masquerading, компьютер "сервер" должен "помнить" хост и порт, который инициировал запрос, а также номер порта на компьютере-сервере, который используется для "перепосылке" ("resend") запроса с серверного компьютера (надеюсь вы помните, что masquerading скрывает целую сеть позади серверного компьютера). Три числа, которые следуют за "-S" это:

  • Число секунд, в течение которых "помнить" ("remember") TCP-соединение.
  • Число секунд, в течение которых "помнить" TCP-соединение, для которого был получен FIN (смотри ранее упоминавшуюся книгу от Comer).
  • Число секунд, в течение которых "помнить" UDP-сессию. UDP как правило безсессионный, однако некоторые протоколы типа "запрос/ответ" (например DNS) имеют сессии.

Приведенные тут значения вполне нормально работают. Вы должны помнить, что masquerading это "хитрость, уловка" ("trick"). По этой самой причине он будет иногда Вас вводить в заблуждение. Например, если Вы открываете Telnet-сессию на другой хост, используя masquerading, а затем уходите на некоторое время, большее чем TCP-timeout, то когда вернетесь обнаружите, что соединение хоть и "поднято", но тем не менее "заморожено". И это не сетевой сбой! Просто Ваш компьютер считает, что Вы все еще тут, рядом. Удаленный хост считает, что соединение все еще необходимо поддерживать, однако proxy-компьютер, который находится меж нашими бедалагами, уже "позабыл" о том, что удаленный хост подсоединен к Вашему компьютеру.

Следующая ipchains-команда:

 ipchains -P forward DENY

Опция "-P" описывает политику (policy). Мы устанавливаем политику для "forward"-цепочки. (Эта цепочка "активна" когда мы имеем пакет, который является входящим для одного сетевого интерфейса и который должен быть перенаправлен на другой интерфейс, чтобы достичь пункта назначения. Здесь мы настраиваем политику так, что все такие пакеты должны быть молча (silently) отброшены (параметр DENY). Мы можем сказать REJECT, что приведет к тому, что удаленному хосту отправится ICMP-сообщение или сообщение типа network-unreachable (сеть недоступна). Однако такого рода трафик нам не нужен.)

Это выглядит так, как будто бы мы запретили всю маршрутизацию от PLIP на eth0 и обратно! Так, это мы сделали. Однако это всего лишь политика по умолчанию. Теперь мы собираемся добавить правило, чтобы открыть один и только один путь, который нам действительно необходим. Этим и занимается последняя ipchains-команда. Вот она:

 /sbin/ipchains -A forward -s 10.0.0.0/24 -j MASQ

Итак, что все это означает? Опция "-A" говорит о том, что мы хотим добавить правило в цепочку. Агрумент "forward" -- это цепочка, которую мы добавляем в правило. Опция "-s" описывает источник, к которому это правило должно быть применено. В нашем случае это сеть 10.x.x.x с 24-битной сетевой маской (это альтернативный способ указать сетевую маску 255.255.255.0). Опция "-j" устанавливает "прыжок" ("jump"). Любой пакет, который подпадает под это правило будет перенаправлен на цепочку с именем, указанным после параметра "-j". Цепочка "MASQ" -- это особая "предопределенная" цепочка, которая занимается masquerading-ом пакета (точно так же как DENY это особая цепочка, которая отбрасывает пакеты, а REJECT -- особавя цепочка, которая отбрасывает пакеты с ICMP-ответом, и т.д.).

Отметим, что здесь мы не пытались обучить Вас всей этой путанице с firewall-ами. Чтобы понять эту тему более детально, смотрите [MultiToolLinux/RunWholeNetworkWithOneIpAddress|Главу 3]].

Настройка на стороне Клиента

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

В сущности, конфигурация ядра должна быть одинаковой на обоих сторонах. Клиентская сторона не нуждается в firewall-инге и masquerad-инге. Однако, настраивая эти функции на стороне клиентского компьютера, вы получите компьютер-клиент, который может выступать в качестве сервера, конечно же если это потребуется.

<< '''Глава 4. Консервные банки и веревка: Последний довод королей в области коммуникаций''' | Multi Tool Linux | Проблема №2: Non-IP Dialup (getty) >>


edit RightSideBar