Использование Red Hat Linux версии 6.X в качестве Интернет-шлюза для домашней сети

Paul Ramsey

     [email protected]
   

Перевод: Станислав Рогин, SWSoft Pte Ltd.

June 22, 2000

Простое руководство по настройке Red Hat 6 и похожих дистрибутивов для использования в качестве интернет-шлюза для небольшой домашней или офисной сети. Затрагиваются темы маскарадинга, DNS, DHCP и основ системы безопасности.


1. Введение

Этот документ является пошаговой инструкцией по настройке вашего Red Hat 6.X в качестве интернет-шлюза для домашней или небольшой офисной сети. Инструкции предельно упрощены: никаких специфических случаев, многие предположения будут положены в основу, в том числе и сетевые адреса. Основные требования этого документа:

  • У вас есть постоянное подключение к Интернет при помощи кабеля или ADSL.

  • Вы нормально установили Red Hat 6.X, минимум, на один из ваших компьютеров. Заметьте, что эти инструкции подходят и к производным от RedHat дистрибутивам, таким как Mandrake 6.X, который распространяется печатным агентством "MacMillan Publishing" под различными торговыми марками.

  • В ваш компьютер с Linux установлены две сетевые карты, и обе они совместимы с Linux.

  • У вас имеется ethernet-хаб, если вы работаете с сетью более, чем из одного компьютера, или кросс-кабель, если ваша сеть состоит из одного компьютера (не считая Linux).

  • Вы знаете, как редактировать текстовые файлы в Linux.

  • Вы можете войти в свою машину в качестве пользователя root. Вы знаете, как устанавливать RPM-пакеты с вашего CDROM в Linux.

Если ваши условия не соответствуют, хотя бы одному из этих требований, то, скорее всего, этот документ не для вас.

Ничего особенного в процессе установки системы вам делать не надо. Просто установите то, что имеет для вас хоть какой-нибудь смысл, и все. В этом документе приводятся подробные инструкции о том, как с нуля установить все, что нужно, для работы в сети, чтобы избежать предположений о том, что вы установили или настроили в процессе инсталляции системы. Для пущей уверенности в том, что не возникнет никаких проблем с информацией, приведенной здесь, вся настройка будет производиться путем прямого редактирования системных файлов, вместо использования графических утилит, поставляемых вместе с Red Hat. С одной стороны, это вроде бы сложнее; с другой стороны, опыт, полученный вами в процессе такой настройки будет незаменим, если вам придется настраивать Linux, например, в других дистрибутивах или ситуациях (если, предположим, X не работает, или вы настраиваете сервер, который не будет рабочей станцией).


1.1. Версии

Самую свежую версию этого документа всегда можно найти по адресу http://www.coastnet.com/~pramsey/linux/homenet.html (HTML-версия) и http://www.coastnet.com/~pramsey/linux/homenet.sgml (SGML-версия).

  • 21 декабря 1999 : Изначальная версия.

  • 2 января 2000 : Внесены предложения John Mellor по поводу хитростей на внешних соединениях.

  • 22 января 2000 : Небольшие дополнения по поводу двух аналогичных сетевых карт, а также информация Chris Lea о IP-алиасинге.

  • 16 марта 2000 : Дополнения на тему безопасности DNS-сервера и поддержка Caldera - спасибо Nelson Gibbs.

  • 22 июня 2000 : Red Hat 6.2 описана хитрость в настройке . Немного подробнее о PPPoE (Kerr First).


1.2. Copyright

Copyright © 2000, Paul Ramsey.

This manual may be reproduced in whole or in part, without fee, subject to the following restrictions:

  • The copyright notice above and this permission notice must be preserved complete on all complete or partial copies.

  • Any translation or derived work must be approved by the author in writing before distribution.

  • If you distribute this work in part, instructions for obtaining the complete version of this manual must be included, and a means for obtaining a complete version provided.

  • Small portions may be reproduced as illustrations for reviews or quotes in other works without this permission notice if proper citation is given.

Exceptions to these rules may be granted for academic purposes: Write to the author and ask. These restrictions are here to protect us as authors, not to restrict you as learners and educators.


1.3. Авторские права

Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

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

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: , или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу


2. Подключаем аппаратуру

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


2.1. Используя хаб

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

Подсоедините карту eth0, установленную в Linux-машину, к кабельному или ADSL-модему, используя кабель, установленный фирмой-продавцом (или тот кабель, о котором вы знаете, что он работает. Это очень важно, потому что некоторые кабельные модемы должны подключаться к сети при помощи кросс-кабеля, а другие при помощи обычного: используйте тот, который установила фирма-продавец).

Подсоедините установленную в Linux карту eth1 к хабу при помощи обычного "прямого" кабеля. Подключите все ваши локальные компьютеры к хабу при помощи обычных кабелей.


2.2. Не используя хаб

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

Подключите сетевую карту eth0, установленную в Linux-машину, к кабельному или ADSL-модему, используя кабель, предоставленный фирмой-продавцом. Подключите карту eth1 к другому компьютеру, используя росс-кабель.


2.3. С одной сетевой картой

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

Ядро Linux включает в себя поддержку "IP-алиасинга", который позволяет одной сетевой карте обрабатывать одновременно два IP-адреса. Стандартные ядра, поставляемые в комплекте Red Hat или Mandrake, по умолчанию включают в себя поддержку IP-алиасинга . Чтобы настроить интернет-шлюз, имея лишь одну сетевую карту, во всех последующих примерах настройки, просто поменяйте eth1 на eth0:0.

В конфигурации с одной сетевой картой не рекомендуется запуск DHCP сервера.

Подключите все ваши машины и кабельный (или ADSL) модем в хаб. Продолжайте, перекрестив пальцы.


3. Настройка сети

Хорошо, к этому моменту на ваш шлюзовой компьютер установлен Linux. Вы даже, наверное, настроили одну из сетевых карт и сконфигурировали выход в Интернет. Однако мы предположим, что у вас ничего не настроено, и начнем с "чистого листа".

Зайдите в компьютер root-ом. Все инструкции в этом документе приводятся с предположением, что вы вошли в компьютер в качестве root-а.

Ядро Linux называет ваши сетевые карты как eth0 и eth1, поэтому я буду с этого момента называть их так же. Проблема состоит в том, которая из них eth0, а которая eth1? Существует "простой" способ выяснить это, работающий как минимум в 50% случаев: положите компьютер на стол, чтобы материнская плата была горизонтальна и задняя панель "смотрела" на вас (так, как будто вы собираетесь открыть кожух и внести какие-то изменения). Левая карта будет eth0 -- вы можете ее чем-нибудь пометить, например, липкой лентой. Теперь запишите на листе бумаги производителей и модели обеих карт.

Хорошо, давайте теперь проверим, распознаются ли eth0 и eth1 ядром автоматически. Наберите команды ifconfig eth0 и ifconfig eth1. В обоих случаях, если ядро распознало вашу карту, вы должны увидеть примерно следующее (не учитывая цифры):

eth0 Link encap: Ethernet HWaddr 00:60:67:4A:02:0A inet addr:0.0.0.0 Bcast:0.0.0.0 Mask:255.255.255.255 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:466 errors:0 dropped:0 overruns:0 frame:0 TX packets:448 errors:0 dropped:0 overruns:0 carrier:0 collisions:85 txqueuelen:100 Interrupt:10 Base address:0xe400

Если ядро не смогло распознать вашу карту, вы увидите следующее:

eth0: error fetching interface information: Device not found.


3.1. Настройка драйвера сетевой карты

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

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

  • У вас сетевая карта на шине PCI. Скорее всего причина в том, что несмотря на то, что у вас такая новая и хорошая карта, драйверов к ней в ядре до сих пор нет. Много интересного вы узнаете, прочитав о своей сетевой карте (и других устройствах) в каталоге /proc/pci, записывая их производителей и модели.

  • У вас сетевая карта на шине ISA. Видимо, вам придется узнать адрес и IRQ, на которых работает карта. У вас ведь есть документация, не так ли? Если нет, то, наверное, вам стоит в поисках документации посетить web-сайт производителя карты (или чипа на ней: примечание переводчика). Или же у вас должна быть DOS-дискета - загрузите DOS и поищите на ней программу настройки, которая и укажет либо настроит необходимые адрес и IRQ.

  • У вас ISA PnP сетевая карта. Вам придется настроить эту карту -- как это сделать, подробно описано в "Plug'n'Play HOWTO". К счастью, когда вы настроите карту, вы будете точно знать адрес порта и IRQ сетевой карты.

Теперь, когда вы знаете производителя и модель сетевой карты eth0 и eth1, вы можете перейти к разделу "Совместимость" документа "Ethernet HOWTO" и найти в нем свою карту. Запишите название рекомендуемого драйвера и любую информацию о дополнительных параметрах, которые вам могут понадобиться.

Теперь наступило время редактировать конфигурационный файл! Мы будем править файл /etc/conf.modules. Откройте этот файл любым текстовым редактором. В этом файле может существовать много различных вариантов настроек и их комбинаций, поэтому я приведу здесь пример, основанный на моем шлюзе. У меня PCI 10/100Мбит-карта на чипе VIA Rhine, и обычная 10Мб ISA NE2000-совместимая карта. Я использую 100Мб для внутренней сети и 10Мб для внешнего соединения. Мой файл /etc/conf.modules выглядит примерно так:

