Previous Next Table of Contents

## 6. Информация об IP- Ethernet-сетях.

В этом разделе рассматриваются вопросы работы ethernet и IP сетей. Фактически здесь собраны наиболее интересные разделы из относящихся к конкретным сетевым технологиям, и они будут полезны всем тем, что использует Линукс в локальных сетях.

## 6.1 Ethernet

Ядро присваивает ethernet-устройствам имена``eth0`', ``eth1`', ``eth2`' и т.д. Первая обнаруженная карта получает имя ``eth0`', а все остальные нумеруются по порядку обнаружения.

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

Подробно работа ethernet-карт под Линуксом описана в Ethernet-HOWTO.

После того как ядро будет скомпилировано с поддержкой Вашей ethernet-карты, Вам достаточно выполнить подобные следующим команды для ее настойки:

> `

>             root# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up

>             root# route add -net 192.168.0.0 netmask 255.255.255.0 eth0

> `

Большинство драйверов ethernet-карт было написано Дональдом Беккером (Donald Becker, `becker@CESDIS.gsfc.nasa.gov`).

## 6.2 EQL -- балансировщик потока данных.

Это устройство имеет имя ``eql`' (оно может быть только одно) и служит для объединения нескольких соединений точка-точка, таких как PPP, slip или plip в одно соединение, по которому передаются IP-пакеты. Иногда оказывается дешевле использовать несколько низкоскоростных соединений, чем одно высокоскоростное.

Опции компиляции ядра:

> `

>             Network device support  --->

>                 [*] Network device support

>                 <*> EQL (serial line load balancing) support

> `

Для работы такого соединения необходимо, чтобы машина на другой стороне также поддерживала eql. Сейчас такая поддержка есть в Линуксе, Livingstone Portmasters и некоторых современных dial-in серверах.

Для настройки EQL вам понадобятся утилиты поддержки eql, которые можно получит по адресу sunsite.unc.edu.

Настройка достаточно проста. Первым делом необходимо настроить eql-интерфейс. Он настраивается так же, как и любое другое сетевое устройство. IP-адрес и mtu настраиваются программой ifconfig:

> `

>             root# ifconfig eql 192.168.10.1 mtu 1006

> `

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

И наконец Вы должны связать все эти соединения с eql. Этот процесс называют `подчинением' и выполняется с помощью программы eql_enslave:

> `

>             root# eql_enslave eql sl0 28800

>             root# eql_enslave eql ppp0 14400

> `

Параметр `ожидаемая скорость соединения' (последний параметр в примере) оказывает косвенное влияние на работу eql. Он определяет долю пакетов, передаваемых через соответствующее соединение, и Вы можете пытаться повысить производительность eql, меняя этот параметр.

Для отсоединения сетевого интерфейса от eql используйте программу eql_emancipate:

> `

>             root# eql_emancipate eql sl0

> `

При настройке маршрутизации замените в командах route все `подчиненные' интерфейсы на eql. Обычно это выглядит так:

> `

>             root# route add default eql

> `

Драйвер EQL был написан Саймоном Джейнсом (Simon Janes, `simon@ncm.com`).

## 6.3 IP-учет (для версий ядра 2.0).

Функция IP-учета позволяет ядру собирать и анализировать информацию об использовании сети. Ядро собирает данные о количестве пакетов и количестве байт, переданных по сети с момента последнего сброса этих данных. Вы можете задать различные правила для того, чтобы классифицировать эти данные. В ядре версии 2.1.102 эта возможность была временно изъята, так как старая программа настройки файрволла ipfwadm, которая используется и для настройки IP-учета, была заменена на ``ipfwchains''.

Опции компиляции ядра:

> `

>             Networking options  --->

>                 [*] IP: accounting

> `

После того, как Вы откомпилировали и установили ядро с поддержкой IP-учета, используйте программу ipfwadm для его настройки. Вам может потребоваться разбивать учетную информацию по многим признакам. Ниже приведен простой, но достаточно полезный пример, за более детальной информацией обратитесь к man-странице программы ipfwadm.

Сценарий: У Вас есть ethernet-сеть, подключенная к интернету через PPP-соединение. На одной из машин в сети запущено большое количество сервисов и Вы хотели бы знать какой объем данных передается сервисами telnet, rlogin, ftp и http.

Вы можете использовать следующий скрипт:

> `

>             #!/bin/sh

>             #

>             # Сброс правил учета

>             ipfwadm -A -f

>             #

>             # Правила для локальной сети

>             ipfwadm -A in -a -P tcp -D 44.136.8.96/29 20

>             ipfwadm -A out -a -P tcp -S 44.136.8.96/29 20

>             ipfwadm -A in -a -P tcp -D 44.136.8.96/29 23

>             ipfwadm -A out -a -P tcp -S 44.136.8.96/29 23

>             ipfwadm -A in -a -P tcp -D 44.136.8.96/29 80

>             ipfwadm -A out -a -P tcp -S 44.136.8.96/29 80

>             ipfwadm -A in -a -P tcp -D 44.136.8.96/29 513

>             ipfwadm -A out -a -P tcp -S 44.136.8.96/29 513

>             ipfwadm -A in -a -P tcp -D 44.136.8.96/29

>             ipfwadm -A out -a -P tcp -D 44.136.8.96/29

>             ipfwadm -A in -a -P udp -D 44.136.8.96/29

>             ipfwadm -A out -a -P udp  -D 44.136.8.96/29

>             ipfwadm -A in -a -P icmp -D 44.136.8.96/29

>             ipfwadm -A out -a -P icmp -D 44.136.8.96/29

>             #

>             # Правила по умолчанию

>             ipfwadm -A in -a -P tcp -D 0/0 20

>             ipfwadm -A out -a -P tcp -S 0/0 20

>             ipfwadm -A in -a -P tcp -D 0/0 23

>             ipfwadm -A out -a -P tcp -S 0/0 23

>             ipfwadm -A in -a -P tcp -D 0/0 80

>             ipfwadm -A out -a -P tcp -S 0/0 80

>             ipfwadm -A in -a -P tcp -D 0/0 513

>             ipfwadm -A out -a -P tcp -S 0/0 513

>             ipfwadm -A in -a -P tcp -D 0/0

>             ipfwadm -A out -a -P tcp -D 0/0

>             ipfwadm -A in -a -P udp -D 0/0

>             ipfwadm -A out -a -P udp  -D 0/0

>             ipfwadm -A in -a -P icmp -D 0/0

>             ipfwadm -A out -a -P icmp -D 0/0

>             #

>             # Распечатать список правил

>             ipfwadm -A -l -n

>             #

> `

Имена ``ftp-data'' и ``www'' -- имена сервисов из файла `/etc/services`. Последняя команда печатает список правил и накопленные данные.

Следует обратить внимание на то, что при обработке пакета величины накопленных данных во всех подходящих правилах будут увеличены, поэтому Вам потребуется произвести некоторые вычисления для того, чтобы получить интересующие Вас данные. Например, для того, чтобы узнать какое количество данных было передано "мимо" telnet, rlogin, ftp или http, необходимо вычесть из их данные из данных правила, которое описывает все порты.

> `

>     root# ipfwadm -A -l -n

>     IP accounting rules

>      pkts bytes dir prot source               destination          ports

>         0     0 in  tcp  0.0.0.0/0            44.136.8.96/29       * -> 20

>         0     0 out tcp  44.136.8.96/29       0.0.0.0/0            20 -> *

>        10  1166 in  tcp  0.0.0.0/0            44.136.8.96/29       * -> 80

>        10   572 out tcp  44.136.8.96/29       0.0.0.0/0            80 -> *

>       252 10943 in  tcp  0.0.0.0/0            44.136.8.96/29       * -> *

>       231 18831 out tcp  44.136.8.96/29       0.0.0.0/0             * -> *

>         0     0 in  udp  0.0.0.0/0            44.136.8.96/29       * -> *

>         0     0 out udp  44.136.8.96/29       0.0.0.0/0            * -> *

>         0     0 in  tcp  0.0.0.0/0            0.0.0.0/0            * -> 20

>         0     0 out tcp  0.0.0.0/0            0.0.0.0/0            20 -> *

>        10  1166 in  tcp  0.0.0.0/0            0.0.0.0/0            * -> 80

>        10   572 out tcp  0.0.0.0/0            0.0.0.0/0            80 -> *

>       253 10983 in  tcp  0.0.0.0/0            0.0.0.0/0            * -> *

>       231 18831 out tcp  0.0.0.0/0            0.0.0.0/0            * -> *

>         0     0 in  udp  0.0.0.0/0            0.0.0.0/0            * -> *

>         0     0 out udp  0.0.0.0/0            0.0.0.0/0            * -> *

> `

## 6.4 IP-учет (для версий ядра 2.2)

Новая система учета использует систему ``IP Firewall Chains''. Обратитесь к странице системы IP-цепочек за более детальной информацией. Среди прочего, Вы будете должны использовать программу ipchains вместо программы `ipfwadm` для настройки IP-учета. (Информация взята из файла `Documentation/Changes` последней версии исходных текстов ядра).

## 6.5 IP-псевдонимы.

Иногда оказывается полезным, чтобы одному сетевому устройству соответствовало несколько IP-адресов. Например, эта функция используется интернет-провайдерами для создания www или ftp-сайтов своих клиентов. Несколько более подробное описание IP-псевдонимов дается в ``IP-Alias mini-HOWTO''.

Опции компиляции ядра:

> `

>             Networking options  --->

>                 ....

>                 [*] Network aliasing

>                 ....

>                 <*> IP: aliasing support

> `

После того, как вы откомпилируете и установите ядро с поддержкой IP-псевдонимов, дальнейшие настройки достаточно просты. IP-псевдонимы присваиваются виртуальным устройствам, связанным с реальным устройством. Имена этим устройствам присваиваются по правилу `<имя_устройсва>:<номер_виртуального_устройства>`, например `eth0:0` или `ppp0:10`. Такое устройство нужно конфигурировать после настройки основного интерфейса.

Предположим, что у Вас есть ethernet-сеть с двумя существующими одновременно IP-сетями, и Вы хотите, чтобы Ваша машина имела доступ к обеим этим сетям. Для этого выполните следующие команды:

> `

>             root# ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0 up

>             root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0:0

>             root# ifconfig eth0:1 192.168.10.1 netmask 255.255.255.0 up

>             root# route add -net 192.168.10.0 netmask 255.255.255.0 eth0:0

> `

Для удаления псевдонима просто добавьте символ ``-`' к имени устройства:

> `

>             root# ifconfig eth0:0- 0

> `

Все данные о маршрутизации через этот псевдоним будут автоматически удалены.

## 6.6 IP файрволл (для версий ядра 2.0).

Использование файрволлов подробно рассмотрено в Firewall-HOWTO. IP-файрволл позволяет вам предотвращать несанкционированный доступ к Вашей машине путем отбрасывания IP-пакетов по заданным правилам. Есть три типа правил -- входные фильтры, выходные фильтры и фильтры передачи. Входные фильтры применяются к пакетам, приходящим из сети. Выходные фильтры применяются к пакетам, предназначенным к отправке в сеть. Фильтры передачи применяются к полученным пакетам, которые не предназначены для данной машины и должны быть маршрутизированы.

Опции компиляции ядра:

> `

>             Networking options  --->

>                 [*] Network firewalls

>                 ....

>                 [*] IP: forwarding/gatewaying

>                 ....

>                 [*] IP: firewalling

>                 [ ] IP: firewall packet logging

> `

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

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

Данный пример был любезно предоставлен Арнтом Гюлбрандсеном (Arnt Gulbrandsen, `<agulbra@troll.no>`).

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

