Пакеты arp не проходят через маршрутизаторы
Одна из важнейших подсистем, отвечающая за связь любого сервера с внешним миром — сетевая. Через сетевые интерфейсы поступают запросы от удаленных систем и через эти же интерфейсы направляются ответы, что позволяет налаживать коммуникацию и предоставлять/получать сервисы. В связи с этим особенно важно уметь производить диагностику и мониторинг сети хотя бы на базовом уровне, чтобы выявлять проблемы и вносить корректировки в конфигурацию в случае необходимости.
Для операционных систем семейства Linux написано множество утилит, помогающих в диагностике и мониторинге. Познакомимся с наиболее часто используемыми из них.
Диагностика сетевой связности (ping, arp, traceroute)
В данной статье мы будем опираться на использование протокола IP версии 4. Согласно стандартам, определяющим работу этого протокола, каждое устройство, подключенное к сети, должно иметь как минимум IP-адрес и маску подсети — параметры, которые позволяют уникально идентифицировать устройство в пределах определенной сети. В такой конфигурации устройство может обмениваться сетевыми пакетами с другими устройствами в пределах той же самой логической сети. Если к этому набору параметров добавить адрес шлюза по умолчанию — наш сервер сможет связываться с хостами, находящимися за пределами локального адресного пространства.
В случае каких-либо сетевых проблем в первую очередь проверяем, не сбились ли настройки сетевого интерфейса. Например, команды ip addr или ifconfig выведут IP-адрес и маску сети:
В выводе команды виден перечень сетевых интерфейсов, распознанных операционной системой. Интерфейс lo — это псевдоинтерфейс (loopback). Он не используется в реальных взаимодействиях с удаленными хостами, а вот интерфейс с именем ens192 — то, что нам нужно (именование сетевых интерфейсов различается в разных ветках и версиях ОС Linux). IP-адрес и маска сети, назначенные этому интерфейсу, указаны в поле inet — /24 после адреса обозначают 24-битную маску 255.255.255.0.
Теперь проверим, указан ли шлюз по умолчанию. Команды ip route или route покажут имеющиеся маршруты:
В таблице маршрутизации мы видим, что имеется маршрут по умолчанию (обозначается либо ключевым словом default, либо адресом 0.0.0.0). Все пакеты, предназначенные для внешних сетей, должны направляться на указанный в маршруте адрес через обозначенный сетевой интерфейс.
Синтаксис команды ping IP/имя опции:
Скриншот №3. Синтаксис команды
В данном случае видим, что на оба сетевых пакета, отправленных на адрес нашего шлюза по умолчанию, получены ответы, потерь нет. Это значит, что на уровне локальной сети со связностью все в порядке. Помимо количества полученных/потерянных сетевых пакетов мы можем увидеть время, которое было затрачено на прохождение запроса и ответа – параметр RTT (Round Trip Time). Этот параметр может быть очень важен при диагностике проблем, связанных с нестабильностью связи и скоростью соединения.
Часто используемые параметры:
- ping –c количество — указать количество пакетов, которое будет отправлено адресату (по умолчанию пакеты отправляются до тех пор, пока пользователь не прервет выполнение команды. Этот режим можно использовать, чтобы проверить стабильность сетевого соединения. Если параметр RTT будет сильно изменяться в ходе проверки, значит где-то на протяжении маршрута есть проблема);
- ping –s количество — указать размер пакета в байтах. По умолчанию проверка производится малыми пакетами. Чтобы проверить работу сетевых устройств с пакетами большего размера, можно использовать этот параметр;
- ping –I интерфейс — указать сетевой интерфейс, с которого будет отправлен запрос (актуально при наличии нескольких сетевых интерфейсов и необходимости проверить прохождение пакетов по конкретному сетевому маршруту).
В случае, если при использовании команды ping пакеты от шлюза (или другого хоста, находящегося в одной локальной сети с сервером-отправителем) в ответ не приходят, стоит проверить сетевую связность на уровне Ethernet. Здесь для коммуникации между устройствами используются так называемые MAC-адреса сетевых интерфейсов. За разрешение Ethernet-адресов отвечает протокол ARP (Address Resolution Protocol) и с помощью одноименной утилиты мы можем проверить корректность работы на этом уровне. Запустим команду arp –n и проверим результат:
Команда выведет список IP-адресов (так как был использован аргумент –n), и соответствующие им MAC-адреса хостов, находящиеся в одной сети с нашим сервером. Если в этом списке есть IP, который мы пытаемся пинговать, и соответствующий ему MAC, значит сеть работает и, возможно, ICMP-пакеты, которые использует команда ping, просто блокируются файрволом (либо со стороны отправителя, либо со стороны получателя). Подробнее об управлении правилами файрвола рассказано здесь и здесь.
Часто используемые параметры:
- arp –n — вывод содержимого локального arp-кэша в числовом формате. Без этой опции будет предпринята попытка определить символические имена хостов;
- arp –d адрес — удаление указанного адреса из кэша. Это может быть полезно для проверки корректности разрешения адреса. Чтобы убедиться, что в настоящий момент времени адрес разрешается корректно, можно удалить его из кэша и снова запустить ping. Если все работает правильно, адрес снова появится в кэше.
Если все предыдущие шаги завершены корректно, проверяем работу маршрутизатора — запускаем ping до сервера за пределами нашей сети, например, 8.8.8.8 (DNS-сервис от Google). Если все работает корректно, получаем результат:
Первым маршрутизатором на пути пакета должен быть наш локальный шлюз по умолчанию. Если дальше него пакет не уходит, возможно проблема в конфигурации маршрутизатора и нужно разбираться с ним. Если пакеты теряются на дальнейших шагах, возможно, есть проблема в промежуточной сети. А, возможно, промежуточные маршрутизаторы не отсылают ответные пакеты. В этом случае можно переключиться на использование другого протокола в traceroute.
Часто используемые опции:
- traceroute –n — вывод результата в числовом формате вместо символических имен промежуточных узлов;
- traceroute –I — использование ICMP-протокола при отслеживании маршрута. По умолчанию используются UDP-датаграммы;
- traceroute –s адрес— указать адрес источника для исходящего сетевого пакета;
- traceroute –i интерфейс— указать сетевой интерфейс, с которого будут отправляться пакеты.
Диагностика разрешения имен (nslookup, dig)
Разобравшись с сетевой связностью и маршрутизацией приходим к следующему этапу — разрешение доменных имен. В большинстве случаев в работе с удаленными сервисами мы не используем IP-адреса, а указываем доменные имена удаленных ресурсов. За перевод символических имен в IP-адреса отвечает служба DNS — это сеть серверов, которые содержат актуальную информацию о соответствии имен и IP в пределах доверенных им доменных зон.
Способы выяснения какой DNS-сервер использует наш сервер различаются в зависимости от используемой версии и дистрибутива ОС Linux. Например, если ОС используется Network Manager для управления сетевыми интерфейсами (CentOS, RedHat и др.), может помочь вывод команды nmcli:
В настройках сетевого интерфейса, в разделе DNS configuration, мы увидим IP-адрес сервера. В Ubuntu 18.04 и выше, использующих Netplan, используем команду systemd-resolve --status:
Используемый сервер также будет указан в настройках интерфейса, в разделе DNS Servers. В более старых версиях Ubuntu потребуется проверить содержимое файлов /etc/resolve.conf и /etc/network/interfaces. Если сервер не указан, воспользуйтесь статьей для ОС Ubuntu 18.04 или CentOS, чтобы скорректировать настройки.
Проверить работу сервиса разрешения имен нам помогут утилиты nslookup или dig. Функционально они почти идентичны: G-вывод утилиты dig содержит больше диагностической информации и гибко регулируется, но это далеко не всегда нужно. Поэтому используйте ту утилиту, которая удобна в конкретной ситуации. Если эти команды недоступны, потребуется доставить пакеты на CentOS/RedHat:
yum install bind-utils
sudo apt install dnsutils
После успешной установки сделаем тестовые запросы:
Аналогичный запрос утилитой nslookup выдает более компактный вывод, но вся нужная сейчас информация в нем присутствует.
Скриншот №11. Отправка тестового запроса 1
Скриншот №12. Отправка тестового запроса 2
Если имена разрешаются публичным DNS-сервером корректно, а установленным по умолчанию в ОС нет, вероятно, есть проблема в работе этого DNS-сервера. Временным решением данной проблемы может быть использование публичного DNS-сервера в качестве сервера для разрешения имен в операционной системе. В том случае, если разрешение имен не работает ни через локальный, ни через публичный DNS сервер — стоит проверить не блокируют ли правила файрвола отправку на удаленный порт 53 TCP/UDP пакетов (именно на этом порту DNS-серверы принимают запросы).
Часто используемые параметры:
Как обычно, полный набор опций и параметров для указанных утилит можно найти во встроенной справке операционной системы, используя команду man.
p, blockquote 1,0,0,0,0 -->
p, blockquote 2,0,0,0,0 -->
Но в реальности данные передаются с помощью какой-нибудь технологии канального уровня, например Ethernet. Коммутаторы Ethernet ничего не знают об IP-адресах и для передачи данных используют MAC-адреса. Следовательно, необходимо средство, которое позволяет по IP-адресу компьютера определить его МАК-адрес.
p, blockquote 3,0,0,0,0 -->
Таблица соответствия ARP
Самое простое средство это таблица соответствия. Мы создаем таблицу, в которой пишем IP-адрес и соответствующий ему MAC-адрес.
p, blockquote 4,0,0,0,0 -->
p, blockquote 5,0,0,0,0 -->
Такое средство действительно используется на практике, например в Linux такая табличка хранится в файле /etc/ethers. Однако в крупной сети такой подход не работает.
p, blockquote 6,0,0,0,0 -->
ARP-запрос
Протокол ARP позволяет автоматически определить МАК-адрес компьютера по его IP-адресу. Протокол работает в режиме запрос-ответ.
p, blockquote 7,0,1,0,0 -->
Компьютер, который хочет узнать МАК-адрес по известному IP-адресу, направляет ARP запрос “У кого IP 192.168.10.43?” Запрос отправляется на широковещательный МАК-адрес (FF:FF:FF:FF:FF:FF).
p, blockquote 8,0,0,0,0 -->
p, blockquote 9,0,0,0,0 -->
И этот запрос получают все компьютеры в сети. Тот компьютер, который узнал в запросе свой IP-адрес подготавливает и отправляет ARP ответ. В ответ включается IP-адрес компьютера (IP:192.168.10.43) и его МАК-адрес (MAC: 54:BE:F7:88:15:47).
p, blockquote 10,0,0,0,0 -->
p, blockquote 11,0,0,0,0 -->
Отправитель ARP запроса получает ответ, извлекает из него МАК-адрес и использует его для передачи данных по технологии канального уровня.
p, blockquote 12,0,0,0,0 -->
p, blockquote 13,0,0,0,0 -->
Формат ARP-запроса
ARP разрабатывался, как протокол общего назначения с возможностью применять его не только в Ethernet и не только для IP-адресов. Поэтому в начале ARP пакета идет служебная информация, которая позволяет определить с каким типом сетевого оборудования и с каким протоколом сетевого уровня мы работаем.
p, blockquote 14,0,0,0,0 -->
Формат ARP-ответа
Формат ARP ответа точно такой же, только в поле “операция” стоит значение 2 и адрес, который мы ищем находится в поле локальный адрес отправителя.
p, blockquote 16,0,0,0,0 -->
p, blockquote 17,0,0,0,0 -->
Место в модели OSI
В модели взаимодействия открытых систем OSI протокол ARP находится между канальным и сетевым уровнем. Пакеты ARP вкладываются напрямую в кадры Ethernet без IP.
p, blockquote 18,0,0,0,0 -->
p, blockquote 19,0,0,0,0 -->
Из-за того, что ARP находится ниже сетевого уровня, пакеты ARP не проходят через маршрутизаторы. Таким образом, с помощью ARP можно узнать только МАК-адреса компьютеров, которые находятся в одной подсети, а адреса компьютеров, которые находятся в другой подсети отделенные маршрутизатором узнать нельзя.
p, blockquote 20,0,0,0,0 -->
p, blockquote 21,0,0,0,0 -->
p, blockquote 22,0,0,0,0 -->
p, blockquote 23,0,0,1,0 -->
ARP-таблица
После того, как МАК-адрес получателя найден, он кэшируется на компьютеры отправителя в ARP-таблице для того, чтобы не запрашивать МАК-адрес каждый раз по протоколу ARP.
p, blockquote 24,0,0,0,0 -->
p, blockquote 25,0,0,0,0 -->
p, blockquote 26,0,0,0,0 -->
Посмотреть ARP таблицу на компьютере можно с помощью команды arp -a.
Оптимизация ARP
ARP запрос отправляется на широковещательный адрес и его получают все компьютеры в сети, кроме ip-адреса для которого необходимо получить мак-адрес в ARP запрос. Отправитель также включает свой ip-адрес и свой мак-адрес, эти данные могут быть записаны всеми компьютерами в сети в ARP-таблицу, чтобы использовать когда они понадобятся.
p, blockquote 28,0,0,0,0 -->
Добровольный ARP-запрос (Gratuitous ARP)
Это запрос по ARP собственного ip-адреса, он используется для двух целей. Первая цель, быстрое оповещение всех компьютеров в сети от том, что у компьютера появился новый ip-адрес.
p, blockquote 29,0,0,0,0 -->
Другая цель это проверка использования данного ip-адреса другим компьютером. Если на добровольный ARP запрос пришел ответ, это значит, что какой-то компьютер в сети уже использует этот ip-адрес и назначать его компьютеру отправителя нельзя.
p, blockquote 30,0,0,0,0 -->
Выводы по протоколу ARP
Address Resolution Protocol (ARP) – это стандартный сетевой протокол поиска MAC-адреса узла, когда известен только его IP-адрес. В случае подмены адреса атака ARP негативно влияет на всю сеть при её возникновении.
Существует два возможных вида атак ARP, одни направлены на маршрутизаторы, а другие – на компьютеры. Оба типа атак могут возникнуть одновременно. В любом случае, если в сети присутствует подмена ARP, данные между компьютерами и маршрутизаторами будут отсылаться к некорректному адресату (на неправильный MAC-адрес) и сеть не будет нормально работать.
Поскольку существует два вида подмены, нужно предупредить их возникновение как на маршрутизаторе, так и на компьютере.
Что сделать, чтобы избежать подмены ARP ?
Когда вы активируете функцию предупреждения подмены ARP (IP Address & MAC Address binding) на маршрутизаторе TP-Link, необходимо назначить вашему компьютеру статический IP-адрес. В противном случае возможна некорректная работа функции после выполнения привязки МАС и IP адресов.
Вы можете назначить статический IP адрес вручную. Чтобы узнать, как это сделать, прочтите раздел « Как настроить свойства TCP / IP для подключения к маршрутизатору TP - LINK ».
Отключите DHCP сервер на маршрутизаторе. Для этого вам понадобится войти в web -интерфейс управления.
(1) Нажмите DHCP - DHCP Settings ( DHCP - Настройки DHCP ) в левой части страницы.
(2) Укажите Disable (Отключить) возле поля DHCP Server ( DHCP Сервер).
(3) Нажмите Save (Сохранить), чтобы сохранить настройки.
Как настроить функцию предупреждения подмены ARP на маршрутизаторе?
Откройте браузер и в адресной строке введите сетевой IP адрес маршрутизатора, по умолчанию это 192.168.1.1. Нажмите Enter (Ввод).
Введите логин и пароль для входа в web -интерфейс. По умолчанию и логин, и пароль admin .
Нажмите IP & MAC Binding -> Binding setting (Привязка IP и MAC -> Настройки привязки) в левой части страницы.
Выберите Enable ARP Binding (Активация привязки ARP ), затем нажмите Save (Сохранить).
Нажмите ARP List (Список ARP ) в левой части страницы, и вы увидите таблицу ARP , которую запоминает маршрутизатор.
Если данные таблицы ARP правильные, пожалуйста, нажмите Load All (Загрузить все) и Bind All (Выполнить привязку всех), после чего все IP и MAC-адреса ваших компьютеров, перечисленные в списке ARP, будут связаны.
В противном случае введите адреса вручную.
(1) Нажмите Add New (Добавить), чтобы ввести адреса для привязки.
(2) Активируйте опцию Bind (Привязка) и введите МАС и IP адрес вашего компьютера.
Вы должны знать МАС адреса компьютеров, для которых хотите открыть доступ в Интернет. Вы можете узнать МАС адрес с помощью командной строки.
(1)Нажмите Start -> Run (Пуск -> Выполнить), введите cmd и нажмите Enter (Ввод).
(2) Введите ipconfig / all в диалоговом окне, нажмите Enter (Ввод), и вы увидите всю адресную информацию компьютера.
Нажмите Save (Сохранить) для сохранения настроек.
Как настроить функцию предупреждения подмены ARP на компьютере?
Для начала вам нужно определить MAC-адрес маршрутизатора, который можно найти на странице состояния LAN web -интерфейса управления.
Программа ARP является встроенной командой операционных систем от Microsoft, поэтому ее можно использовать в командной строке.
Нажмите Start -> Run (Пуск -> Выполнить), введите cmd и нажмите Enter (Ввод).
Введите arp–s 192.168.1.1 00-19-e0-fa-5b-2b в диалоговом окне, нажмите Enter (Ввод). После этого введите arp–a . Так выполняется проверка, что тип добавленных данных – Static (статический).
Теперь, после добавления записи arp привязки на компьютере, информация, отправляемая на маршрутизатор, не будет отправлена в ином направлении. Статическая привязка ARP будет существовать до перезагрузки компьютера. После перезагрузки её приходится задавать заново.
Как установить автоматическое выполнение привязки без повторения всей вышеописанной операции заново?
Нужно создать командный файл с расширением .bat, например, static_arp.bat, и отредактировать его. Впишите в файл команду ARP для связывания IP и MAC-адреса маршрутизатора, затем сохраните его.
Нажмите Start -> All Programs (Пуск -> Все программы), дважды кликните на Startup (Автоматический запуск) и скопируйте командный файл static_arp.bat в открывшуюся папку.
После этого команда ARP будет выполняться автоматически при каждом запуске компьютера.
Узнайте IP-адрес другой стороны и определите MAC-адрес другой стороны. (Узнать чужой IP и чужой MAC-адрес)
Широковещательные запросы не могут покинуть локальную сеть, поэтому протокол ARP может существовать только во внутренней сети, но не через маршрутизатор.
2. Уязвимость протокола ARP
3. ARP атака
4. ARP-спуфинг
5. Принцип протокола ARP
6. Принцип анализа ARP
7. Анализ ARP (тот же сегмент сети и другой сегмент сети):
Когда компьютер связывается с другими хостами, сначала определите, находится ли он в том же сегменте сети, что и он сам
Если находится в том же сегменте сети, отправьте ARP-трансляцию в поисках MAC-адрес IP-адреса назначения
Если не в том же сегменте сети, отправьте ARP-трансляцию для поиска MAC-адрес шлюза (Предпосылка заключается в том, что компьютер оснащен шлюзом). (Если вы хотите выйти в Интернет, напрямую найдите целевой MAC-адрес шлюза)
8. ARP кеш таблица
Только соответствие между IP и MAC-адресами этого сегмента сети.
имеет соответствие между IP-адресом шлюза и MAC-адресом шлюза с внешней сетью. Другие сегменты сети не появятся.
Для ПК IP-адрес других сегментов сети не может отображаться в его таблице кэша ARP. Если вы хотите получить доступ к внешней сети, передайте его на шлюз
Кэш ARP исчезает через 60 секунд обучения.
Для каждого маршрутизатора имеется столько таблиц кэша ARP, сколько компьютеров в локальной сети.
Просмотр таблицы кеша ARP на ПК: arp -a Очистить таблицу кеша ARP: arp -d
Если интерфейс уровня 3 может быть оснащен IP-адресом, он также имеет MAC-адрес. Коммутатор не может быть оборудован IP и не имеет MAC-адреса.
MAC-адрес ограничен ПК и маршрутизатором
Подробный принцип работы роутера
Заголовок инкапсулированного кадра, MAC-адрес источника - это адрес собственного интерфейса
Когда маршрутизатор имеет только функцию маршрутизации:
Когда кадр проходит через маршрутизатор, заголовок и конец кадра изменятся, TTL изменится, а исходный IP-адрес кадра данных не изменится
Таблица ARP-кэша ПК не будет записывать свой собственный MAC-адрес
ARP-атаки и ARP-спуфинг могут быть использованы:
Включите службу Telnet (щелкните правой кнопкой мыши компьютер-> Управление-> Служба-> Telnet)
Проверьте открытый порт: netstat -an
Читайте также: