Нижегородский Государственный Технический Университет им. Р.Е.Алексеева Лабораторная работа №2 «Настройка сетевой системы ОС Linux» Выполнил студент группы 10-В-1: Сидоренко Олег Проверил: Кочешков А. А. Нижний Новгород 2014 год Цель работы Изучение установки и конфигурирования сетевого интерфейса, маршрутизации и контроля сетевых связей в ОС Linux. 1. Конфигурирование сетевого интерфейса. Предполагаемая архитектура сети в аудитории : Сеть физически разделена на 2 сегмента. В одной сети присутствует компьютер с двумя сетевыми интерфейсами, который выполняет роль шлюза. Первая подсеть: Адрес сети: 192.168.26.0 Маска: 255.255.255.128 Узлы сети: 192.168.26.1 - 192.168.26.126 Broadcast: 192.168.26.127 Адресация: Адрес сети + № рабочего места. Вторая подсеть: Адрес сети: 192.168.26.128 Маска: 255.255.255.128 Узлы сети: 192.168.26.129 - 192.168.26.254 Broadcast: 192.168.26.255 Адресация: Адрес сети. 200 + № рабочего места. Воссоздание таких же условий для выполнения дома невозможно, поэтому часть работы содержит примеры выполнения разнообразных действий и на другой архитектуре сети, которая будет указана. Настроим параметры сети: Выполним команду #ifconfig. Используем eth1, для него укажем IP адрес, максу сети и адрес broadcast. [root@5426-7 ~]# ifconfig eth1 192.168.26.207 netmask 255.255.255.128 broadcast 192.168.26.255 Проверим состояния интерфейсов: [root@5426-7 os]# ifconfig eth1 Link encap:Ethernet HWaddr 00:21:85:18:06:D6 inet addr:192.168.26.207 Bcast:192.168.26.255 Mask:255.255.255.128 inet6 addr: fe80::221:85ff:fe18:6d6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:335 errors:0 dropped:4219664546 overruns:0 frame:0 TX packets:69 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:44041 (43.0 KiB) TX bytes:9794 (9.5 KiB) Interrupt:27 Base address:0x4000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:34 errors:0 dropped:0 overruns:0 frame:0 TX packets:34 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:27400 (2.6 KiB) TX bytes:2740 (2.6 KiB) Проверим доступность хостов сети командой #ping. Причем используем три разных варианта задания адреса: 2 Правильный адрес своей сети: [root@5426-7 os]# ping 192.168.26.208 PING 192.168.26.208 (192.168.26.208) 56(84) bytes of data. 64 bytes from 192.168.26.208: icmp_seq=1 ttl=64 time=1.004 ms 64 bytes from 192.168.26.208: icmp_seq=2 ttl=64 time=0.082 ms 64 bytes from 192.168.26.208: icmp_seq=3 ttl=64 time=0.085 ms ^С --- 192.168.26.208 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 21ms rtt min/avg/max/mdev = 0.082/0.391/1.007/0.435 ms По данным можно сказать, что связь установлена. Правильный адрес чужой сети: [root@5426-7 os]# ping 192.168.26.3 connect: Network is unreachable Сеть недоступна. Неправильный адрес своей сети: [root@5426-7 os]# ping 192.168.26.210 PING 192.168.26.210 (192.168.26.210) 56(84) bytes of data. From 192.168.26.210 icmp_seq=1 Destination Host Unreachable From 192.168.26.210 icmp_seq=2 Destination Host Unreachable From 192.168.26.210 icmp_seq=3 Destination Host Unreachable ^C --- 192.168.26.210 ping statistics --3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 6999ms , pipe 3 Такой ответ команды говорит о том, что узел не был обнаружен. Рассмотрим назначение и содержимое конфигурационных файлов. /etc/sysconfig/network /etc/sysconfig/network-scripts/* /etc/rc.d/rc.sysinit /etc/rc.d/rc3.d/* /etc/modules.conf /etc/sysconfig/network Конфигурационный файл, содержащий информацию обо всех сетевых интерфейсах и маршрутизации для данного узла. Параметры задаются в виде ключей со значением: NETWORKING= yes/no - Настраивать сеть. FORWARD_IPV4= yes/no - Выполнять IP маршрутизацию. HOSTNAME=hostname. hostname имя узла. GATEWAY=GWIP. GWIP - IP адрес удаленного маршрутизатора. GATEWAYDEV=GWDEV. GWDEV - имя устройства (eth#) через которое имеется доступ к удаленному маршрутизатору. Рис. 1 /etc/sysconfig/network /etc/sysconfig/network-scripts/ В этом каталоге расположены файлы настроек и сценарии для работы с различными типами сетевых устройств и подключений. Например, файл /etc/sysconfig/network-scripts/ifcfg-lo содержит информацию о настройке сетевой Ethernet-карты с интерфейсом lo. Также здесь присутствуют скрипты запуска и останова интерфейсов (ifup-* и ifdown-*) 3 Рис. 2. Содержимое /etc/sysconfig/network-scripts/ Чтобы изменить сетевые адреса или добавить новое устройство на новом интерфейсе, необходимо верно отредактировать файл с именем интерфейса, или создать новый, и внести в него соответствующие изменения. DEVICE=devicename. devicename - имя физического сетевого устройства(eth1, p2p7). IPADDR=ipaddr. Задает IP адрес. NETMASK=netmask. Определяет сетевую маску. NETWORK=network. Определяет IP адрес сети. BROADCAST=broadcast. Определяет широковещательный IP адрес. ONBOOT= yes/no. Активировать интерфейс во время загрузки. BOOTPROTO=proto. Использование протокола во время загрузки. proto: o none - не использовать протоколов времени загрузки. o bootp - использовать протокол bootp (сейчас pump). o dhcp - использовать dhcp протокол. USERCTL=yes/no. Контроль за устройством доступен не только root. Рис. 3. /etc/sysconfig/network-scripts/ifcfg-p2p1 /etc/rc.d/ Его содержимое непосредственно касается процесса загрузки системы. В этом каталоге находятся следующие файлы: /init.d /rc0.d /rc1.d /rc2.d /rc3.d /rc4.d /rc5.d /rc6.d rc rc.local rc.sysinit Семь каталогов для каждого уровня выполнения, каталог init.d и три исполняемых файла rc, rc.local, rc.sysinit. /init.d содержит по одному скрипту для каждой из служб, установленных в системе. Этот скрипт отвечает за запуск, остановку или перезагрузку соответствующей службы. 4 rc.sysinit предназначен для выполнения начальных действий, необходимых для корректного функционирования операционной системы. В этом скрипте происходит инициализация оборудования, подключение swap-раздела, монтирование и проверка локальных файловых систем. rc.local вызывается по окончании исполнения файла rc и предназначен для команд, добавляемых администратором для запуска в процессе начальной загрузки. В него рекомендуется помещать дополнительные сервисы или персональные настройки. Каталоги /rcX.d играют исключительную роль в процессе загрузки, поскольку они содержат основные скрипты, необходимые для организации процесса загрузки. В каталоге /rcX.d размещаются ссылки на файлы скриптов, находящихся в каталоге /etc/rc.d/init.d. Названия этих ссылок имеют имена, начинающиеся либо с буквы К(kill), либо с буквы S(start), после которой идет двухзначное число и имя соответствующей службы. Файл, начинающийся с буквы S, отвечает за старт соответствующего процесса, а файл, начинающийся с буквы К, отвечает за остановку соответствующего процесса. Цифры, идущие после S или К в именах ссылок, задают порядок запуска скриптов. o /etc/rc.d/rc3.d/ соответствует уровню выполнения 3 (многопользовательский режим с поддержкой сети). /etc/modules.conf Содержит список модулей, а также передаваемые им параметры. При загрузке система читает этот файл и загружает указанные в нем модули. Загрузка модулей из файла modules.conf обеспечивается программой modprobe, которая вызывается из сценария инициализации системы /etc/rc.d/rc.sysinit. Во время работы системы можно явно загрузить нужный модуль. Для этого нужно использовать программу insmod, входящую в состав пакета modutils. Конфигурационный файл для загрузки модулей ядра alias <имя-модуля> <тип-модуля> – указывает псевдоним для устройства install <имя-модуля> <команда> – указывает выполнить заданную команду при загрузке модуля. На самом деле, указанный здесь модуль не загружается (он может и не существовать вовсе), но при выполнении modprobe указанная команда будет выполнена remove <имя-модуля> <команда> – аналогична install, но вызывается при выгрузке модуля include <имя-файла> – включить и обработать заданный файл 5 2. Управление пространством сетевых имен. За определение и разрешение символьных имен отвечают сразу несколько файлов. Рассмотрим их назначение: /etc/hostname — одержит символьное имя локального узла. Изменить имя можно с помощью программы #netcfg, которая заменяет хост-имя и помещает новое имя в файл. /etc/host.conf — управляет разрешением имен. Он сообщает, какие сервисы использовать при разрешении имен и в каком порядке. Строка multi допускает множество IP адресов для одного имени компьютера в /etc/hosts. Важная опция – Order - определяет порядок в котором использцются сервисы разрешения имен. Допустимые значения: o bind – для запроса к серверу имен o hosts – поиск в /etc/hosts o NIS – разрешение с помощью механизма NIS Порядок, в котором записаны значение определяет порядок последовательность использования служб. /etc/resolv.conf — задает адреса DNS-серверов, которые будут использоваться при разрешении имен. Данный файл является конфигурационным файлом преобразователя. Он обеспечивает доступ к DNS для разрешения адресов Internet. Строка nameserver указывает системы, на которые локальная система должна посылать запросы для разрешения имён хостов в IP-адреса и наоборот /etc/hosts — статическая таблица соответствия DNS-имен и IP-адресов. Используется для разрешения имен без запросов к DNS-серверу. /etc/hosts.allow и /etc/hosts.deny. Эти файлы содержат разрешение входов и отрицание доступа, соответственно, к услугам и хостам. Если запись была найдена в hosts.allow, доступ предоставляется независимо от hosts.deny. Если соответствие найдено в hosts.deny, то запрос будет отклонен и связь разорвана. Если никакое соответствие не найдено вообще, запрос будет принят. Записи в этих файлах имеют следующий формат: servicelist: hostlist [:shellcmd]. o servicelist – службы из файла /etc/services или ключевое слово ALL o hostlist – IP-адреса, имена хостов или ключевые слова ALL, LOCAL, UNKNOWN. o shellcmd – может содержать команду shell, которая сработает когда запись файла совпадет с запросом. /etc/networks - отображает имя сети на сетевой номер и наоборот. Для работы зададим следующую конфигурацию: В файле /etc/hosts зададим соответствие именам всем машинам обоих сегментов сети 127.0.0.1 192.168.26.1 192.168.26.3 192.168.26.204 192.168.26.205 192.168.26.206 192.168.26.207 192.168.26.208 192.168.26.209 localhost.localdomain localhost localhost 5426-1 5426-3 5426-4 5426-5 5426-6 5426-7 5426-8 5426-9 Причем для машины 5426-4 укажем адрес своей сети. Строка, задающая адрес localhost, должна присутствовать обязательно, иначе возможны разного рода ошибки. В файле /etc/networks зададим соответствие именам сегментам сети: net2 192.168.26.128 net1 192.168.26.0 Теперь проверим доступ к компьютерам по именам: [root@5426-7 etc]# ping 5426-8 PING 5426-8 (192.168.26.208) 56(84) bytes of data. 64 bytes from 5426-8 (192.168.26.208): icmp_seq=1 ttl=64 time=1.75 ms 64 bytes from 5426-8 (192.168.26.208): icmp_seq=2 ttl=64 time=0.090 ms Машина доступна, а значит связь установлена. 6 3. Формирование подсетей и маршрутизация. Получим таблицу маршрутизации при помощи команды #route: [root@5426-7 etc]# route Kernel IP routing table Destination Gateway net2 * Genmask Flags Metric Ref 255.255.255.128 U 0 0 Use Iface 0 eth1 Используем аргумент –n, чтобы избавиться от символьных имен [root@5426-7 etc]# route -n Kernel IP routing table Destination Gateway 192.168.26.128 0.0.0.0 Genmask Flags Metric Ref 255.255.255.128 U 0 0 Use Iface 0 eth1 Маршрут определяет начальную точку процесса передачи пакета и показывает, на какой узел система должна передать пакет, чтобы он достиг пункта назначения. Маршруты содержаться в таблице маршрутизации, которая хранится в файле /proc/net/route. Каждый столбец показывает какое-либо значение параметра: Destination - IP-адрес конечного пункта маршрута Gateway – IP-адрес(хост-имя) шлюза, используемого на данном маршруте, * - шлюз не используется Genmask – маска сети маршрута Flags – тип или состояние маршрута: U – активный, H – хост, G – шлюз, D – динамический. Metric – количество переходов до шлюза Ref – количество использований маршрута на текущий момент Use – количество пакетов, пересланных по данному маршруту Iface – тип интерфейса, используемого на данном маршруте Основной принцип работы: На адрес приемника накладывается маска подсети. Если этот результат совпадает с адресом назначения в таблице, то пакет проходит. Если система подключена к сети, в таблице маршрутизации должна быть сделана по крайней мере одна запись, задающая маршрут по умолчанию. По этому маршруту пакет посылается в том случае, если все остальные маршруты не могут привести его в пункт назначения. Пункт назначения для такого маршрута задается ключевым словом default. Когда ядру нужно определить, как и куда переправить пакет с определенным адресом назначения, оно смотрит на таблицу маршрутизации. При сравнении с каждой записью на адрес назначения в пакете накладывается маска маршрута (выполняется побитовая конъюнкция). Если результат совпадает с адресом назначения маршрута, выбирается этот маршрут. При наличии нескольких подходящих записей обычно выбирается маршрут с наиболее длинной маской и малой метрикой. Добавим новый маршрут к соседней сети: [root@5426-7 etc]# route add -net 192.168.26.0 netmask 255.255.255.128 gw 192.168.26.204 Должна была появиться новая запись в таблице. Проверим это командой #route: [root@5426-7 etc]# route Kernel IP routing table Destination Gateway net2 * net1 5426-4 Genmask Flags Metric Ref 255.255.255.128 U 0 0 255.255.255.128 UG 0 0 Use Iface 0 eth1 0 eth1 Как видно из полученных данных, в таблице маршрутизации добавилась сеть net1, с адресом шлюза, и видно, что в столбце Flags появился флаг G, означающий, что маршрут проходит через заданный шлюз. Проверим доступность узлов соседней сети при помощи команды #ping, указав правильный адрес соседней сети. 7 Команда #ping укажет на ошибку – узел не был найден. Это значит, что сеть была найдена (в отличии от испытания в первом пункте), но узел оказался недоступен. Это говорит о том, что маршрутизатор не выполняет требуемых операций. Должна быть подключена опция маршрутизации, установить её можно в хранилище параметров в псевдофайловой системе proc. Перейдем по пути /proc/sys/net/ip4. Параметр ipforward необходимо установить в 1, тем самым включив необходимую функцию. Проверим доступность узлов другой сети: [root@5426-7 etc]# ping 192.168.26.3 PING 192.168.26.3 (192.168.26.3) 56(84) bytes of data. 64 bytes from 192.168.26.3: icmp_seq=1 ttl=63 time=0.492 ms 64 bytes from 192.168.26.3: icmp_seq=2 ttl=63 time=0.146 ms ^C --- 192.168.26.3 ping statistics --2 packets transmitted, 2 received, 0% packet loss, time 1827ms rtt min/avg/max/mdev = 0.146/0.319/0.492/0.173 ms Узлы доступны, связь установлена. Traceroute - утилита предназначенная для отслеживания пути прохождения пакетов по IP-сети из пункта А в пункт Б. Дословно, в общем случае, результатом работы traceroute будет список всех промежуточных узлов, находящихся между А и Б. В некоторых реализациях можно получить время задержки до каждого промежуточного узла - время прохождения пакета туда и обратно. Трассировка, помимо тех данных которые выдает команда ping так же показывает узлы, через которые прошли пакеты, чтобы попасть в сеть назначения и количество хопов по пути туда. Выполним трассировку маршрута в соседнюю сеть: [root@5426-7 etc]# traceroute –n 192.168.26.3 traceroute to 192.168.26.3 (192.168.26.3), 30 hops max, 60 byte packets 1 192.168.26.204 0.097 ms 0.081 ms 0.074 ms 2 192.168.26.3 0.151 ms 0.154 ms 0.148 ms По полученным данным видно - сети разделены одним маршрутизатором (192.168.26.204). В данной архитектуре сети есть возможность выхода во внешнюю сеть. На канальном уровне сеть1 изолирована на коммутаторе D-Link, а сеть2 на устройстве 3Com с возможностью выхода во внешнюю сеть. Адрес порта маршрутизатора 192.168.15.1. Таким образом, необходимо сконфигурировать третью IP-сеть: Адрес сети: 192.168.15.0 Маска: 255.255.255.254/27 Адресация: 192.168.15.20 + номер рабочего места Шлюз: 192.168.15.1 Есть возможность присвоить одному интерфейсу несколько адресов. Выполним следующую команду: [root@5426-7 etc]# ifconfig eth1:0 192.168.15.26 netmask 255.255.255.224 Вывод конфигурации укажет на правильность действий. [root@5426-7 etc]# ifconfig eth1 Link encap:Ethernet HWaddr 00:21:85:18:06:EA inet addr:192.168.26.206 Bcast:192.168.26.255 Mask:255.255.255.128 inet6 addr: fe80::221:85ff:fe18:6ea/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:920 errors:0 dropped:0 overruns:0 frame:0 TX packets:114 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:103872 (101.4 KiB) TX bytes:14115 (13.7 KiB) Interrupt:27 Base address:0xe000 eth1:0 Link encap:Ethernet HWaddr 00:21:85:18:06:EA inet addr:192.168.15.26 Bcast:192.168.15.31 Mask:255.255.255.224 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 8 Interrupt:27 Base address:0xe000 Проверим доступность шлюза: [root@5426-7 etc]# ping 192.168.15.1 PING 192.168.15.1 (192.168.15.1) 56(84) bytes of data. 64 bytes from 192.168.15.1: icmp_seq=1 ttl=255 time=1.08 ms 64 bytes from 192.168.15.1: icmp_seq=2 ttl=255 time=0.395 ms ^C --- 192.168.200.18 ping statistics --2 packets transmitted, 2 received, 0% packet loss, time 1782ms rtt min/avg/max/mdev = 0.395/0.731/1.067/0.336 ms Все пакеты достигли назначения, связь есть. Чтобы внешняя сеть стала доступной в таблицу маршрутизации нужно добавить путь по умолчанию, который будет использоваться в тех случаях, когда все другие записи не подходят. Этот маршрут соответствует адресу назначения 0.0.0.0 и маске 0.0.0.0. Маршрут с такой маской будет использоваться в последнюю очередь. [root@5426-7 etc]# route add default gw 192.168.15.1 [root@5426-7 etc]# route -n Kernel IP routing table Destination Gateway Genmask 192.168.15.0 0.0.0.0 255.255.255.224 192.168.26.128 0.0.0.0 255.255.255.128 192.168.26.0 192.168.26.204 255.255.255.128 0.0.0.0 192.168.15.1 0.0.0.0 Flags U U UG UG Metric 0 0 0 0 Ref 0 0 0 0 Use 0 0 0 0 Iface eth1:0 eth1:0 eth1:0 eth1:0 Маршрут был корректно добавлен и появился в таблице. Команда #route преобразует IP-адреса обратно в DNS-имена, используя указанный в resolv.conf сервер. Укажем в этом файле IP-адрес DNS-сервера строчкой nameserver 192.168.200.18 Проверим доступность DNS-сервера, который имеет IP-адрес 192.168.200.18 [root@5426-7 etc]# ping 192.168.200.18 PING 192.168.200.18 (192.168.200.18) 56(84) bytes of data. 64 bytes from 192.168.200.18: icmp_seq=1 ttl=127 time=0.540 ms 64 bytes from 192.168.200.18: icmp_seq=2 ttl=127 time=0.588 ms 64 bytes from 192.168.200.18: icmp_seq=3 ttl=127 time=0.575 ms ^C --- 192.168.200.18 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2815ms rtt min/avg/max/mdev = 0.540/0.567/0.588/0.034 ms DNS-сервер доступен и выполняет свою работу. Т.к. первая подсеть изолирована, и из вне виден лишь компьютер 5426-4, то есть необходимость поднять NAT. NAT (Network Address Translation) — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов. Принимая пакет от локального компьютера, роутер(в данном случае 5426-4) смотрит на IP-адрес назначения. Если это локальный адрес, то пакет пересылается другому локальному компьютеру. Если нет, то пакет надо переслать наружу в интернет. Но ведь обратным адресом в пакете указан локальный адрес компьютера, который из интернета будет недоступен. Поэтому роутер «на лету» транслирует (подменяет) обратный IP-адрес пакета на свой внешний (видимый из интернета) IPадрес и меняет номер порта (чтобы различать ответные пакеты, адресованные разным локальным компьютерам). Комбинацию, нужную для обратной подстановки, роутер сохраняет у себя во временной таблице. Через некоторое время после того, как клиент и сервер закончат обмениваться пакетами, роутер сотрет у себя в таблице запись о n-ом порте за сроком давности. Назначим правило, позволяющее включать NAT: # iptables –t nat –A POSTROUTING –S 192.168.26.0/27 –j MASQUERADE Проверим доступность удаленного ресурса в сети Интернет: www.ngtu.nnov.ru [root@5426-7 etc]# ping www.nntu.nnov.ru PING www.ngtu.nnov.ru (195.122.232.2) 56(84) bytes of data. 64 bytes from www.ngtu.sci-nnov.ru (195.122.232.2): icmp_seq=1 ttl=57 time=2.91 ms 64 bytes from www.ngtu.sci-nnov.ru (195.122.232.2): icmp_seq=2 tt2=57 time=2.44 ms 9 64 bytes from www.ngtu.sci-nnov.ru (195.122.232.2): icmp_seq=3 tt3=57 time=2.82 ms ^C --- www.ngtu.nnov.ru ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2815ms rtt min/avg/max/mdev = 2.447/2.729/2.915/0.207 ms Выполним трассировку пакетов до www.ngtu.nnov.ru, чтобы определить количество маршрутизаторов на пути: [root@5426-7 etc]# traceroute –n www.nntu.nnov.ru traceroute to www.nntu.nnov.ru (195.122.232.2), 30 hops max, 60 byte packets 1 192.168.15.1 0.467 ms 0.536 ms 0.553 ms 2 10.10.255.2 0.857 ms 1.178 ms 1.038 ms 2 195.122.232.2 3.345 ms !X 3.334 ms !X 3.317 ms !X Пакет прошел 3 маршрутизатора прежде чем достигнуть узла назначения. При этом 192.168.15.1 маршрутизатор факультета, 10.10.255.2 – маршрутизатор, располагающийся в первом корпусе НГТУ. Отметим, что подобная команда существует в Windows (tracert), однако, работает она иначе. Tracert. Значение времени жизни (TTL) первого отправляемого пакета устанавливается равным 1. Когда протокол IP первого маршрутизатора принимает этот пакет, то он в соответствии со своим алгоритмом уменьшает TTL на единицу и получает 0. Маршрутизатор отбрасывает пакет с нулевым временем жизни и возвращает узлу-источнику ICMP-сообщение об ошибке истечения времени дейтаграммы (ICMP-сообщение тип 11 код 0). Это сообщение содержит имя маршрутизатора и его IP-адрес. Когда это ICMP-сообщение прибывает к отправителю, тот по значению таймера узнает время оборота пакета(RTT), а также (из ICMP-сообщения) имя и IPадрес промежуточного маршрутизатора. Затем посылается следующий IP-пакет, но теперь со значением TTL равным 2. Этот пакет уже доходит до второго маршрутизатора, но опять там «умирает» о чем аналогичным, же образом сообщается узлу отправителю. И так до тех пор, пока не достигнет конечного узла. На основании данных ответов строится трассировка. Traсeroute. Принцип идентичный, за одним исключением: Посылает в сторону заданного хоста UDPдатаграммы на какой-то произвольный порт, обычно — на «высокий» или на зарезервированный. Сначала посылается серия из 3-х таких пакетов с TTL=1, по приходу ответов замеряется время прохождения и определяется доменное имя транзитного узла. Затем, как сказано выше, посылаются очередные серии пакетов с TTL=2 и т.д. В конце мы получаем от конечного хоста отклик «Порт недоступен» (PORT_UNREACHABLE), что означает завершение трассировки. При работе, в выводе маршрута могут появиться т. н. звездочки (* * *). Очень часто, маршрутизаторы/хосты настраиваются таким образом, чтобы они не отвечали на подобного рода запросы, в таком случае и появляются звездочки. Это совершенно не значит, что имеются какието проблемы. Делается это для того, чтобы разгрузить оборудование. В данном примере 1 и 8 хоп не отвечает на UDP-датаграммы, однако если запустить traceroute c ключиком -I, то трассировка дойдет, т.к. данный ключ заставляет посылать уже ICMP-датаграммы. Следует отметить, что звездочки могут возникать и при трассировке ICMP-пакетами, это также не значит, что существует проблема. Все зависит от того, как настроено оборудование. Схема сети на канальном уровне 10 Рис.4. Схема сети на канальном уровне На канальном уровне имеется 2 сети. Первая сеть объединят 4 узла на коммутаторе D-LINK. Вторая сеть объединяет 5 узлов на коммутаторе 3COM. Порт коммутатора второй сети связан с портом маршрутизатора на уровне факультета. Один из узлов имеет две сетевые карточки и входит и в 1-ю и во 2-ю сеть. Схема IP-сети аудитории с выходом в интернет Рис. 5. Схема IP-сети аудитории. Используя команду traceroute можно определить, что после маршрутизатора факультета пакеты отправляются на маршрутизатор уровня университета(10.10.255.2), а затем в Интернет. 11 4. Средства конфигурирования сети в интерфейсной среде. Найдем системные утилиты для конфигурирования сети. Запустим Параметры системы. В разделе Оборудование можно найти апплет Сеть. Рис.6. Раздел Оборудование Параметров системы При запуске откроется окно, которое отобразит основную информацию по выбранному подключению, а также позволить отключить его полностью, либо включить «Авиарежим» Рис.7.Апплет Сеть Кнопка Настроить откроет окно конфигурирования выбранного подключения. Там можно задать его название, автоматическое подключение и настроить разные параметры, разделенные на 4 вкладки. Рис.8. Изменение Проводное соединение 1 12 Вкладка «Проводные» содержит технические параметры такие как MAC-адрес устройства, MTU. Во вкладке «Защита 802.1х» можно настраивать параметры контроля доступа и аутентификации: выбрать метод аутентификации, задать имя пользователя и пароль и пр. Рис.9. Вкладка Защита 802.1х Вкладка «Параметры IPv4» позволяет настроить одноименные параметры. Есть возможность выбора способа настройки: Автоматически (DHCP) Автоматически (DHCP, только адрес) Вручную Только для локальной сети Общий с другими компьютерами Не указывать адрес Настроим соединение вручную. Зададим ip-адрес 192.168.26.207, маску 255.255.255.128 и шлюз 192.168.26.204. Рис.10. Вкладка Параметры IPv4 Также в этой вкладке можно добавить маршруты в таблицу маршрутизации. Для этого надо нажать на кнопку «Маршруты…» и в появившемся окне добавить маршрут путем задания соответствующих значений. Вкладка «Параметры IPv6» предоставляет аналогичные возможности для настройки, как и предыдущая вкладка. 13 Рис.11. Вкладка Параметры IPv6 Стоит отметить, что настройки, установленные с помощью данного средства сохраняются и после перезагрузки в отличие от настройки сетевых интерфейсов через команду ifconfig. Это объясняется тем, что вносятся изменения непосредственно в конфигурационные файлы. Утилита настройки соединений называется GNOME Network Manager. Она позволяет соединить настройку всех типов сетей в единой утилите, и настраивать их общими, похожими методами. Утилита управляется на стороне пользователя с помощью апплета, запускаемого демоном nmapplet, в системном лотке пользователя. Для создания подключений следует пройти в меню Приложения – Прочие – Сетевые соединения или вызвать утилиту из контекстного меню иконки соединения. Окно сетевых соединений имеет 5 вкладок, каждая из них содержит название какого-либо подключения и возможность его изменить, нажав соответствующую кнопку или добавить новое. Рис.12. Сетевые соединения Проводные. Содержит список проводных соединений. Настройка их полностью совпадает с рассмотренной(запускается одна и та же утилита) Беспроводные Позволяет настраивать беспроводные сети, в конфигурационном окне имеется четыре вкладки для разных параметров соединения: 14 Рис.13. Изменение Беспроводное соединение 1 Беспроводные: общие параметры сетевого соединения, такие как SSID, режимы работы, mac и MTU. Защита беспроводной сети: параметры соединения с сетью и метод аутентификации в ней. Параметры IPv4: параметры IPv4. Параметры IPv6: параметры IPv6. Мобильные. Позволяет настроить интернет соединений через мобильное широкополосное соединение. Например через мобильный телефон, или модем провайдера. При подключении устройства NetworkManager автоматически увидит его, и выведет мастер настройки соединения в котором нужно будет указать вашего мобильного провайдера, и регион, после чего NetworkManager найдёт нужные настройки в своей базе настроек. Рис.14. Мастер настройки мобильного соединения Рис.15. Выбор оператора мобильного соединения 15 Можно также указать настройки вручную. После прохождения всех шагов мастера, в основном окне сетевых настроек, появиться новый пункт сетевого соединения. VPN Содержит в себе сети VPN, поддерживает протоколы vpnc, OpenVPN и MS pptp. Что бы добавить VPN соединение можно использовать два пути. Первый с помощью мастера, либо с помощью импорта из уже существующего файла с настройками. Мастер вызывает нужную форму в зависимости от того какой вид VPN вы укажете. DSL Последняя вкладка отвечает за соединения DSL. Соединения управляются из окна с четырьмя вкладками, два из которых известны, а еще два содержат форму ввода логина-пароля и форму настроек аутентификации пользователя. Рис.16. Изменение DSL-соединение 1 Рис.17.Вкладка Параметры PPP 16 5. Контроль за сетью, получение статистики и другой сетевой информации. Для дальнейших экспериментов пришлось перейти на другую архитектуру сети: Имеется две машины с установленным дистрибутивом Linux с адресами 192.168.26.1, 192.168.26.2 и именами 5426-1 и 5426-2 соответственно. Имеется одна машина с Windows-системой и адресом 192.168.1.33. В этой же сети находится маршрутизатор с адресом 192.168.1.1 и возможностью выхода во внешнюю сеть. netstat (network statistic) - это утилита командной строки показывающая сетевые соединения (как входящие, так и исходящие), таблицы маршрутизации и различные статистики сетевых интерфейсов. Утилита присутствует как в Unix системах, так и в Windows. Разница использования утилиты в разных операционных системах небольшая, в основном заключается в синтаксисе, а именно в ключах. Четыре наиболее распространенных варианта использования команды netstat: проверка состояния сетевых соединений; анализ информации о конфигурации интерфейсов; изучение таблицы маршрутизации; получение статистических данных о различных сетевых протоколах. Проверка состояния сетевых соединений Будучи вызванной без аргументов, команда #netstat выдает информацию о состоянии активных TCP- и UDP-портов. Неактивные серверы, ожидающие запросов на установление соединений, как правило, не отображаются. Чтобы отобразить состояние всех соединений можно воспользоваться командой с аргументам -a, более того, можно уточнить что просмотреть – TCP или UDP соединения добавив после -a соответствующий символ(t или u). Выполним команду #netstat –at Рис.18. Результат команды #netstat –at Адреса представлены в формате имя_компьютера:сервис, где сервис — номер порта. Для известных сервисов порты указаны в символическом виде (соответствия между номерами портов и их именами определены в файле /etc/services). При наличии опции -n все адреса отображаются в числовом виде. В колонках Send-Q и Recv-Q показывается, сколько запросов находится во входящих и исходящих очередях на данном компьютере. На другом конце соединения размеры очередей 17 могут быть другими. Желательно, чтобы эти значения были близки к нулю и не были ненулевыми постоянно. Состояние соединения имеет значение только для протокола TCP. Протокол UDP не проверяет факт установления соединения. Наиболее распространенные состояния: ESTABLISHED (установлено) — для активных соединений, LISTEN (ожидание) — для серверов, ожидающих поступления запросов, TIME_WAIT (ожидание закрытия) — для соединений, находящихся в процессе закрытия. Команда #netstat позволяет проверить правильность настройки серверов и диагностировать определенные виды нарушений связи, особенно при работе с протоколом TCP. Например, если соединение находится в состоянии SYN_SENT, это означает наличие процесса, который пытается установить контакт с несуществующим или недоступным сервером. Если команда netstat сообщает о большом количестве соединений, находящихся в состоянии SYN_WAIT, то компьютер, вероятно, не в состоянии обработать запросы на установление соединений. Проверим, что покажет команда netstat при подключении с другого узла с помощью ssh. Для этого выполним команду #netstat -at, выполним подключение (команда #ssh 5426-1)на другом узле и снова выполним #netstat -at. Рис.19. Результат команды #netstat -at Рис.20. Результат команды #netstat –at после выполнения подключения. 18 После подключения состояние соединение, закрепленное за ssh, изменилось из LISTEN в ESTABLISHED, т.е. оно стало активным. Причем в столбцах адресов стало указываться имя компьютера к которому совершили подключение(5426-1), и который выступил его инициатором(5426-2). В windows-системах сама команда и выводящиеся результаты немного отличаются. Выполним команду netstat –a –p tcp. Рис.21. Результат команды netstat –a –p tcp Команда имеет немного другой синтаксис и в выводе отсутствует информация о количестве запросов во входящих и исходящих очередях . Команда netstat -i сообщает о состоянии сетевых интерфейсов. Рис.22. Результат команды netstat -i Вывод статистики представлен в виде таблицы, каждая строчка которой соответствует одному из интерфейсов, а столбец одному из показателей: Iface - имя интерфейса MTU – максимальное число байтов в пакете RX-OK – пакеты, принятые без ошибок RX-ERR - пакеты, принятые с ошибками RX-DRP – пропавшие пакеты RX-OVR – ошибки из-за превышения скорости TX-OK – пакеты, переданные без ошибок TX-ERR – пакеты, переданные с ошибками TX-DRP – пакеты, потерянные при передачи TX-OVR – пакеты, которые не смогли передать Flg – характеристики интерфейса: B – принимает широковещательные пакеты, L – закольцовывающий интерфейс, M – изменяется динамически, R – интерфейс работает, U – интерфейс активизирован Количество ошибок должно составлять менее 1% от числа пакетов. Если частота появления ошибок высока, нужно сравнить эти показатели на нескольких соседних компьютерах. Большое число ошибок на одном компьютере свидетельствует о наличии проблемы в его интерфейсе или соединении, тогда как высокая частота ошибок, возникающих на всех компьютерах, в большинстве случаев обусловлена наличием проблемы в среде передачи. Работу сетевого интерфейса также можно контролировать в режиме реального времени. Для этого применяют команду #netstat –i t , где t – время в секундах, через которое будет выводится новая информация об интерфейсах. Непрерывный режим работы команды #netstat особенно эффективен при выслеживании источника ошибок. Т.к. мы можем отследить когда теряются пакеты. Команда #netstat -i может сообщить о существовании проблем, но она не скажет, какова причина ошибок. Наблюдение за сетью при различных уровнях загруженности позволит получить гораздо более полное представление о том, что происходит. Аналогов в windows-системах нет. 19 Получение статистических данных о различных сетевых протоколах Команда #netstat -s выдает содержимое всевозможных счетчиков, используемых в сетевых программах. Информация разбивается на разделы в соответствии с протоколами: IP, ICMP, TCP и UDP. Выполним #netstat –s и проанализируем полученную статистику Рис.23. Результат команды #netstat –s Основное замечание – 2 пакета было отброшено, потому что не был найден маршрут. Рис.24. Результат команды #netstat –s. Разделы ICMP Отметим, что количество запросов совпадает с количеством ответов, но не наоборот. Причем в статистике отмечено кол-во сообщений, означающих, что назначение не достижимо. Рис.25. Результат команды #netstat –s. Раздел TCP В разделе TCP указано установленное соединение, а также количество открытых соединений. Как только соединение, открытое ранее(по ssh) закроется, в этом разделе это будут отображено. 20 Результат команды в системе Windows аналогичен результату команды в linux. Однако, в linux, результат включает обобщающую статистику по протоколам, чего нет в Windows. Рис.26. Результат команды netstat –s. Раздел IPv4 Рис.27. Результат команды netstat –s. Раздел ICMPv4 Изучение таблицы маршрутизации Команда #netstat -r отображает таблицу маршрутизации ядра. Рис.28. Результат команды #netstat –r В колонке Flags отображаются флаги, характеризующие маршрут: U (up) — активный, G (gateway) — шлюз, H (host) — узловой (связан с конкретным адресом, а не сетью). Флаг Dобозначает маршрут, полученный в результате переадресации по протоколу ICMP. Флаги G и H вместе обозначают маршрут к компьютеру, проходящий через промежуточный шлюз. Остальные поля содержат статистические данные о маршруте: текущее число TCP-соединений по этому маршруту, количество отправленных пакетов и имя используемого интерфейса. Точный вид представленных данных зависит от конкретной операционной системы. MSS (Maximum Segment Size) – определяет максимальный размер пакета для этого маршрута Window – задает максимальное количество данных, которое система примет в одном пакете с удаленного компьютера irtt (initial round trip time) – задает значение, которое используется при установке подключения; для большинства сетей подходит значение по умолчанию, но для некоторых медленных сетей (особенно ряд типов пакетного радио) время слишком короткое, что вызывает ненужные повторы Iface – показывает, к какому сетевому интерфейсу относится маршрут 21 Приведенный вариант команды #netstat полезен для проверки правильности таблицы маршрутизации. Особенно важно убедиться в наличии и корректности стандартного маршрута. Иногда он обозначается в виде адреса со всеми нулями (0.0.0.0), иногда — словом default. В windows-системах результат команды содержит меньше вспомогательных столбцов(например, flags,mss). Но присутствует список всех интерфейсов отдельно. Рис.29. Результат команды netstat –r Изучить работу протоколов ARP, RARP, BOOTP. ARP – протокол преобразования адресов – выполняет преобразование логических сетевых адресов в аппаратные MAC-адреса. Ядро Linux содержит таблицу ARP, в которой находятся IPадреса и соответствующие им MAC-адреса. Эта таблица помогает обеспечить более быстрый доступ к машинам, с которыми мы постоянно работаем (кэшируются MAC-адреса этих машин). Данные добавляются в таблицу динамически, однако можно сделать таблицу статической и внести данные самостоятельно. Информация, пересылаемая от одного компьютера другому по сети, содержит в себе физический адрес отправителя, IP-адрес отправителя, физический адрес получателя и IP-адрес получателя. ARP-протокол обеспечивает связь между этими двумя адресами. Существует четыре типа ARP-сообщений: ARP-запрос (ARP request), ARP-ответ (ARP reply), RARP-запрос (RARP-request) RARP-ответ (RARP-reply). Принцип действия: Локальный хост при помощи ARP-запроса запрашивает физический адрес хостаполучателя. Ответ (физический адрес хоста-получателя) приходит в виде ARP-ответа. 22 Хост-получатель, вместе с ответом, шлёт также RARP-запрос, адресованный отправителю, для того, чтобы проверить его IP-адрес. После проверки IP-адреса отправителя начинается передача пакетов данных. Протокол RARP (Обратный протокол преобразования адресов) - протокол третьего (сетевого) уровня модели OSI, выполняет обратное отображение адресов, то есть преобразует аппаратный адрес в IP-адрес. Протокол применяется во время загрузки узла, когда он посылает групповое сообщение-запрос со своим физическим адресом. Сервер принимает это сообщение и просматривает свои таблицы (либо перенаправляет запрос куда-либо ещё) в поисках соответствующего физическому, IPадреса. После обнаружения найденный адрес отсылается обратно на запросивший его узел. Другие станции также могут «слышать» этот диалог и локально сохранить эту информацию в своих ARP-таблицах. RARP позволяет разделять IP-адреса между не часто используемыми хост-узлами. После использования каким либо узлом IP-адреса он может быть освобождён и выдан другому узлу.RARP является дополнением к ARP, и описан в RFC 903. Протокол BOOTP - сетевой протокол, используемый для автоматического получения клиентом IP-адреса. Это обычно происходит во время загрузки компьютера. BOOTP позволяет бездисковым рабочим станциям получать IP-адрес прежде, чем будет загружена полноценная операционная система. Исторически это использовалось для Unix-подобных бездисковых станций, которые в том числе могли получать информацию о местоположении загрузочного диска посредством этого протокола. А также большими корпорациями для установки предварительно настроенного программного обеспечения на новоприобретённые компьютеры. На BOOTP основан DHCP (Dynamic Host Configuration Protocol). Для работы с таблицей ARP предназначена утилита arp. Используем её, чтобы вывести кэш-таблицу протокола arp. Так можно найти MAC-адреса всех сетевых карт всех компьютеров в подсети(эксперимент проводится в аудитории). Изначально arp-таблица пуста, чтобы она заполнилась динамическими записями достаточно обратиться к узлам сети. Это можно сделать командой #ping. Выведем кэш-таблицу arp для первой сети: [root@5426-3]# arp Address HWtype 192.168.15.1 ether 5426-3 ether 5426-1 ether 5426-4 ether HWaddress F8:66:F2:1D:T9:20 00:21:85:18:08:BD 00:21:85:18:45:3A 00:21:85:18:32:8F Flags C C C C Mask Iface eth1 eth1 eth1 eth1 Flags C C C C C C Mask Iface eth1 eth1 eth1 eth1 eth2 eth1 Кэш-таблица arp для второй сети: [root@5426-7]# arp Address HWtype 192.168.15.1 ether 5426-6 ether 5426-8 ether 5426-5 ether 5426-4 ether 5426-9 ether HWaddress F8:66:F2:1D:T9:20 00:21:85:18:06:EA 00:21:85:18:07:AC 00:21:85:18:54:5С 00:21:85:18:59:3Е 00:21:85:18:58:8F Можно редактировать кэш ARP, явно добавляя в него записи (вручную или из файла) и удаляя их. Такие записи называются статическими. Для примера добавим статическую запись в кэш-таблицу arp. Выполним #arp –s 192.168.26.33 00:21:16:ED:15:AF, затем просмотрим таблицу. Рис.30.Добавление статической записи 23 Запись была добавлена с флагами C - строка заполнена и M - постоянное значение. В Windows –системе также имеется аналогичная команда. Arp с параметром –a выведет всю arp-таблицу для каждого интерфейса. Выполним такую команду: Рис.31. Вывод команды arp -a Вывод отобразит статические и динамические адреса узлов и их физические адреса. Как и рассмотренные ранее windows-команды она имеет меньший объем выводимый информации. Протокол ARP является абсолютно незащищённым. На использовании недостатков протокола ARP основан ARP-spoofing (ARP-poisoning) — техника сетевой атаки, позволяющая перехватывать трафик между узлами. Подробнее Существует несколько программ предназначенных для борьбы с ARP-spoofing и управления ARP таблицами. Демон arpwatch создает базу соответствия между IP и MAC-адресами, и при обнаружении аномалий, посылает сообщение в системный журнал и по электронной почте администратору системы. В файловой системе /proc/net/ найти текущую информацию о сетевой подсистеме ядра. /proc/net Разные псевдо−файлы, содержащие информацию по какой−либо части сетевой подсистемы. /proc/net/arp Файл содержит ARP таблицы ядра, которая используется для определения адресов. Она покажет как полученные динамически, так и заданные явно записи ARP. Рис.32. Содержимое /proc/net/arp Здесь "IP adress" это адрес машины в нотации IPv4, "HW type" это тип аппаратного обеспечения для этого адреса согласно RFC 826. Flags — это внутренние флаги структуры ARP, а "HW address" — это адрес канального уровня для IP−адреса, если он известен. /proc/net/rarp Данный файл использует тот же формат, что и файл arp и содержит текущую обратную базу данных адресов ARP, используемую при работе служб обратного поиска адресов rarp. Если поддержки RARP нет в ядре, то этот файл не существует. /proc/net/dev 24 Содержит информацию о состоянии сетевых устройств. Она представляет собой количество принятых и отправленных пакетов, количество ошибок и коллизий и другую базовую статистику. Эта информация используется программой ifconfig для вывода отчёта о состоянии устройства. Рис.33. Содержимое /proc/net/dev /proc/net/raw Содержит дамп таблицы беспротокольных (RAW) сокетов. Большая часть этой информации не используется ни для чего, кроме отладки. Значение «s»" — это хешируемый слот ядра для сокета, «local_address» — это пара локальный адрес, номер протокола. «St» — это внутреннее состояние сокета. «tx_queue» и «rx_queue» — это исходящая и входящая очереди данных в том, виде в каком они используются в памяти ядра. Поля «tr», «tm−>when» и «rexmits» не используются в RAW. Поле «uid» содержит эффективный UID создателя сокета. /proc/net/snmp Этот файл содержит ASCII данные, необходимые SNMP−агенту для баз управляющей информации IP, ICMP, TCP и UDP. /proc/net/tcp Содержит дамп таблицы TCP−сокетов. Большая часть этой информации не используется ни для чего, кроме отладки. Значение "sl" — это хешируемый слот ядра для сокета, "local_address" — это пара локальный адрес и номер порта. "rem_address" — это пара удалённого локального адреса и номера порта. "St" — это внутреннее состояние сокета. "tx_queue" и "rx_queue" — это исходящая и входящая очереди данных в том, виде в каком они используются в памяти ядра. Поля "tr", "tm−>when" и "rexmits" содержат внутреннюю информацию ядра о состоянии сокета и полезны только для отладки. Поле "uid" содержит эффективный UID создателя сокета. /proc/net/udp Содержит дамп таблицы UDP−сокетов. Большая часть этой информации не используется ни для чего, кроме отладки. Значение "sl" — это хешируемый слот ядра для сокета, "local_address" — это пара локальный адрес и номер порта. "rem_address" — это пара удалённого локального адреса и номера порта. "St" — это внутреннее состояние сокета. "tx_queue" и "rx_queue" — это исходящая и входящая очереди данных в том, виде в каком они используются в памяти ядра. Поля "tr", "tm−>when" и "rexmits" не используются в UDP. Поле "uid" содержит эффективный UID создателя сокета. /proc/net/unix Показывает список доменных сокетов UNIX, присутствующих в системе, а также их состояния. Рис.34. Содержимое /proc/net/unix 25 Здесь «Num» — это номер слота в таблице ядра, «RefCount» — количество пользователей данного сокета, «Protocol» — в настоящий момент всегда 0, «Flags» — представляет внутренние флаги ядра, содержащие состояние сокета. «Type» в настоящий момент всегда равен "1" (датаграммы доменных сокетов UNIX ядром пока не поддерживаются). «St» — это внутреннее состояние сокета, а «Path» — это путь привязки (если он есть) данного сокета. 26