> `

>          -                                   -

>           \                                  | 172.16.37.0

>            \                                 |   /255.255.255.0

>             \                 ---------      |

>              |  172.16.174.30 | Linux |      |

>          NET =================|  f/w  |------|    ..37.19

>              |    PPP         | router|      |  --------

>             /                 ---------      |--| Mail |

>            /                                 |  | /DNS |

>           /                                  |  --------

>          -                                   -

> `

Приведенные ниже команды настройки файрволла следует поместить в один из `rc`-файлов, так чтобы они автоматически выполнялись при запуске системы. Для обеспечения максимальной безопасности их следует выполнять после настройки сетевых интерфейсов, но до их активизации, чтобы предотвратить возможность несанкционированного доступа в момент загрузки системы.

> `

>             #!/bin/sh

>             # Сбросить таблицу фильтров передачи

>             # Установить правило по умолчанию в 'разрешить'

>             #

>             /sbin/ipfwadm -F -f

>             /sbin/ipfwadm -F -p accept

>             #

>             # То же самое для входных фильтров

>             #

>             /sbin/ipfwadm -I -f

>             /sbin/ipfwadm -I -p accept

>             # Настроить интерфейс PPP

>             # Можно было бы использовать опцию '-a deny' вместо '-a reject -y'

>             # но тогда будет невозможно открывать исходящие соединения на этом

>             # интерфейсе. Опция '-o' указывает, что отвергнутые пакеты следует

>             # протоколировать. Тратя место на диске, вы получаете возможность

>             # обнаруживать атаки и ошибки в конфигурации.

>             #

>             /sbin/ipfwadm -I -a reject -y -o -P tcp -S 0/0 -D 172.16.174.30

>             # Отбрасывать очевидно неверные пакеты:

>             # Информация не должна приходит с любых типов широковещательных адресов

>             #

>             /sbin/ipfwadm -F -a deny -o -S 224.0/3 -D 172.16.37.0/24

>             #

>             # Пакеты с кольцевого интерфейса не должны попадать на реальный

>             #

>             /sbin/ipfwadm -F -a deny -o -S 127.0/8 -D 172.16.37.0/24

>             # разрешить входящие SMTP и DNS запросы, но только к выделенному для

>             # этого серверу

>             #

>             /sbin/ipfwadm -F -a accept -P tcp -S 0/0 -D 172.16.37.19 25 53

>             #

>             # DNS использует протокол UDP наряду с TCP, его тоже следует разрешить

>             #

>             /sbin/ipfwadm -F -a accept -P udp -S 0/0 -D 172.16.37.19 53

>             #

>             # запретить "ответы" на опасные порты, такие как NFS или его расширений

>             # (Larry McVoy's NFS extension). Если у Вас работает squid, добавьте и

>             # его порты

>             #

>             /sbin/ipfwadm -F -a deny -o -P udp -S 0/0 53 \

>                     -D 172.16.37.0/24 2049 2050

>             # ответы на другие порты разрешены

>             #

>             /sbin/ipfwadm -F -a accept -P udp -S 0/0 53 \

>                     -D 172.16.37.0/24 53 1024:65535

>             # Запретить входящие соединения с демоном identd

>             # Используйте параметр 'reject' чтобы машина, пытающаяся установить

>             # соединение получала отказ немедленно

>             #

>             /sbin/ipfwadm -F -a reject -o -P tcp -S 0/0 -D 172.16.37.0/24 113

>             # Разрешить соединения определенных типов из "дружественных" сетей

>             # 192.168.64 и 192.168.65.

>             #

>             /sbin/ipfwadm -F -a accept -P tcp -S 192.168.64.0/23 \

>                     -D 172.16.37.0/24 20:23

>             # Разрешить прохождение любых пакетов из локальной сети.

>             #

>             /sbin/ipfwadm -F -a accept -P tcp -S 172.16.37.0/24 -D 0/0

>             # запретить остальные tcp-соединения и протоколировать их

>             # (добавьте 1:1023 если у Вас перестанет работать ftp)

>             #

>             /sbin/ipfwadm -F -a deny -o -y -P tcp -S 0/0 -D 172.16.37.0/24

>             # то же самое для udp-соединений

>             #

>             /sbin/ipfwadm -F -a deny -o -P udp -S 0/0 -D 172.16.37.0/24

> `

Правильная настройка файрволла -- нелегкая задача. Приведенный пример может послужить хорошей отправной точкой. Некоторую информацию Вы можете получить, воспользовавшись man-страницей программы ipfwadm. Обязательно получите информацию из всех возможных надежных источников и попросите кого-либо протестировать ваши настройки "снаружи".

## 6.7 IP-файрволл (для версий ядра 2.2)

Новый файрволл использует систему ``IP Firewall Chains''. Обратитесь к странице системы IP-цепочек за более детальной информацией. Среди прочего, Вы будете должны использовать программу ipchains вместо программы `ipfwadm` для настройки IP-файрволла. (Информация взята из файла `Documentation/Changes` последней версии исходных текстов ядра).

## 6.8 IPIP-включение

Зачем может понадобится передавать IP-пакеты внутри IP-пакетов? Если Вы никогда не сталкивались с такой потребностью, подобная операция может показаться странной. Два самых главных применения этой техники -- Мобильное IP и IP-рассылка. Еще одно применение -- Amateur Radio.

Опции компиляции ядра:

> `

>             Networking options  --->

>                 [*] TCP/IP networking

>                 [*] IP: forwarding/gatewaying

>                 ....

>                 <*> IP: tunneling

> `

Устройства "IP-тоннели" получают имена ``tunl0`', '`tunl1`' и т.д.

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

### Настройка IP-туннеля сеть-сеть.

Рассмотрим сеть следующей структуры:

> `

>           192.168.1/24                          192.168.2/24

>               -                                     -

>               |      ppp0 =            ppp0 =       |

>               |  aaa.bbb.ccc.ddd  fff.ggg.hhh.iii   |

>               |                                     |

>               |   /-----\                 /-----\   |

>               |   |     |       //        |     |   |

>               |---|  A  |------//---------|  B  |---|

>               |   |     |     //          |     |   |

>               |   \-----/                 \-----/   |

>               |                                     |

>               -                                     -

> `

Эта схема демонстрирует еще один пример использования IPIP-включения -- виртуальные частные сети. В этом примере предполагается, что у Вас есть две машины с PPP-подключением к интернету. Каждой из них присвоен IP-адрес. Эти машины подключены к локальным сетям, использующим адреса из зарезервированного диапазона. Предположим, Вы хотите, чтобы машины из одной локальной сети могли взаимодействовать с машинами из другой сети, как будто они соединены непосредственно. Этого можно достичь с помощью IPIP-включения. Это решение, правда, не позволит вашим машинам из внутренних сетей обмениваться данными с другими машинами в интернете -- для этого Вам потребуется использовать другие техники вроде IP-маскарада. IPIP-включение производится на машинах A и B -- маршрутизаторах.

На машине ``A`' выполните команды:

> `

>             #!/bin/sh

>             PATH=/sbin:/usr/sbin

>             mask=255.255.255.0

>             remotegw=fff.ggg.hhh.iii

>             #

>             # Настройка Ethernet

>             ifconfig eth0 192.168.1.1 netmask $mask up

>             route add -net 192.168.1.0 netmask $mask eth0

>             #

>             # Настройка ppp0 (запуск ppp, установка маршрута по умолчанию)

>             pppd

>             route add default ppp0

>             #

>             # Настройка устройства-туннеля

>             ifconfig tunl0 192.168.1.1 up

>             route add -net 192.168.2.0 netmask $mask gw $remotegw tunl0

> `

А на машине ``B`' -- команды:

> `

>             #!/bin/sh

>             PATH=/sbin:/usr/sbin

>             mask=255.255.255.0

>             remotegw=aaa.bbb.ccc.ddd

>             #

>             # Настройка Ethernet

>             ifconfig eth0 192.168.2.1 netmask $mask up

>             route add -net 192.168.2.0 netmask $mask eth0

>             #

>             # настройка ppp0 (запуск ppp, установка маршрута по умолчанию)

>             pppd

>             route add default ppp0

>             #

>             # Настройка устройства-туннеля

>             ifconfig tunl0 192.168.2.1 up

>             route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0

> `

Команда

> `

>             route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0

> `

расшифровывается как `Посылать все пакеты для сети `192.168.1.0/24` внутри пакетов, передаваемых на машину по адресу `aaa.bbb.ccc.ddd`'

Обратите внимание, что настройка туннеля требуется с обеих сторон. Устройство-туннель использует параметр ``gw`' команды route для определения адреса, на который следует передавать IP-пакеты, с "завернутыми" в них пакетами, предназначенными для сети `192.168.1.0`.

### Настройка IP-туннеля сеть-машина.

Совсем не обязательно передавать через туннель данные между двумя сетями. Иногда достаточно, чтобы на одном конце туннеля находилась одна машина. В этом случае настройте устройство ``tunl`' на этой машине на использование "домашнего" адреса, а на маршрутизаторе A используйте маршрут на машину, а не на сеть (еще потребуется использовать механизм кеширования аппаратного адреса (Proxy ARP)). Рассмотрим этот случай. Цель -- добиться того, чтобы машина B вела себя как машина, подключенная к интернету, и одновременно как одна из машин сети ``A`.

> `

>           192.168.1/24

>               -

>               |      ppp0 =                ppp0 =

>               |  aaa.bbb.ccc.ddd      fff.ggg.hhh.iii

>               |

>               |   /-----\                 /-----\

>               |   |     |       //        |     |

>               |---|  A  |------//---------|  B  |

>               |   |     |     //          |     |

>               |   \-----/                 \-----/

>               |                      also: 192.168.1.12

>               -

> `

На маршрутизаторе ``A`' выполните команды:

> `

>             #!/bin/sh

>             PATH=/sbin:/usr/sbin

>             mask=255.255.255.0

>             remotegw=fff.ggg.hhh.iii

>             #

>             # Настройка Ethernet

>             ifconfig eth0 192.168.1.1 netmask $mask up

>             route add -net 192.168.1.0 netmask $mask eth0

>             #

>             # настройка ppp0 (запуск ppp, установка маршрута по умолчанию)

>             pppd

>             route add default ppp0

>             #

>             # Настройка туннеля

>             ifconfig tunl0 192.168.1.1 up

>             route add -host 192.168.1.12 gw $remotegw tunl0

>             #

>             # Кешировать аппаратный адрес удаленной машины

>             arp -s 192.168.1.12 xx:xx:xx:xx:xx:xx pub

> `

На машине ``B`' выполните команды:

> `

>             #!/bin/sh

>             PATH=/sbin:/usr/sbin

>             mask=255.255.255.0

>             remotegw=aaa.bbb.ccc.ddd

>             #

>             # Настройка ppp0 (запуск ppp, установка маршрута по умолчанию)

>             pppd

>             route add default ppp0

>             #

>             # Настройка туннеля

>             ifconfig tunl0 192.168.1.12 up

>             route add -net 192.168.1.0 netmask $mask gw $remotegwtunl0

> `

Такая конфигурация характерна для так называемого "Мобильного IP". Если Вы хотите перемещать одну машину по интернету, сохраняя неизменным IP-адрес. За более подробной информацией о том, как это реализуется на практике, обратитесь к разделу, посвященному мобильному IP.

## 6.9 IP-маскарад (для версий ядра 2.0)

Очень многие имеют обычное сеансовое подключение к интернет, при котором интернет-провайдер выделяет только один IP-адрес. При этом в интернет можно работать только с одной машины. IP-маскарад -- трюк, позволяющий нескольким машинам одновременно использовать один IP-адрес, при этом с точки зрения внешних машин выглядеть как одна машина. Правда такая конфигурация работает только "в одну сторону" -- маскарадящиеся машины могут обращаться к любым машинам в интернет, но сами при этом остаются недоступными для входящих соединений. Это означает, что некоторые из сетевых сервисов просто не будут работать (например talk), а некоторые (например ftp)должны быть специально настроены на "пассивный" (PASV) режим работы. К счастью, наиболее распространенные сервисы, такие как telnet, www и irc работают нормально.

