В этом разделе рассматриваются вопросы работы ethernet и IP сетей. Фактически здесь собраны наиболее интересные разделы из относящихся к конкретным сетевым технологиям, и они будут полезны всем тем, что использует Линукс в локальных сетях.
Ядро присваивает 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
).
Это устройство имеет имя `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
).
Функция 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 * -> *
Новая система учета использует систему ``IP Firewall Chains''.
Обратитесь к
странице системы IP-цепочек за более детальной информацией.
Среди прочего, Вы будете должны использовать программу ipchains
вместо программы ipfwadm
для настройки IP-учета.
(Информация взята из файла Documentation/Changes
последней
версии исходных текстов ядра).
Иногда оказывается полезным, чтобы одному сетевому устройству соответствовало несколько 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
Все данные о маршрутизации через этот псевдоним будут автоматически удалены.
Использование файрволлов подробно рассмотрено в 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. Обязательно получите информацию из всех возможных надежных источников и попросите кого-либо протестировать ваши настройки "снаружи".
Новый файрволл использует систему ``IP Firewall Chains''.
Обратитесь к
странице системы IP-цепочек за более детальной информацией.
Среди прочего, Вы будете должны использовать программу ipchains
вместо программы ipfwadm
для настройки IP-файрволла.
(Информация взята из файла Documentation/Changes
последней
версии исходных текстов ядра).
Зачем может понадобится передавать IP-пакеты внутри IP-пакетов? Если Вы никогда не сталкивались с такой потребностью, подобная операция может показаться странной. Два самых главных применения этой техники -- Мобильное IP и IP-рассылка. Еще одно применение -- Amateur Radio.
Опции компиляции ядра:
Networking options --->
[*] TCP/IP networking
[*] IP: forwarding/gatewaying
....
<*> IP: tunneling
Устройства "IP-тоннели" получают имена `tunl0
', 'tunl1
' и т.д.
Так все-таки, зачем это нужно? Обычные правила 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
.
Совсем не обязательно передавать через туннель данные между двумя
сетями. Иногда достаточно, чтобы на одном конце туннеля находилась
одна машина. В этом случае настройте устройство `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.
Очень многие имеют обычное сеансовое подключение к интернет, при котором интернет-провайдер выделяет только один 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''.
Прозрачное 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-серверам
и преобразовывать их в запросы к локальному кеш-серверу.
Не успели Вы привыкнуть к правилам работы с протоколом IP, как все изменилось! IPv6 -- сокращенное название шестой версии протокола IP. IPv6 был разработан в первую очередь для преодоления проблемы нехватки IP-адресов. Адреса в IPv6 имеют длину 16 байт (128 бит). Кроме того, в IPv6 внесены еще несколько изменений, в основном упрощений, для того чтобы сделать IP-сети более управляемыми.
На данный момент в Линуксе есть работоспособная, хотя еще неполная
поддержка IPv6 в ядрах версий 2.1.*
.
Если Вы хотите поэкспериментировать с этой технологией нового поколения, или у Вас есть необходимость использовать ее, прочтите IPv6-FAQ, доступный на www.terra.net.
Под "Мобильным IP" подразумевают способность машины подключаться к интернет из разных мест без изменений в конфигурации. Как правило, при подключении в новом месте Вы получите новый IP-адрес и Вам потребуется переконфигурировать Вашу машину. Мобильное IP решает эту проблему путем выделения фиксированного IP-адреса и создания туннеля с автоматической маршрутизацией, так чтобы все пакеты, направленные на этот адрес перенаправлялись на реальный IP-адрес, используемый в данный момент.
Существует проект создания полного набора средств мобильного IP для Линукса. Информацию о его текущем состоянии вы можете получить со страницы мобильного IP в Линуксе. Там же находится последняя версия этого пакета.
IP-рассылка -- механизм, позволяющий передавать IP-пакет на несколько машин одновременно. Его используют для "широковещательных" приложений, таких как передача видео- и аудио-информации.
Опции компиляции ядра:
Networking options --->
[*] TCP/IP networking
....
[*] IP: multicasting
Для использования IP-рассылки Вам потребуется набор утилит и небольшая настройка сети. Более подробная информация о IP-рассылке содержится в Multicast-HOWTO.
Механизм трансляции сетевых адресов -- гораздо более стандартизированный "старший брат" IP-маскарада. Он подробно описан в RFC1631. Трансляция адресов предоставляет возможности, которых у IP-маскарада нет и это делает ее более пригодной для использования на маршрутизаторах и файрволлах организаций и в более крупных сетях.
Альфа-версия NAT для ядра версии 2.0.29 написана Михаэлем Хансенстайном
(Michael Hasenstein, Michael.Hasenstein@informatik.tu-chemnitz.de
).
Она (вместе с документацией) доступна со
страницы трансляции IP-адресов
Последние версии ядра 2.1.* включают некоторые из возможностей трансляции адресов в алгоритме маршрутизации.
Ограничитель потока данных создает специальные устройства, с ограничениями на передачу данных. Эти устройства являются виртуальными и используют для реальные сетевые устройства для фактической передачи данных. При этом все исходящие 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.
В последних версиях ядра 2.1.* появилось множество нововведений в алгоритме маршрутизации. К сожалению, Вам прийдется дождаться следующей версии этого документа или обратится к исходным текстам ядра.