alias parport_lowlevel parport_pc alias eth0 ne options ne io=0x300 irq=10 alias eth1 via-rhine

В нем проделывается примерно следующее:

  • Первая строчка указывает, что мой параллельный порт предназначен для печати. У вас, наверно, тоже есть такая строчка. Оставьте ее без изменений.

  • Вторая строчка (alias eth0 ne) указывает ядру использовать драйвер "ne" для устройства eth0.

  • В третьей строчке(options ne io=0x300 irq=10) написано, какой порт и IRQ использовать драйверу "ne" для работы с ISA-картой. Если у вас тоже ISA-карта, то вам тоже придется использовать эту директиву. Просто подставьте имя драйвера, соответствующий порт и номер IRQ.

  • В четвертой строке (alias eth1 via-rhine) указано использовать для устройства eth1 драйвер "via-rhine". Моя карта eth1 установлена на шине PCI, поэтому я не указываю номер порта или IRQ: шина PCI настраивает карту автоматически.

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

Когда вы закончите редактировать conf.modules, попробуйте снова запустить команды ifconfig eth0 и ifconfig eth1. Вы можете снова получить на экране различные предупреждения или ошибки, если перепутали адреса портов ввода-вывода или IRQ.


3.1.1. Две одинаковых сетевых карты

Итак, мои дорогие умники - купили две одинаковые сетевые карты для Linux-шлюза и не можете заставить их работать вместе? Не волнуйтесь - их работа зависит лишь от написания правильных опций в файле /etc/conf.modules. В этом примере я использовал придуманные адреса портов и номера IRQ, и предположил, что вы купили пару NE2000-совместимых карт (что очень распространено). Ваш файл /etc/conf.modules должен выглядеть примерно так:

alias eth0 ne alias eth1 ne options ne io=0x330,0x360 irq=7,9

Опции адреса порта и номера IRQ задаются в одной строке, и каждое первое число соответствует eth0, а второе, соответственно - eth1.


3.2. Настройка внутренней сети

"Внутренняя сеть" - это сеть, в которой будут общаться ваши домашние или офисные компьютеры. "Внешняя сеть" - это большой и страшный Интернет по другую сторону вашего Linux-а. В общем и целом внутренняя сеть будет полностью защищена от внешней при помощи Linux, который будет играть роль firewall среднего класса.


3.2.1. Сетевое устройство

Теперь драйверы ваших карт работают, и вы видите eth0 и eth1 в команде ifconfig - теперь наступило время настроить внутреннюю сеть. Я предполагаю, что ваша внутренняя сеть подключена к eth1, а внешнее устройство подключено к eth0.

Ваша внутренняя сеть будет частной, и поэтому мы используем для нее специальный номер сети, зарезервированный для внутренних частных сетей: 192.168.1.0. Это будет "частная сеть класса C" - вы можете хвалиться этим названием перед своими друзьями.

Во-первых, необходимо убедиться в том, что поддержка сети включена. Откройте файл /etc/sysconfig/network и найдите в нем следующие строки (если их нет, создайте):

NETWORKING=yes FORWARD_IPV4=yes

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

Замечание для пользователей Redhat версии 6.2: Чтобы система Red Hat 6.2 нормально поддерживала IP-пересылку и маскарадинг, необходимо отредактировать файл /etc/sysctl.conf. Убедитесь в наличии следующих строчек и проставьте в них соответствующие значения:

net.ipv4.ip_forward = 1 net.ipv4.ip_always_defrag = 1

Все настройки сетевых интерфейсов в Red Hat и его производных находятся в файлах в каталоге /etc/sysconfig/network-scripts. Зайдите в этот каталог и создайте в нем файл ifcfg-eth1. В этом файле напишите следующее:

DEVICE=eth1 IPADDR=192.168.1.1 ONBOOT=yes

Таким образом, загрузочный скрипт, отвечающий за настройку сети, будет инициализировать eth1 в процессе загрузки и отведет ему конкретный IP-адрес. Активизируйте свою сеть с учетом этих новых настроек командой /etc/rc.d/init.d/network restart


3.2.2. Сервер DHCP

Сервер DHCP будет автоматически снабжать IP-адресами сетевые устройства компьютеров вашей внутренней сети. Это достаточно удобно, особенно при использовании Notebook-ов: можно просто подключить свою машину к сети, и она сразу автоматически будет настроена. Если вам не нужен DHCP-сервер, то просто пропустите эту главу.

Во-первых, вам надо установить DHCP-сервер. Подключите CD-ROM с вашим дистрибутивом Linux CD и установите RPM-пакет dhcp. Затем откройте файл /etc/dhcpd.conf и напишите в нем следующее (удалив все остальное):

subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.2 192.168.1.60; default-lease-time 86400; max-lease-time 86400; option routers 192.168.1.1; option ip-forwarding off; option broadcast-address 192.168.1.255; option subnet-mask 255.255.255.0; }

Если ваш Linux будет и кэширующим DNS-сервером, то добавьте следующую строку:

option domain-name-servers 192.168.1.1;

Если вы знаете адреса внешних DNS-серверов и не собираетесь использовать свой Linux в качестве DNS-сервера, то добавьте следующую опцию (где x.x.x.x и y.y.y.y - это IP-адреса внешних DNS-серверов):

option domain-name-servers x.x.x.x, y.y.y.y;

Если вы собираетесь использовать Samba-сервер для доступа к файлам Linux с ваших компьютеров с Windows, то добавьте следующие строки, чтобы Linux был WINS-сервером и сервером поиска машин по умолчанию:

option netbios-name-servers 192.168.1.1; option netbios-dd-server 192.168.1.1; option netbios-node-type 8; option netbios-scope "";

Процедура настройка Samba и WINS не входит в этот документ. Если вам нужны подсказки или советы по этому поводу - читайте "SMB HOWTO".

Осталась еще пара шагов. Откройте файл /etc/rc.d/init.d/dhcpd и найдите в нем следующую строку:

/sbin/route add -host 255.255.255.255 dev eth1

DHCP-клиентам Windows необходим специальный широковещательный адрес в DHCP-запросах, и эта команда добавляет данный адрес в настройки TCP/IP вашего Linux. Если вы не нашли эту строку, то добавьте ее. Если же вы ее нашли, то убедитесь в том, что она ссылается на устройство eth1.

Следующий шаг будет состоять в том, чтобы указать в файле /etc/rc.d/init.d/dhcpd использовать по умолчанию устройство eth1. Замените строку:

daemon /usr/sbin/dhcpd

На строку:

daemon /usr/sbin/dhcpd eth1

Итак, вы готовы к запуску DHCP. Сначала запустите DHCP-сервер командой: /etc/rc.d/init.d/dhcpd start.

И последнее - вам надо убедиться в том, что DHCP-сервер загрузится после перезагрузки системы. Некоторые RPM-пакеты с DHCP-сервером не включали директив, которые бы его запускали после перезагрузки системы, поэтому мы подстрахуем себя командой chkconfig dhcpd on.

Эта команда заставляет RedHat указать запуск dhcpd в некоторых уровнях загрузки в каталоге /etc/rc.d. На уровнях 3 и 5 (многопользовательская консоль и многопользовательские X) DHCP-сервер запускается. На уровнях 0, 1 и 6 (отключение, однопользовательский режим и перезагрузка) DHCP-сервер останавливается.


3.2.3. Клиентские компьютеры

Если вы включили DHCP, то настройка ваших клиентских компьютеров будет очень простой - просто разрешите автоконфигурирование при помощи DHCP. В Windows это делается примерно так - откройте "Панель управления", в ней опцию "Сеть". Найдите протокол "TCP/IP" и нажмите на нем "Свойства". Установите галочку около надписи "Получить IP-адрес автоматически", нажмите OK и перезагрузите компьютер.

Перед тем, как вы его перезагрузите, вы можете использовать в Linux следующую команду: tail -f /var/log/messages. Таким образом, вы будете видеть сообщения, поступающие в системный журнал Linux. Если все пойдет хорошо, вы увидите в этом журнале запрос на IP-адрес и ответ DHCP-сервера. Выйти из команды tail -f можно клавишами Ctrl+C.

Если у вас не включен DHCP, то настройка также достаточно проста. Итак, снова откройте "Сеть" в "Панели Управления" и выберите свойства протокола TCP/IP. Вы можете давать вашим компьютерам любые адреса в сети 192.168.1.0, кроме 192.168.1.0 (собственно сама сеть), 192.168.1.255 (широковещательный адрес) и 192.168.1.1 (ваш Linux-сервер). Никогда не давайте двум компьютерам одинаковые IP-адреса. Установите "Шлюз по умолчанию" в 192.168.1.1, чтобы весь ваш исходящий трафик шел через Linux-шлюз.

В "HOWTO: IP-маскарадинг" в главе Configuration Section приведена очень подробная информация о настройке клиентских компьютеров.