Опции компиляции ядра:

> `

>             Code maturity level options  --->

>                 [*] Prompt for development and/or incomplete code/drivers

>             Networking options  --->

>                 [*] Network firewalls

>                 ....

>                 [*] TCP/IP networking

>                 [*] IP: forwarding/gatewaying

>                 ....

>                 [*] IP: masquerading (EXPERIMENTAL)

> `

Настройте машину, поддерживающую PPP- или slip-соединение как обычную (не маскарадящую) машину. Кроме того, на этой машине должно быть еще одно сетевое устройство (как правило ethernet), через которое оно подключено к внутренней сети. Настройте эту сеть с использованием адресов из одной из зарезервированных сетей. На всех машинах укажите подключенную к интернет машину в качестве маршрутизатора.

Как правило, сеть имеет такую структуру:

> `

>     -                                   -

>      \                                  | 192.168.1.0

>       \                                 |   /255.255.255.0

>        \                 ---------      |

>         |                | Linux | .1.1 |

>     NET =================| masq  |------|

>         |    PPP/slip    | router|      |  --------

>        /                 ---------      |--| host |

>       /                                 |  |      |

>      /                                  |  --------

>     -                                   -

> `

Маршрутизатор настраивается следующими командами:

> `

>             # Маршрутизация для локальной сети

>             route add -net 192.168.1.0 netmask 255.255.255.0 eth0

>             #

>             # Маршрут по умолчанию

>             route add default ppp0

>             #

>             # Маскарадить все машины в сети 192.168.1/24

>             ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0

> `

Для минималистов, или тех, кому лень набивать много команд предлагаем следующую команду, которая будет работать для машины с двумя интерфейсами (все проходящие пакеты должны маскарадится).

> `

>             root# /sbin/ipfwadm -F -a accept -m

> `

Более подробную информацию об IP-маскараде вы можете получить на странице IP-маскарада. Очень подробным документом об IP-маскараде, в котором описано, как настраивать другие операционные системы на работу с IP-маскарадом Линукса, является ``IP-Masquerade mini-HOWTO''.

## 6.10 "Прозрачное" IP-кеширование.

Прозрачное IP-кеширование -- возможность Линукса перенаправлять запросы определенных сервисов на других машинах таким же сервисам на локальной машине. Это может быть полезно, когда Ваша машина является маршрутизатором, и одновременно кеширующим сервером. Вы сможете перенаправить все проходящие через маршрутизатор запросы к удаленным машинам на локальный кеш-сервер.

Опции компиляции ядра:

> `

>             Code maturity level options  --->

>                     [*] Prompt for development and/or incomplete code/drivers

>             Networking options  --->

>                     [*] Network firewalls

>                     ....

>                     [*] TCP/IP networking

>                     ....

>                     [*] IP: firewalling

>                     ....

>                     [*] IP: transparent proxy support (EXPERIMENTAL)

> `

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

> `

>             root# ipfwadm -I -a accept -D 0/0 telnet -r 2323

> `

В этом примере все попытки соединения с портом `telnet` (23) на любой удаленной машине будут перенаправлены на локальный порт 2323. На этом порту может работать демон, обрабатывающий telnet-соединения, протоколирующий их и т.п.

Более интересное применение прозрачного кеширования состоит в перенаправлении `http` данных через локальный кеш. К сожалению, протокол, используемый http-кешами отличается от обычного http: Если клиент соединяется с машиной `www.server.com:80` и запрашивает страницу `/path/page`, то при работе с локальным http-кешем он соединяется с машиной `proxy.local.domain:8080` и запрашивает страницу `www.server.com/path/page`.

Для решения этой проблемы существует маленький сервер, называющийся `transproxy`, который Вы можете найти в WWW. Если Вы запустите этот сервер на порту 8081, выполните следующую команду:

> `

>             root# ipfwadm -I -a accept -D 0/0 80 -r 8081

> `

