Глава 30 Организация шлюза в Интернете для локальной сети
Глава 30 Организация шлюза в Интернете для локальной сети
В этой главе мы займемся созданием точки доступа в Интернет для локальной сети. Обычно для этого используется выделенная линия, по концам которой установлены модемы, подключаемые к последовательному порту. В последнее время все чаще для организации подключения по выделенной линии используются технологии. vDSL, при которых специальные модемы подключаются по интерфейсу Ethernet напрямую к сетевой карте, причем эти достаточно дорогие модемы сами уже и являются маршрутизаторами. Для определенности будем считать, что у нас есть модем, подключенный к последовательному порту.
Обычно в небольших локальных сетях выделяется один компьютер, который и выполняет роль маршрутизатора между локальной сетью и Интернетом, а также – счетчика трафика, брандмауэра, ограничителя скорости Web-сервера и т. п. Почти все, что необходимо для создания такой многопрофильной системы мы уже описывали выше, поэтому в этой главе остановимся только на тех проблемах, которые еще не рассматривались.
Начальные установки
Как правило во всех современных дистрибутивах Linux ядро собрано так, что работает как маршрутизатор пакетов между разными сетями и поддерживает механизм защиты маршрутизируемых пакетов и подсчет статистики.
Однако не будет лишним убедиться перед началом настройки системы, что в ядре вашей операционной системы присутствуют следующие необходимые для построения маршрутизатора элементы (функции):
• Networking support (поддержка сетевых свойств);
• TCP/IP networking (поддержка TCP/IP);
• IP forwarding/gatewaying (поддержка IP-маршрутизации);
• IP multicasting (поддержка специфических свойств IP-протокола);
• IP firewalling (поддержка брадмауэров);
• IP accounting (поддержка управления IP);
• Network device support (поддержка сетевых устройств).
Помимо этого, ядро операционной системы должно уметь работать с сетевыми картами, установленными на вашем компьютере, и поддерживать протокол РРР (Point-to-Point Protocol).
Само собой, следует правильно настроить сетевое оборудование, IP-адреса и т. п.
Связь с провайдером
Для подключения локальной сети к Интернету при помощи модема обычно используют два варианта. Первый из них предназначен для тех, кто платит за трафик, а второй используется теми, кто оплачивает проведенное в Интернете время.
В первом случае выход в Интернет осуществляется при помощи стандартного для Linux набора программ – pppd, chat и, возможно, еще нескольких скриптов. Происходит это следующим образом – вначале маршрутизатор дозванивается до провайдера и устанавливает с ним связь по протоколу РРР или по протоколу SLIP, который сейчас используется крайне редко. После установления соединения полученным каналом может пользоваться любой компьютер в вашей локальной сети (при соответствующей настройке). Канал удерживается до тех пор, пока не выключится ваш маршрутизатор или администратор явным образом не разорвет соединение.
Второй вариант – модификация первого, в англоязычной литературе он носит название dial on demand (звонок по требованию). Для его организации дополнительно используется программа diald, с помощью которой можно организовать работу таким образом, что если в течение заранее обусловленного времени не происходит обмена данными между локальной сетью и Интернетом, то diald разрывает соединение. При первой же попытке пользователя подключиться к Интернету diald снова дозванивается и устанавливает связь.
Поскольку второй вариант более сложный – будем рассматривать его как основной для организации нашего маршрутизатора.
Схема организации подключения локальной сети
Ниже приведены требования, которым должно удовлетворять подключение локальной сети к Интернету.
• Возможность доступа в Интернет – модем, телефонный номер и подключение к провайдеру.
• Набор программ для организации связи – pppd, chat и diald.
• Средство для управления брандмауэром – утилиты ipchains или iptables.
• Средство для ограничения трафика (если необходимо).
• Программное обеспечения для организации proxy-сервера.
• Программное обеспечение для учета и просмотра статистики.
Теперь, когда цели и средства известны, можно приступать к настройке программ.
Организация связи по коммутируемому соединению
Старейший вариант соединения с провайдером, и, к сожалению, наиболее распространенный в нашей стране. По сравнению с организацией связи по выделенному каналу представляет собой схему более сложную, поэтому рассмотрим ее первой.
Настройка программ
Будем считать, что на компьютере, который будет выходить в Интернет, правильно настроены сетевые параметры, и вы убедились в работоспособности локальной сети. Следующий шаг – добиться устойчивой связи с провайдером на вашем компьютере-маршрутизаторе.
Настройка связи с провайдером
Настроим подсистему дозвона и соединения с провайдером. Для удобства разобьем работу на два этапа:
1. Настройка РРР-соединения.
2. Установка и конфигурирование демона дозвона по требованию (diald).
Настройку модемного соединения мы здесь рассматривать не будем, поскольку это достаточно простая задача, и очень подробно рассмотрена в работе одного из отечественных патриархов Linux – В. Водолазкого "Установка РРР-соединения в Linux".
Почему мы используем протокол РРР? Основные преимущества протокола РРР по сравнению с протоколом SLIP состоят в следующем:
• назначение IP-адресов в РРР реализуется с помощью демона pppd, что значительно упрощает процесс конфигурирования при использовании динамических IP-адресов;
• коррекция ошибок, возникающих при передаче данных, осуществляется между компьютером провайдера и клиента, а не между удаленным компьютером, откуда берутся данные, и потребителем, как в протоколе SLIP.
Для организации связи между провайдером и клиентом необходимо получить данные, представленные в табл. 30.1.
Таблица 30.1. Необходимые данные для настройки модемного соединения
Процесс установления связи между вами и провайдером состоит из следующих этапов:
• соединения с компьютером провайдера с помощью модема;
• регистрации пользователя в удаленной системе;
• установки РРР-соединения.
Для решения этих задач в Linux используется небольшой набор скриптов, каждый из которых выполняет какую-то небольшую функцию. А поскольку это набор скриптов – никто не мешает на их базе определить именно те действия, которые необходимы вам при установлении или обрыве РРР-соединения.
Размещение скриптов зависит от настройки и предпочтений вашего дистрибутива. В современных версиях дистрибутива Red Hat используется два места – каталоги /etc/ррр и /etc/sysconfig/network-scripts. Наименования скриптов так же могут быть произвольными и очень часто зависят от предпочтений сборщика дистрибутива или системного администратора.
Для нашего случая будем считать, что у нас есть следующие файлы:
• /etc/ppp/chap-secrets – этот файл используется для аутентификации пользователя провайдером по протоколу chap. Обычно содержит имя и пароль пользователя для входа к провайдеру. В нашем случае это будет выглядеть следующим образом:
myname * vasya
• /etc/ppp/pap-secrets – этот файл используется для аутентификации пользователя провайдером по протоколу рар. Обычно содержит имя и пароль пользователя для входа к провайдеру. В нашем случае это будет выглядеть следующим образом:
myname * vasya
• /etc/ppp/ip-up – данный скрипт используется для соединения с провайдером. Зачастую этот файл содержит только следующую строку:
/usr/sbin/pppd
Здесь можно настроить установление модемом соединения с провайдером или вызвать необходимый скрипт или программу;
• /etc/ppp/ip-down – этот файл используется для разрыва соединения с провайдером;
• /etc/ppp/options – это, пожалуй самый сложный и ответственный файл. Он определяет параметры нашего модема, скорость передачи по последовательному интерфейсу данных, настройки программы pppd и некоторые другие параметры. Обычно файл /etc/ppp/options оставляют неизменным, а для конфигурирования параметров соединения создают копию файла с именем /etc/ppp/options.ttySX, где ttySX – имя последовательного порта, к которому подключен наш модем. Пусть для определенности модем подключен к ttyS0 (СОМ1).# Устройство
/dev/ttyS0
# Скорость
115200
mru 1500
# наш интерфейс: удаленный интерфейс
192.168.0.100:192.168.0.101
# маска подсети
netmask 255.255.255.0
bsdcomp 0
chap-interval 15
debug
crtscts
defaultrouteПервые две строки определяют последовательный порт, к которому подключен наш модем, и скорость, на которой будет происходить обмен между модемом и последовательным портом. Далее – обратите внимание на строку со следующим содержимым:
192.168.0.100:192.168.0.101
Эта строка определяет IP-адреса нашего последовательного интерфейса и провайдера. Такую строку необходимо добавить, если провайдер выдал нам постоянный IP-адрес. Как правило, в современном мире с коммутируемыми соединениями такого не происходит. Для статического IP-адреса также необходимо задать маску подсети.
Поскольку наш компьютер является маршрутизатором для локальной сети, необходимо настроить маршрутизацию. Для этого воспользуйтесь программой route и идущей с ней документацией. В том случае (а мы предположили, что точка подключения к провайдеру у нас одна) если у вас одно подключение к провайдеру, то можно в конец файла вписать команду default route, что позволит вам добавить маршрут в системную таблицу маршрутизации, используя удаленную сторону как шлюз.
Команды pppdДалее мы рассмотрим основные команды программы pppd (табл. 30.2).
Таблица 30.2. Основные команды программы pppd
Как видите, параметров много и для полного понимания вопроса необходимо изучить соответствующую документацию.
Настройка diald
Обычно программа diald входит в стандартный дистрибутив, и установка ее с помощью менеджера пакетов rpm занимает совсем немного времени. После установки необходимо привести стандартную конфигурацию программы diald в соответствие с нашими реалиями.
Чтобы лучше понять то, что мы будем делать дальше, немного о принципе работы программы diald. Программа создает соединение на псевдотерминале и устанавливает маршрутизацию на получившийся интерфейс. После этого она начинает отслеживать пакеты, проходящие по виртуальному каналу. Если кто-то пытается выйти в Интернет, diald перехватывает данные, анализирует их и на основе правил, определяемых администратором, присваивает им определенные тайм-ауты. Далее пакеты отправляются по назначению, а тайм-ауты заносятся в так называемый набор соединения. Как только в наборе появляется первый тайм-аут, diald начинает дозваниваться до провайдера и пытается установить соединение. Организовав сеанс связи, демон переустанавливает маршрутизацию на реальный канал. Таким образом, связь с внешним миром оказывается установленной.
На протяжении всего времени соединения продолжает обновляться набор соединения. Истекшие тайм-ауты удаляются, новые поступают. И так продолжается, пока по какой-либо причине трафик не прекратится. Тайм-аутов в наборе становится все меньше и меньше, и когда последний из них оканчивается, diald разрывает связь.
Теперь перейдем непосредственно к конфигурированию. Этот процесс состоит из трех частей:
• создание скрипта соединения – файл /etc/diald/connect;
• настройка основной конфигурации – файл /etc/diald.conf;
• настройка правил тайм-аутов – файл /etc/diald/standard.filter.
Создание скрипта соединения: /etc/diald/connectКак мы уже знаем, для организации сеанса связи необходимо выполнить несколько действий: дозвониться по телефону до поставщика услуг, пройти процедуру авторизации и запустить РРР-соединение. Поскольку у разных провайдеров этот процесс может коренным образом отличаться, то не имеет смысла встраивать эту процедуру в программу. Вместо этого используется внешний скрипт. Для этого достаточно подправить тот скрипт, который входит в стандартную поставку diald.
Ниже приведен вариант файла /etc/diald/connect.#!/bin/sh
NIT="ATZ" # Строка инициализации модема
PHONE="223322" # Телефон провайдера
ACCOUNT="myname" # логин
PASSWORD="vasya" # пароль
# Определяем функцию для посылки
# сообщений в системный журнал
# и в FIFO-канал diald
function message ()
{
[$FIFO] && echo "message $*" >$FIFO
logger -p local2.info -t connect "$*"
}
# Начинаем процедуру связи
# Инициализируем модем
message "*** Initializing Modem ***"
chat "" $INIT OK ""
if [$?!= 0]
then
message"!!! Failed to initialize modem!!!"
exit 1
fi
# Пытаемся дозвониться
message "*** Dialing system ***"
chat
ABORT "NO CARRIER"
ABORT BUSY
ABORT "NO DIALTONE"
ABORT ERROR"" ATDT$PHONE
CONNECT ""
case $? in
0) message "*** Connected ***";;
1) message "!!! Chat Error !!!"; exit 1;;
2) message "!!! Chat Script Error !!!"; exit 1;;
3) message "!!! Chat Timeout !!!"; exit 1;;
4) message "!!! No Carrier !!!"; exit 1;;
5) message "!!! Busy !!!"; exit 1;;
6) message "!!! No DialTone !!!; exit 1;;
7) message "!!! Modem Error !!!; exit 1;;
*)esac
# Проходим авторизацию
message "*** Send login and password ***"
chat
login: $ACCOUNT
password: $PASSWORD TIMEOUT 5 ""
if [$? != 0] then
message"!!! Failed to send!!!"
exit 1
fi
# Все прошло удачно!
message "*** Protocol started ***"Вышеприведенный скрипт – просто сценарий на языке командной оболочки, который вам необходимо немного адаптировать для ваших параметров. Настройка основной конфигурации: /etc/diald.conf
/etc/diald.conf – основной конфигурационный файл программы diald, в котором задаются параметры устанавливаемого соединения и определяется поведение программы. Набор команд конфигурации у diald достаточно обширен, поэтому в приведенном примере будут использованы только необходимые, а подробную информацию по конфигурационным командам можно посмотреть в документации на программу diald.
Содержимое файла diald.conf:# Протокол для связи с провайдером
mode ррр
# Вести журнал сеансов связи diald.log
accounting-log /var/log/diald.log
# Для управления демоном из внешних программ
# организовать канал FIFO – diald.ctl.
fifo /etc/diald/diald.ctl
# Для дозвона использовать файл /etc/diald/connect
connect /etc/diald/connect
# Далее несколько команд, описывающих применяемый модем.
# Поскольку мы уже определили параметры в /etc/ppp/options,
# то нижеприведенные команды необходимо закомментировать во избежание
# конфликтов в файле /etc/ppp/options
# device /dev/modem
# speed 115200
#modem
#lock
#crtscts
# Назначаем локальный и удаленный адреса нашего
# соединения. Если при связи с провайдером IP-адрес
# для вас выделяется динамически, то здесь можно
# поставить любые свободные адреса из диапазона,
# оговоренного при настройке нашей TCP/IP-сети.
# При запуске РРР diald сам выставит корректные значения
local 192.168.0.100
remote 192.168.0.101
# Провайдер дает нам динамический IP
dynamic
# Установить маршрут по умолчанию
# на виртуальное соединение
defaultroute
# Максимальное количество неудачных попыток дозвона
dial-fail-limit 10
# Задержка между попытками дозвона
redial-timeout 5
# время ожидания завершения скрипта connect
connect-timeout 120
# Файл с правилами для тайм-аутов
include /etc/diald/standard.filter
Настройка правил тайм-аутов: /etc/diald/standard.filterСледующее, что вы должны сделать – произвести настройку правил тайм-аутов. Это самый сложный момент настройки diald, т. к. требует знания внутренней структуры IP-пакетов. Однако разработчики diald – люди добрые и стандартный файл standard.filter имеет вполне приемлемые для большинства случаев настройки. Оставив в нем все, как есть, мы получим набор правил, рассчитанный на трехминутную паузу между окончанием активности в Интернете и разрывом связи с провайдером.
Комплексное тестирование
После проделанных манипуляций настало время проверить – правильно ли настроены наши программы. Для этого на компьютере желательно временно отключить все настройки брандмауэра (если вы, конечно, установили его). Затем необходимо запустить программу diald и попытаться выйти в "большой мир". Можно использовать браузер lynx (и зайти, например, на сайт http://www.bhv.ru), можно – программу ping.
Если все было настроено корректно, то после ввода предыдущей команды модем должен начать дозваниваться до провайдера. Через некоторое время связь будет установлена. Однако практически всегда lynx выдает сообщение о том, что не может соединиться с удаленным сервером! В данном случае – это нормальное явление. Дело в том, что при РРР-соединении с динамическими IP-адресами в силу определенных особенностей первый пакет обычно бывает утерян и не доходит до адресата. В результате мы ждем ответа от сервера, а он об этом и не подозревает. Достаточно повторить введенную ранее команду, чтобы все заработало.
Далее нам необходимо убедиться, что модем аккуратно разорвет соединение по прошествии трех минут. Дождавшись конца загрузки Web-страницы, засечем время. Примерно через три минуты diald должен дать команду на разрыв соединения.
Если у вас все прошло именно таким образом, значит система работает как надо. В противном случае проанализируйте последние строки системного журнала (/var/log/messages).
Указанными действиями мы проверили корректную работу только с нашего компьютера-маршрутизатора. Однако нам надо сделать то же самое и с любого компьютера в локальной сети, поэтому попробуем повторить описанную процедуру и на любом компьютере. Реакция diald должна быть аналогичной. Если что-то пошло не так, проверьте корректность настройки протокола TCP/IP на этой машине, в частности – настройки сетевого шлюза, которые должны указывать на наш компьютер-маршрутизатор.Данный текст является ознакомительным фрагментом.