Одним словом, чтобы настроить клиентский компьютер, вам необходимо либо включить использование DHCP, либо вручную указать любой адрес в сети 192.168.1.X и шлюз 192.168.1.1. DNS-сервером будет 192.168.1.1 (если вы используете кэширующий DNS-сервер(см. ниже) или укажите адрес сервера DNS, данный вашим провайдером.


3.2.4. Сервер DNS

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

Если вам интересна настройка "полноразмерного" DNS, то вам придется изучить очень много сложной документации. На этот предмет существует DNS HOWTO и книга DNS и BIND.

Для работы с DNS клиентские машины должны использовать Linux-шлюз в качестве своего главного DNS-сервера. Директивы DHCP, описанные в разделе 3.2.2 - это один из способов этого достичь. Если вы настраивали ваши компьютеры вручную, то вы должны настроить свойства DNS почти там же, где вводили IP-адрес машины.

Для установки DNS-сервера, сначала установите RPM-пакет bind, а затем RPM-пакет caching-nameserver. К этому моменту у вас почти все готово.

После стандартной установки кэширующий DNS-сервер будет работать прекрасно, но если вы знаете IP-адрес DNS-сервера вашего провайдера, то вы можете немного ускорить работу сети немного подредактировав файл /etc/named.conf, добавив в него следующую строку после опции directory (x.x.x.x и y.y.y.y - это первичный и вторичный DNS-сервера провайдера):

forwarders { x.x.x.x; y.y.y.y; };

После этих изменений ваш DNS-сервер сначала будет запрашивать адрес у DNS-серверов провайдера, и только затем в общем Интернете. У провайдеров обычно бывает большой запас готовой DNS-информации, и он может ответить значительно быстрее, чем через обычный запрос.

У демона named были проблемы с безопасностью, продолжавшиеся последние 12 месяцев, поэтому очень важно иметь наиболее свежую версию и внести некоторые изменения в стандартные настройки для повышения безопасности.

  1. Проверьте версию пакета bind - она должна быть минимум 8.2.2. Проверьте сайты Обновления Red Hat или Обновления Mandrake на наличие новых версий.

  2. Ограничьте доступ к вашему DNS-серверу только с локальной сети, добавив строку allow-query { 192.168.1/24; 127.0.0.1/32; };; в файл /etc/named.conf после строки с опцией forwarders.

  3. Избегайте запуска вашего DNS-сервера в качестве root-а. Если вы запустите ваш DNS-сервер под root-ом, то при его использовании запрашивающему будут даны привилегии администратора. Если же вы запустите сервер под безобидным пользователем, таким как nobody, то вы можете снизить риск недопустимого использования DNS-сервера. Чтобы ваш DNS-сервер запускался с правами пользователя nobody, отредактируйте файл /etc/rc.d/init.d/named, исправив в нем строку daemon named на daemon named -u nobody -g nobody.

Убедитесь в том, что DNS-сервер запустится в процессе загрузки: chkconfig named on. Таким образом, DNS-сервер будет автоматически запускаться на стандартных уровнях (3 и 5).

Итак, теперь вы можете запустить свой DNS-сервер: /etc/rc.d/init.d/named start start


3.2.5. Проверяем внутреннюю сеть

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

Откройте окно MSDOS на одном из ваших клиентских компьютеров, затем наберите ping 192.168.1.1. Эта команда будет посылать пакеты на ваш Linux через определенные интервалы, а ваш Linux будет посылать их обратно. Если все работает нормально, то вы увидите список со временем хождения пакетов по сети.


3.3. Настройка внешней сети

Теперь мы готовы к настройке внешней сети. Иногда этот процесс бывает довольно сложным - это зависит от того, насколько хорошо ваш провайдер поддерживает Linux. Если у вас возникли трудности, читайте "ADSL mini-HOWTO". Если я смогу обнаружить где-нибудь Мини-HOWTO по кабельным модемам, то я добавлю здесь ссылку и на него.

Одной из основных проблем, возникающей с внешними соединениями, является получение IP-адреса. Некоторые провайдеры выделяют статические IP-адреса кабельным или ADSL-клиентам - в этом случае настройка будет достаточно простой. Однако, большинство провайдеров перешли на динамическую настройку при помощи (вы уже наверное угадали...) DHCP. Это означает, что скорее всего ваш Linux будет DHCP-сервером на интерфейсе eth1, и, одновременно, DHCP-клиентом на интерфейсе eth0.

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


3.3.1. Со статическим IP-адресом

Если ваш провайдер выделил вам статический IP-адрес, то у вас все достаточно просто. Во-первых, создайте новый файл конфигурации интерфейса /etc/sysconfig/network-scripts/ifcfg-eth0 и внесите в него следующее:

DEVICE=eth0 IPADDR=x.x.x.x NETMASK=y.y.y.y ONBOOT=yes

Подставьте вместо x.x.x.x и y.y.y.y значения, данные вашим провайдером. Затем отредактируйте файл /etc/resolv.conf, внеся в него следующее:

search provider_domain_here nameserver n.n.n.n nameserver m.m.m.m

Значение поля "домен_провайдера" должно быть предоставлено провайдером. Вместо m.m.m.m и n.n.n.n подставьте адреса первичного и вторичного DNS-сервера провайдера соответственно. Если вы настроили свой Linux в качестве кэширующего DNS-сервера, то добавьте перед строками nameserver строку nameserver 127.0.0.1. В результате этого ваш Linux будет сначала обращаться к своему кэширующему DNS-серверу перед обращением к внешним серверам.


3.3.2. С использованием DHCP

Если ваш провайдер использует автоконфигурирование при помощи DHCP, то вам надо создать новый файл конфигурации интерфейса /etc/sysconfig/network-scripts/ifcfg-eth0, и написать в нем следующее:

DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes

Теперь убедитесь в том, что клиентский демон dhcpcd установлен в вашей системе. Перейдите на CD с дистрибутивом вашего Linux и установите RPM-пакет dhcpcd.

Наступило время испытать вашу новую конфигурацию сети. Дайте команду /etc/rc.d/init.d/network restart. Попробуйте увидеть внешний компьютер в Интернете, например, www.yahoo.com и посмотрите, получаете ли вы ответ.


3.3.3. Хитрости и проблемы

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


3.3.3.1. PPP по Ethernet (PPPoE)

Некоторые ADSL-провайдеры (например Bell Atlantic) с недавних пор начали настаивать на том, чтобы их новые пользователи подключались к ним при помощи протокола "PPP по Ethernet" (PPPoE). К этому они прилагают клиентскую программу для Windows: это не совсем удобно для пользователей Linux. К счастью, PPPoE - достаточно простой протокол, и существует несколько способов его поддержки и в Linux.

  • PPPoE-клиент "Рев пингвина" - его очень настойчиво рекомендует наш читатель Kerr First

  • PPPoE на Linux для Bell Sympatico

  • PPPoE на Linux для Sympatico (Общая информация) (Информация по применению в Linux)


3.3.3.2. Хитрые свойства DHCP

Одним из излюбленных глуповатых трюков сетевых провайдеров является привязывание вашего сервиса к конкретному имени машины или даже к конкретной сетевой карте. Это делается обычно ради того, чтобы вы не подключали к интернету через хаб несколько компьютеров (конечно, использование Linux и маскарадинга вам позволит это сделать и без ведома компании-провайдера, к тому же значительно более защищенным образом!).

Если провайдер дал вам имя машины и настаивает на том, чтобы вы назвали свой Windows именно этим именем в сети для использования сервиса подключения к интернету, то вы должны сделать так, чтобы ваш Linux посылал это имя при запросе адреса с DHCP-сервера.

Клиент DHCP в Red Hat вызывается в том случае, если вы установите в файле конфигурации интерфейса переменную BOOTPROTO в значение "dhcp", но это производится без предоставления DHCP-серверу имени машины. Чтобы предоставить ему такое имя, отредактируйте файл /etc/sysconfig/network и измените строку:

HOSTNAME=

на

HOSTNAME=your_isp_assigned_name

В некоторых вариантах Red Hat это может и не сработать. Если такой вариант не пройдет, откройте скрипт /sbin/ifup, найдите в нем вызов dhcpcd и pump и добавьте к ним опцию -h $HOSTNAME. Если таких строк в нем нет, то добавьте их: /sbin/dhcpcd -i $DEVICE -h $HOSTNAME и /sbin/pump -i $DEVICE -h $HOSTNAME.


3.3.3.3. "Road Runner"

В кабельном сервисе "Road Runner" для получения возможности использования сервера должна запускаться специальная процедура входа. К счастью, существует детально описывающий эту тему "Linux Road Runner HOWTO".


3.3.4. Изучаем настройки сети

Теперь вы можете полюбоваться своей сетью. Запустите команду ifconfig, чтобы увидеть настройку всех ваших сетевых устройств. На моем шлюзе это выглядит примерно так:

eth0 Link encap:Ethernet HWaddr 00:60:67:4A:02:0A inet addr:24.65.182.43 Bcast:24.65.182.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:487167 errors:0 dropped:0 overruns:0 frame:0 TX packets:467064 errors:0 dropped:0 overruns:0 carrier:0 collisions:89 txqueuelen:100 Interrupt:10 Base address:0xe400 eth1 Link encap:Ethernet HWaddr 00:80:C8:D3:30:2C inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:284112 errors:0 dropped:0 overruns:0 frame:1 TX packets:311533 errors:0 dropped:0 overruns:0 carrier:0 collisions:37938 txqueuelen:100 Interrupt:5 Base address:0xe800 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:12598 errors:0 dropped:0 overruns:0 frame:0 TX packets:12598 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0

Заметьте, что у eth0 имеется красивый внешний IP-адрес, а у eth1 - частный внутренний.

Вы также можете взглянуть на маршруты пакетов командой route. На моем шлюзе это выглядит примерно так:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 255.255.255.255 * 255.255.255.255 UH 0 0 0 eth1 192.168.1.0 * 255.255.255.0 U 0 0 0 eth1 24.65.182.0 * 255.255.255.0 U 0 0 0 eth0 127.0.0.0 * 255.0.0.0 U 0 0 0 lo default 24.65.182.1 0.0.0.0 UG 0 0 0 eth0

Теперь у нас настроена внешняя и внутренняя сети, сетевые устройства, специальный широковещательный адрес 255.255.255.255, и маршрут по умолчанию указывает на шлюз провайдера. Великолепно!

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


3.4. Безопасность

Одним из самых больших недостатков постоянного соединения с Интернетом при помощи ADSL или кабеля является то, что ваш компьютер открыт для потенциальных атак на систему защиты 24 часа в день, 7 дней в неделю. Использование Linux в качестве шлюза снижает этот риск, потому что он скрывает все ваши компьютеры - по мнению всех внешних компьютеров все соединения устанавливает ваш Linux. Это означает что ваша сеть защищена ровно настолько, насколько защищен ваш Linux, поэтому здесь я дам немного советов о том, как защитить Linux.

Во-первых, надо отключить доступ всем нехорошим парням. Чтобы сделать это, откройте файл /etc/hosts.deny и убедитесь что он выглядит примерно так:

# # hosts.deny Этот файл описывает имена хостов, которым # *запрещено* использовать локальные сервисы INET, вызываемые # при помощи '/usr/sbin/tcpd'. # # Строка portmap в настройке устарела, но она напоминает вам, # что новая защищенная версия portmap использует hosts.deny и hosts.allow. В частности, # вы должны знать, что NFS использует portmap! ALL: ALL

Здесь указано, чтобы "TCP-wrapper", контролирующий примерно 95% входящих соединений, отказывал во входе всем соединениям со всех машин. Достаточно полезное правило! Но в результате этого правила ваша внутренняя сеть также не сможет соединиться с Linux, что неправильно - поэтому мы внесем пару исключений. Откройте файл /etc/hosts.allow и напишите в нем следующее:

# # hosts.allow Этот файл описывает имена хостов, которым # *разрешено* использовать локальные сервисы INET, вызываемые # при помощи '/usr/sbin/tcpd'. # ALL: 127.0.0.1 ALL: 192.168.1.

Здесь указано, чтобы "TCP-wrapper" разрешал все виды соединений с локальной машины (127.0.0.1) и с внутренней сети (192.168.1.).

Теперь вы отгородились от внешних чудищ достаточно прочным заграждением с хорошим замком. Если вам еще нужна сигнализация, ров и вал, то все намного усложняется. Читайте "HOWTO: Защита" - это хороший первый шаг к большей защищенности вашего Linux-а.


4. Настройка маскарадинга

Прекрасно! Все приготовления окончены, наконец мы займемся волшебством. IP-маскарадинг - это один из настоящих волшебных сервисов, возможных при помощи Linux. Существуют, правда, коммерческие продукты, делающие то же самое, но не так эффективно: античная 386 машина может при помощи Linux предоставлять сервисы IP-маскарадинга целому офису средних размеров, но на нем нельзя запустить нормальным образом Windows 95, чтобы использовать эти коммерческие продукты. (Надо добавить, что я читал несколько очерков, где утверждалось, что Windows 2000 будет поддерживать "совместное использование соединений" без дополнительных программ. Это выглядит так, как будто опять Microsoft поглотил сферу деятельности фирм, продававших программы использования совместных соединений. Однако, я бы не рекомендовал запускать Windows 2000 на 386-ой машине.)

В Linux встроены очень разносторонние возможности firewall, и мы будем использовать самые простые и понятные. Если вы хотите быть экспертом firewall-ов, то вам надо прочитать "Firewalling HOWTO" для понимания теории и "" для получения подробных инструкций по использованию утилиты ipchains, поставляемой вместе с ядром Linux версий 2.2.X (в комплекте дистрибутивов Red Hat 6.X). Теперь есть еще и достаточно полный "IP Masquerading HOWTO", описывающий в деталях возможности IP-маскарадинга.

Настроить простой маскарадинг очень просто после настройки вашей сети. Откройте файл /etc/rc.d/rc.local и добавьте в его конце следующие строки:

# 1) Очищаем все таблицы правил. /sbin/ipchains -F input /sbin/ipchains -F forward /sbin/ipchains -F output # 2) Задаем времена задержек MASQ и разрешаем вход пакетам для конфигурирования DHCP. /sbin/ipchains -M -S 7200 10 60 /sbin/ipchains -A input -j ACCEPT -i eth0 -s 0/0 68 -d 0/0 67 -p udp # 3) Отключаем любую пересылку пакетов, кроме идущих с внутренней сети. # Такие пакеты маскируем. /sbin/ipchains -P forward DENY /sbin/ipchains -A forward -s 192.168.1.0/24 -j MASQ # 4) Загружаем модули, предназначенные для специальных сервисов. /sbin/modprobe ip_masq_ftp /sbin/modprobe ip_masq_raudio

Последние две строки загружают модули ядра, позволяющие компьютерам внутренней сети работать с FTP и RealAudio. Вы также можете загрузить другие модули для использования специальных сервисов:

  • CUSeeMe (/sbin/modprobe ip_masq_cuseeme)

  • Internet Relay Chat (/sbin/modprobe ip_masq_irc)

  • Quake (/sbin/modprobe ip_masq_quake)

  • VDOLive (/sbin/modprobe ip_masq_vdolive)

Теперь вы готовы испытать маскарадинг! Запустите скрипт rc.local командой /etc/rc.d/rc.local, и у вас все готово! Сядьте за один из ваших компьютеров во внутренней сети и попробуйте походить по web. Если вам повезет, то все будет оки-доки.


5. Проблемы

Существует очень-очень много вещей, которые могут неправильно работать после использования такого простого документа, как этот, потому что почти в каждом случае бывают какие-то исключения или хитрости. Большинство проблем возникает при настройке и конфигурировании внутренних и внешних сетевых устройств. Я буду пытаться отвечать на все вопросы, выяснять, что пошло не так, и добавлять ссылки здесь, чтобы те, у кого возникли проблемы, могли найти соответствующую документацию. Не стесняйтесь писать мне по адресу [email protected].


5.1. Не работает ICQ

Некоторые свойства ICQ прекрасно работают с маскарадингом. Другие не работают совсем. Существует экспериментальный модуль поддержки ICQ(beta quality ICQ module) для ядра, все еще находящийся в стадии разработки, однако с ним некоторые, ранее не работавшие, свойства ICQ начинают работать с маскарадингом. Файл README в исходных текстах этого модуля описывает, как его собрать и установить. После его сборки и установки, загрузите модуль командой /sbin/modprobe ip_masq_icq.


5.2. А у меня Caldera 2.X, а не Red Hat 6.X

Во-первых, большое спасибо за пожертвования на хорошее дело! Во-вторых Nelson Gibbs ([email protected]) пишет, что многие из этих советов будут работать и у вас. Правда, существуют достаточно серьезные отличия:

  1. Опция GATEWAY=xxx.xxx.xxx.xxx в файле настройки интерфейсов /etc/sysconfig/network-scripts/ifcfg-eth0 и eth1 (для локального интерфейса надо проставить адрес внешнего, а для внешнего - адрес IP-шлюза провайдера).

  2. Убедитесь в том, что в скрипте /etc/sysconfig/daemons/dhcpd опция ROUTE_DEVICE указывает на eth1, а не на eth0.

  3. /etc/dhcpd.conf необходимо внести указание подсети для обоих интерфейсов (Я не знаю почему, но после того, как я добавил команду subnet 216.102.154.201 netmask 255.255.255.255 { } без опций, сервер DHCP начинает работать на обоих интерфейсах eth0 и eth1, и даже на lo0). Если же указать только одну подсеть, то DHCP-сервер не работает, выдавая ошибку.

  4. Не добавляйте маршрут на машину 255.255.255.255, скрипт /etc/rc.d/init.d/dhcpd. Caldera сам исправляет эту проблему. Убедитесь в том, что изменили в скриптах все ссылки на eth0 на eth1.


5.3. Я хочу, чтобы одна из моих внутренних машин была Web-сервером

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

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

По каким-то причинам ipmasqadm не поставляется в комплекте Red Hat и Mandrake, поэтому вам придется взять его с веб-сайта создателя -- существует и RPM-пакет, и исходный текст.

После того, как вы получите RPM, установите его и добавьте следующие строки в скрипт /etc/rc.d/rc.local:

/usr/sbin/ipmasqadm portfw -f /usr/sbin/ipmasqadm portfw -a -P tcp -L x.x.x.x 80 -R 192.168.1.x 80

Первая команда очищает таблицу правил переназначения портов, а вторая добавляет переназначение порта 80 с внешнего интерфейса на порт 80 внутренней машины. Заметьте, что вместо x.x.x.x надо подставить внешний статический IP-адрес, а вместо 192.168.1.x.- IP-адрес внутренней машины.

Теперь внешние запросы на порт 80 будут переназначаться на порт 80 внутренней машины. Вы можете проверить эту настройку следующим образом: используйте команду telnet или ей подобную на внешний IP-адрес вашего шлюза: код переназначения портов обрабатывает только запросы, идущие с внешнего интерфейса. Now external requests for port 80 will be transparently sent to port 80 of the internal machine. Note that you cannot test this by telnetting or connecting to your gateway's port 80 from one of your inside machine: the port forwarder only honors requests coming in on the external interface.