Программа `transproxy` будет получать все запросы к удаленным http-серверам и преобразовывать их в запросы к локальному кеш-серверу.

## 6.11 IPv6

Не успели Вы привыкнуть к правилам работы с протоколом IP, как все изменилось! IPv6 -- сокращенное название шестой версии протокола IP. IPv6 был разработан в первую очередь для преодоления проблемы нехватки IP-адресов. Адреса в IPv6 имеют длину 16 байт (128 бит). Кроме того, в IPv6 внесены еще несколько изменений, в основном упрощений, для того чтобы сделать IP-сети более управляемыми.

На данный момент в Линуксе есть работоспособная, хотя еще неполная поддержка IPv6 в ядрах версий `2.1.*`.

Если Вы хотите поэкспериментировать с этой технологией нового поколения, или у Вас есть необходимость использовать ее, прочтите IPv6-FAQ, доступный на www.terra.net.

## 6.12 Мобильное IP

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

Существует проект создания полного набора средств мобильного IP для Линукса. Информацию о его текущем состоянии вы можете получить со страницы мобильного IP в Линуксе. Там же находится последняя версия этого пакета.

## 6.13 IP-рассылка (IP multicast)

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

Опции компиляции ядра:

> `

>             Networking options  --->

>                     [*] TCP/IP networking

>                     ....

>                     [*] IP: multicasting

> `

Для использования IP-рассылки Вам потребуется набор утилит и небольшая настройка сети. Более подробная информация о IP-рассылке содержится в Multicast-HOWTO.

## 6.14 Трансляция сетевых адресов (NAT, Network Address Translation)

Механизм трансляции сетевых адресов -- гораздо более стандартизированный "старший брат" IP-маскарада. Он подробно описан в RFC1631. Трансляция адресов предоставляет возможности, которых у IP-маскарада нет и это делает ее более пригодной для использования на маршрутизаторах и файрволлах организаций и в более крупных сетях.

Альфа-версия NAT для ядра версии 2.0.29 написана Михаэлем Хансенстайном (Michael Hasenstein, `Michael.Hasenstein@informatik.tu-chemnitz.de`). Она (вместе с документацией) доступна со страницы трансляции IP-адресов

Последние версии ядра 2.1.* включают некоторые из возможностей трансляции адресов в алгоритме маршрутизации.

## 6.15 Ограничитель потока данных. (Traffic Shaper)

Ограничитель потока данных создает специальные устройства, с ограничениями на передачу данных. Эти устройства являются виртуальными и используют для реальные сетевые устройства для фактической передачи данных. При этом все исходящие IP-пакеты маршрутизируются через устройства-ограничители.

Впервые ограничитель потока появился в ядре версии 2.1.15 и был затем перенесен в ядро версии 2.0.36 (он появился в исправлении `2.0.36-pre-patch-2`, распространяемом Аланом Коксом (Alan Cox), автором ограничителя потока и сопровождающим версии ядра 2.0)

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

> `

>             shapecfg attach shaper0 eth1

>             shapecfg speed shaper0 64000

> `

Ограничитель контролирует только исходящие IP-пакеты, так как пакеты могут попадать на его интерфейс только в соответствии с таблицами маршрутизации, если Вы хотите ограничивать и входящий поток данных, Вам потребуется использовать функцию ``маршрутизации по адресу отправителя''.

В версиях ядра 2.1 такая возможность уже есть, если Вы хотите внести ее и в ядро версии 2.0.*, используйте исправление Майка МакЛагана (Mike McLagan), доступное с `ftp.invlogic.com`. За дальнейшей информацией о работе ограничителя потока данных обратитесь к файлу `Documentation/networking/shaper.txt`, входящему в пакет исходных текстов ядра.

Если Вы хотите испытать тестовую версию ограничителя входящих пакетов, получите пакет `rshaper-1.01` (или более свежую версию) с ftp.systemy.it.

## 6.16 Маршрутизация в ядрах версий 2.2.*

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

Previous Next Table of Contents