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

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

Хорошо, к этому моменту на ваш шлюзовой компьютер установлен 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.

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

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

Так, значит одна из ваших карт не распознана ядром. На самом деле в этом нет ничего страшного. Что вам надо сделать, так это дать ядру немного более подробную информацию о том, как обнаружить ваши карты. В этом вопросе существует много хитростей и тонкостей, и я не собираюсь описывать их все. Запомните, если с этим возникнут трудности, то обращайтесь к "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.

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

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

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

Теперь драйверы ваших карт работают, и вы видите 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

Сервер 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-сервер останавливается.

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

Если вы включили 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, данный вашим провайдером.

Сервер 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

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

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

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

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

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

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

Хитрые свойства 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.

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

Теперь вы можете полюбоваться своей сетью. Запустите команду 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, и маршрут по умолчанию указывает на шлюз провайдера. Великолепно!

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

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

Одним из самых больших недостатков постоянного соединения с Интернетом при помощи 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-а.



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости