Работа с сетью в командной строке windows (cmd)

Поиск хостов по большому количеству IP

Здесь на помощь нам приходит HostHunter, эта программа на входе получает файл со списком IP и ищет имя хоста для каждого из них. Эта программа использует Hacker Target API и Bing.com.

Для установки программы HostHunter в Kali Linux:

git clone https://github.com/SpiderLabs/HostHunter
cd HostHunter
sudo pip3 install -r requirements.txt
sudo pip3 install selenium

При установке таким образом для запуска нужно будет переходить в папку с программой:

cd HostHunter

И запускать так:

python3 hosthunter.py -h

Для получения последующих обновлений программы:

cd HostHunter
git pull

Для установки HostHunter в BlackArch:

sudo pacman -S hosthunter

В BlackArch для запуска достаточно указать имя программы:

hosthunter -h

Программа работает только с файлами, содержащих список IP адресов. У меня список адресов сохранён в файле ip.txt, тогда для запуска программы нужно набрать:

hosthunter ip.txt

Программа начала работу, как можно увидеть, для каких-то IP имена хостов существуют, а некоторые IP просто не используются:

Программа по умолчанию сохраняет результаты в файл .csv (таблицы):

В файле результатов содержится информация только о тех IP, для которых найдены значения имени хоста. Как можно увидеть, в таблице предусмотрены поля «Domains»,»Operating System»,»OS Version»,»Notes», но на данный момент сбор этой информации ещё не реализован.

При повторном запуске, программа спросит:

vhosts.csv file already exists, would you like to overwrite it?
Answer with es or o : Y

То есть файл vhosts.csv с результатами уже существует, вы можете выбрать опцию перезаписать этот файл (Y) или остановить запуск (N).

Используя опцию -f TXT можно установить текстовый формат для сохранения полученных данных:

hosthunter -f TXT ip.txt

Обратите внимание, что при использовании опции -f TXT данные также сохраняются в файл vhosts.csv — меняется только формат (содержимое) файла — туда сохраняются найденные хосты без какой-либо дополнительной информации — по одному хосту на строку.

Кстати, используя опцию -o можно указать другое имя файла:

hosthunter -o hostnames_list.csv ip.txt

А с помощью опции -b можно подключить модуль Bing для дополнительного поиска:

hosthunter -b ip.txt

Пример использования опции -b:

Результатов чуть больше и иногда в них действительно появляются новые хосты, но иногда добавляются только ссылки на внутренние страницы.

При использовании этой опции дополнительные данные сохраняются в файл webapps.txt.

В качестве бета-функции в программу добавлена возможность собирать скриншоты, для включения этого модуля используйте опцию -sc:

hosthunter -sc ip.txt

Скриншоты сохраняются в папке ./screen_captures/. Пример собранных скриншотов:

Как можно увидеть, делается попытка снять скриншот с каждого IP адреса, независимо от того, удалось для него узнать имя хоста или нет. При этом для каждого IP делается попытка получить скриншот на портах 80, 443, 8080.

Если вы хотите извлечь только хосты из файла vhosts.csv, то для этого выполните команду:

awk -F '","' '{print $3}' vhosts.csv

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

awk -F '","' '{print $3}' vhosts.csv | tr "," "\n"

Если вам сильно нужно, то вы можете использовать HostHunter даже для поиска имени хоста одного единственного IP адрса:

echo '185.117.153.79' | hosthunter /dev/stdin

Этот фокус не сработает, если файл vhosts.csv уже присутствует.

Немного теории

Мы можем выделить три типа IP-адресов, с которыми вам придётся сталкиваться:

  • Внутренний адрес (IP-адрес компьютера);
  • Адрес в локальной сети;
  • Внешний IP доступный во всём интернете.

Внутренний IP-адрес нужен для того, чтобы программы могли взаимодействовать между собой в пределах этого компьютера, используя сетевые протоколы. Например, так браузер может получить доступ к локальному web-серверу или mysql-серверу. Внутренний IP довольно часто используется в системных утилитах, и узнать его очень просто — он всегда одинаковый — 127.0.0.1.

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

Технология NAT позволяет компьютеру подключиться к любому серверу в интернете и получить от него ответ, но инициировать подключение к такому компьютеру невозможно, поскольку фактически один IP принадлежит сотне компьютеров, и система просто не знает, к какому из них обращаются.

Ваша локальная сеть тоже работает по принципу NAT, и задача у неё похожая — защитить ваши домашние устройства от несанкционированного доступа, и позволить вам подключать к сети несколько устройств, например два ноутбука. Если бы не было NAT, вам бы пришлось покупать два отдельных интернет подключения для каждого из них.

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

Теперь, когда вы немного начали ориентироваться в вопросе, давайте рассмотрим способы узнать свой IP Linux.

Синтаксис

Рассмотрим синтаксис.

Основное написание утилиты используется в трех вариантах:

ip  
ip   
ip объект помощь

Объекты

Объектом называют устройство, с которым необходимо взаимодействовать или о котором нужно узнать информацию.

Рассмотрим некоторые важные объекты:

  • link или l — сетевое устройство;
  • address или addr — IP-адрес;
  • route или r — конфигурация таблицы маршрутизации;
  • tunnel или t — туннель.

При вводе имени объекта его можно сократить всего до одной буквы, напримире link можно сократить как «l». Если команда будет неоднозначной, применяется порядок как в алфавите.

Чтобы посмотреть справку по отдельному объекту необходимо ввести аргумент help или сокращенное имя «h».

ip OBJECT help

Опции

Опции представляют собой настройки, отражающиеся на работе утилиты. Их необязательно вводить.

Основные опции:

  • -v — выводит информацию о текущей версии;
  • -s — включение вывода статистики;
  • -f — выбор протокола;
  • -o — каждая новыя запись показывается с новой строки;
  • -r — выполнение резолвинга.

Шаги

Метод 1

Поиск частного IP-адреса

  1. 1

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

  2. 2

    Запустите терминал. Нажмите или дважды щелкните по значку терминала или просто нажмите Ctrl+Alt+T.

  3. 3

    Введите команду отображения частного IP-адреса. Введите ifconfig в окне терминала. Другие команды, которые можно использовать:

    • ip addr
    • ip a
  4. 4

    Нажмите ↵ Enter. Команда будет выполнена, а на экране отобразятся IP-адреса всех сетевых элементов, включая ваш компьютер.

  5. 5

    Найдите строку с IP-адресом компьютера. Обычно это строка с «wlo1» (или «wlan0»), а справа от нее есть тег «inet».

  6. 6

    Найдите частный IP-адрес (адрес IPv4).

    Адрес IPv6 можно найти рядом с тегом «inet6». Адрес IPv6 не так широко распространен, как адрес IPv4.

    Он находится справа от тега «inet». Это IP-адрес компьютера в текущей сети.

  7. 7

    Попробуйте ввести команду «hostname». В некоторых версиях Linux, таких как Ubuntu, узнать IP-адрес компьютера можно, если ввести команду hostname -I (это прописная буква «i», а не строчная буква «L») и нажать ↵ Enter.

Метод 2

Поиск публичного IP-адреса

  1. 1

    Уясните, когда пользоваться данным методом. Публичный IP-адрес — это адрес, который «видят» веб-сайты и онлайн-сервисы, когда вы открываете их на своем компьютере. Если вы хотите подключиться к своему компьютеру с другого компьютера, который находится в другой сети, вам понадобится публичный IP-адрес.

  2. 2

    Запустите терминал. Нажмите или дважды щелкните по значку терминала или просто нажмите Ctrl+Alt+T.

  3. 3

    Введите команду отображения публичного IP-адреса. Введите curl ifconfig.me в терминале. Эта команда получит публичный IP-адрес с веб-сайта.

  4. 4

    Нажмите ↵ Enter. Команда будет выполнена.

  5. 5

    Найдите публичный IP-адрес. IP-адрес, который отобразится под введенной командой, является публичным IP-адресом вашей сети.

Примеры

Теперь остается наглядно рассмотреть, каким образом можно применять ip в Линуксе.

Для первого примера, посмотрим справочную информацию по объекту link.

С помощью link можно взаимодействовать сетевыми интерфейсами и смотреть информацию о них. Команды:

  • show– показывает информацию о всех интерфейсах;
  • list up– показывает все интерфейсы, которые включены;
  • set eth0 up — включить eth0, вместо eth0 может быть любой другой интерфейс;
  • set eth1 down — выключить интерфейс под названием eth1.

Выведем на экран все сетевые интерфейсы.

Если нужно узнать информацию только об определенном интерфейсе, то пишем:

где eth0 — это название интерфейса.

Выключим eth0.

Включаем.

Посмотрим справку следующего объекта «address»

Команды:

  • show- вывести все IP-адреса и их интерфейсы;
  • l permanent — показывать только статические ip адреса;
  • l dynamic- выводить исключительно динамические ip адреса;
  • add — добавляет IP-адрес и маску;
  • delete — удаляет адрес.

Пример использования команды «show».

Наиболее часто используется команда, которая покажет информацию о всех сетевых интерфейсах, аналог параметра «show»..

или

Что вывести информацию только о протоколе 4 (IPv4) версии или 6 (IPv4) используются ключи -4 или -«6».

Динамические адреса:

Статические:

Назначим IP-адрес 192.168.10.1 с маской 255.255.255.0 интерфейсу eth0. Для этого будем использовать «add».

Посмотрим справку по route.

Основные параметры route:

  1. add — создать новый маршрут.
  2. show — вывести все маршруты.
  3. get 192.168.100.0/24 (адрес сети) — показать информацию о конкретной сети.

Как узнать локальный IP в Linux

Узнать локальный IP компьютера тоже не очень сложно. Для этого вам не нужны никакие сервисы, мы можем просто посмотреть информацию об интерфейсах.

Чтобы узнать свой IP Linux в локальной сети? выполните такую команду:

Здесь отображается довольно много информации о сетевых интерфейсах. Кроме IP, здесь можно увидеть MAC-адрес, маску сети и небольшую статистику по работе интерфейса. IP-адрес каждого интерфейса отображается после слов inet addr.

Теперь про интерфейсы: lo — это внутренний интерфейс с IP-адресом 127.0.0.1, eth0 — это проводной интерфейс, а wlan0 — интерфейс Wi-Fi. Как видите, для каждого из них установлены свои адреса.

Вы можете отфильтровать лишнюю информацию и вывести только IP-адреса:

Утилита ifconfig уже считается устаревшей и в некоторых дистрибутивах не используется. Вместо неё предлагается новый инструмент — ip. Вы можете выполнить аналогичные действия с помощью него:

Здесь IP-адрес отображается после слова inet. Вы знаете, как посмотреть IP-адрес Linux для компьютера в локальной сети, теперь рассмотрим внешний.

Как посмотреть текущие сетевые настройки в Linux?Наверх

Для просмотра текущих параметров сети и состояния сетевых интерфейсов в ОС Линукс существует команда:

# sudo ifconfig

eth0Link encap:Ethernet HWaddr 00:11:5b:91:25:3e
inet addr:192.168.1.18 Bcast:192.168.255.255 Mask:255.255.0.0
inet6 addr: fe80::211:5bff:fe91:253e/64 Диапазон:Ссылка
ВВЕРХ BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:648009 errors:0 dropped:0 overruns:0 frame:0
TX packets:1075413 errors:0 dropped:0 overruns:0 carrier:0
коллизии:0 txqueuelen:1000
RX bytes:70177943 (70.1 MB) TX bytes:1536487024 (1.5 GB)
Прервано:19 Base address:0xd000
lo Link encap:Локальная петля (Loopback)
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Диапазон:Узел
ВВЕРХ LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:106 errors:0 dropped:0 overruns:0 frame:0
TX packets:106 errors:0 dropped:0 overruns:0 carrier:0
коллизии:0 txqueuelen:0
RX bytes:13776 (13.7 KB) TX bytes:13776 (13.7 KB)

Для просмотра абсолютно всех сетевых интерфейсов запускаем команду с ключом -a:

# sudo ifconfig -a

Из приведенного примера видно, что на компьютере используется два сетевых интерфейса: eth0 и lo.

Интерфейс lo — это локальная петля, которая имеет IP-адрес 127.0.0.1 и предназначена для сетевого доступа к своему же компьютеру. Далее этот интерфейс рассматриваться не будет, так как для эффективной работы не требует дополнительной настройки.

Интерфейс eth0 — это Ethernet сетевая карта, которая имеет сетевые параметры: IP-адрес — 192.168.1.18, маску сети — 255.255.0.0 и MAC-адрес — 00:11:5b:91:25:3e. Значение RUNNING показывает, что в данный момент сетевой интерфейс eth0 работает.

Для просмотра типа соединения, скорости и поддерживаемых параметров сетевым интерфейсом eth0 набираем команду:

# sudo ethtool eth0
Supported ports:
Supported link modes:10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: YesSpeed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pg
Wake-on: d
Current message level: 0x000000c5 (197)
Link detected: yes

Из вывода видно, что сетевой интерфейс eth0 работает на скорости 100Мб/с с включенным полным дуплексом (Full Duplex). Полный дуплекс от полудуплекса (Half Duplex) отличается тем, что первый обеспечивает передачу данных в обе стороны одновременно, а второй осуществляет передачу входящих и исходящих данных поочередно.

Настройка статичного IP адреса в Network Manager в Kali Linux

В Linux статичный адрес в графическом окружении можно установить в настройках Network Manager. Для этого кликните на стрелочку в правом верхнем углу экрана, в появившемся меню кликните на «Подключение Проводное», а затем на «Параметры проводных соединений»:

Откроется новое окно, в нём кликните на иконку шестерёнки:

Откроется ещё одно окно, в котором перейдите на вкладку IPv4, там напротив «Адрес» найдите выпадающий список с записью «Автоматический (DHCP)»:

И выберите «Вручную», далее в поле «Адрес» введите желаемый статичный IP, он должен соответствовать вашей сети, например, если роутер (шлюз по умолчанию) имеет адрес 192.168.0.1, то выбранный адрес должен иметь вид 192.168.0.*, если роутер имеет адрес 192.168.1.1, то выбранный IP должен быть вида 192.168.1.* и т.д. Далее пропишите «Маску подсети», для большинства задач подойдёт 255.255.255.0, также пропишите «Шлюз», которым является IP роутера, пример:

При желании вы также можете установить настройки DNS сервера, но это не является обязательным.

Когда закончите, нажмите кнопку «Применить».

Кстати, чтобы узнать шлюз (IP адрес роутера) выполните команду:

ip r

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

default via 192.168.0.1 dev eth0 proto static metric 100
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.112 metric 100

После строки «default via» будет следовать IP роутера, в моём случае это 192.168.0.1.

Проверить свой текущий локальный IP можно командой:

ip a

В RHEL/CentOS/Fedora/Scientific Linux

В Fedora, RHEL и его клонах, таких как CentOS, Scientific Linux, конфигурация сетевой карты (кратко NIC) хранится в каталоге /etc/sysconfig/network-scripts/. Для выполнения следующих команд используйте пользователя root. Если же вы вошли в систему как обычный пользователь, просто используйте sudo перед каждой командой.

Сначала необходимо узнать имя сетевой карты. Для этого запустите:

# ip addr

Пример вывода

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
 link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe80:6319/64 scope link
 valid_lft forever preferred_lft forever

Обычно имя проводной сетевой карты начинается с буквы «е», а имя беспроводной карты начинается с буквы «w».

Как видно из вышеприведенного вывода, имя моей проводной сетевой карты enp0s3. Он может отличаться в вашем дистрибутиве, но обычно начинается с буквы «е».

Давайте настроим статический IP-адрес для этого сетевого адаптера.

Откройте файл конфигурации сетевой карты в любом редакторе:

# nano /etc/sysconfig/network-scripts/ifcfg-enp0s3

nano — текстовый редактор. Вы можете использовать любой текстовый редактор на ваш выбор, например, vi или gedit.

Добавьте IP-адрес, маску подсети, шлюз и DNS-сервер, как показано ниже.

TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="e9f9caef-cb9e-4a19-aace-767c6ee6f849"
ONBOOT="yes"
HWADDR="08:00:27:80:63:19"
IPADDR0="192.168.1.150"
PREFIX0="24"
GATEWAY0="192.168.1.1"
DNS1="192.168.1.1"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
  • BOOTPROTO = ”none” — эта строка показывает, что IP-адрес сетевой карты должен быть настроен вручную. Если вы установите значение «dhcp», то сетевая карта будет принимать IP-адрес от любого DHCP-сервера в сети;
  • IPADDR0 = ”192.168.1.150″ — в этой строке указывается IP-адрес сетевой карты. Здесь вы можете заметить число 0 (ноль) после IPADDR. Это означает, что эта карта имеет только один IP-адрес. Если вы хотите установить более одного IP-адреса (то есть виртуального IP-адреса, то вам нужно добавить строки обозначенные как IPADDR1, IPADDR2 и т.д.;
  • PREFIX0 = ”24″ — эта строка указывает маску подсети, т.е. 25.255.255.0. Здесь вы можете указать более одного PREFIX со строками PREFIX1, PREFIX2 и т.д., в соответствии с числом виртуальных IP-адресов;
  • GATEWAY0 = ”192.168.1.1″ — это адрес шлюза NIC;
  • DNS1 = ”192.168.1.1″ — адрес сервера имен.

После того, как вы настройки, сохраняем и закрываем файл. Перезапускаем сетевой сервис, чтобы изменения вступили в силу.

# systemctl restart network

Или перезагружаем систему.

Проверим правильность настройки сетевых интерфейсов:

# ip addr

Или можно проверить адрес конкретной сетевой карты, как показано ниже.

# ip a s enp0s3

Пример вывода последней команды

2: enp0s3:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
 link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe80:6319/64 scope link
 valid_lft forever preferred_lft forever

Кроме того, вы можете использовать команду nmtui для настройки IP-адреса.

Введите IP-адрес, маску сети, шлюз, DNS и т.д.

Нажмите OK, чтобы сохранить изменения, и перезапустите сетевую службу или перезагрузите систему, чтобы изменения вступили в силу.

Диагностика сети Linux

Существует большое количество инструментов диагностики сети в Linux, зачастую, они очень похожи на утилиты от Microsoft. Я рассмотрю 3 основные утилиты диагностики сети, без которых выявить неполадки будет проблематично.

Думаю, что данная утилита знакома чуть ли не каждому. Работа этой утилиты заключается в отправке т.н. пакетов ICMP удаленному серверу, который будет указан в параметрах команды, сервер возвращает отправленные команды, а ping подсчитывает время требуемое отправленному пакету, чтобы дойти до сервера и вернуться. Например:

# ping ya.ru
PING ya.ru (87.250.251.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=1 ttl=57 time=42.7 ms
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=2 ttl=57 time=43.2 ms
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=3 ttl=57 time=42.5 ms
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=4 ttl=57 time=42.5 ms
64 bytes from www.yandex.ru (87.250.251.3): icmp_seq=5 ttl=57 time=41.9 ms
^C
--- ya.ru ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4012ms
rtt min/avg/max/mdev = 41.922/42.588/43.255/0.500 ms

Как видно, из приведенного примера, ping выводит нам кучу полезной информации. Прежде всего, мы выяснили, что можем установить соединение с хостом ya.ru (иногда говорят, что «хост ya.ru нам доступен»). Во-вторых, мы видим, что DNS работает корректно, потому что «пингуемое» имя было корректно преобразовано в IP адрес (PING ya.ru (87.250.251.3)). Далее, в поле icmp_seq= указана нумерация отправляемых пакетов. Каждому отправляемому пакету последовательно присваивается номер и если в данной нумерации будут «провалы», то это нам расскажет о том, что соединение с «пингуемым» неустойчиво, а так же может означать, что сервер, которому шлют пакеты перегружен. По значению time= мы видим, сколько времени пакет путешествовал до 87.250.251.3 и обратно. Остановить работу утилиты ping можно клавишами Ctrl+C.

Так же, утилита ping интересна тем, что может позволить увидеть, где именно возникли неполадки. Допустим, утилита ping выводит сообщение network not reachable (сеть недоступна), либо другое аналогичное сообщение. Это, скорее всего, говорит о некорректной настройке вашей системы. В таком случае, можно послать пакеты по IP-адресу провайдера, чтобы понять, в каком месте возникает проблема (между локальным ПК или «дальше»). Если Вы подключены к интернету через маршрутизатор, то можно послать пакеты по его IP. Соответственно, если проблема проявиться уже на этом этапе, это говорит, о неправильном конфигурировании локальной системы, либо о повреждении кабеля, если маршрутизатор отзывается, а сервер провайдера нет, то проблема — в канале связи провайдера и т.д. Наконец, если неудачей завершилось преобразовании имени в IP, то можно проверить связь по IP, если ответы будут приходить корректно, то можно догадаться, что проблема в DNS.

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

traceroute

Простым языком, команда называется трассировка маршрута. Как можно понять из названия — данная утилита покажет по какому маршруту шли пакеты до хоста. Утилита traceroute несколько похожа на ping, но отображает больше интересной информации. Пример:

# traceroute ya.ru
traceroute to ya.ru (213.180.204.3), 30 hops max, 60 byte packets
 1  243-083-free.kubtelecom.ru (213.132.83.243)  6.408 ms  6.306 ms  6.193 ms
 2  065-064-free.kubtelecom.ru (213.132.64.65)  2.761 ms  5.787 ms  5.777 ms
 3  lgw.kubtelecom.ru (213.132.75.54)  5.713 ms  5.701 ms  5.636 ms
 4  KubTelecom-lgw.Krasnodar.gldn.net (194.186.6.177)  81.430 ms  81.581 ms  81.687 ms
 5  cat26.Moscow.gldn.net (194.186.10.118)  47.789 ms  47.888 ms  48.011 ms
 6  213.33.201.230 (213.33.201.230)  43.322 ms  41.783 ms  41.106 ms
 7  carmine-red-vlan602.yandex.net (87.250.242.206)  41.199 ms  42.578 ms  42.610 ms
 8  www.yandex.ru (213.180.204.3)  43.185 ms  42.126 ms  42.679 ms

Как видно, можно проследить маршрут от маршрутизатора провайдера 243-083-free.kubtelecom.ru (213.132.83.243) (Юг россии) до конечного хоста в www.yandex.ru (213.180.204.3)  в москве.

Структура айпи

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

Наиболее распространённое деление: на внешние и локальные IP. Внешний уникален во всём мировом Интернете и позволяет хозяину издали получать доступ к своему компьютеру при помощи интернет-соединения. Локальный, или внутренний адрес неуникален. Он идентифицирует компьютер только в домашней сети и позволяет получать доступ к интернету, но далеко не всем его возможностям.

Классический IP address легко узнать внешне: обычно это четыре числовых октета, разделённых точкой. Каждый октет представляет собой 1-байтовое десятичное число от 0 до 255 для простоты восприятия. А машина видит октет адреса как 8 битов информации, выраженной в двоичных числах, поэтому часть IP-адреса в информатике называется октетом, от греческого «octo» – восемь.

Весь IPv4 расшифровывается компьютером как двоичная последовательность из 32 цифр – нолей или единиц. Т.е. информационный вес интернет-адреса составляет 4 байта или 32 бита.

Версия IPv6 использует в основе кодировки вместо нолей и единиц шестнадцатеричную систему: 10 чисел и первые восемь букв английского алфавита.

В IP шестой версии содержится восемь октетов по 16 бит в каждом. Они разделяются двоеточием. Часто октеты, находящиеся рядом и имеющие нулевое значение (:0000:) опускаются, отчего шестнадцатеричный IP выглядит более компактно и ёмко, неся в себе при этом больший объём данных.

В Unix

Мы уже знаем, как настроить статический IP-адрес в Linux из командной строки. Теперь настроим статический IP-адрес в Unix. В этой статье мы будем использовать FreeBSD 10.3.

Как и в Linux, мы используем команду ifconfig, чтобы узнать имя сетевой карты. Здесь я вошел в систему как пользователь root для выполнения следующих команд.

# ifconfig

Пример вывода

em0: flags=8843 metric 0 mtu 1500
 options=9b
 ether 08:00:27:f8:ba:d8
 inet 192.168.1.103 netmask 0xffffff00 broadcast 192.168.1.255 
 nd6 options=29
 media: Ethernet autoselect (1000baseT )
 status: active
lo0: flags=8049 metric 0 mtu 16384
 options=600003
 inet6 ::1 prefixlen 128 
 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 
 inet 127.0.0.1 netmask 0xff000000 
 nd6 options=21

Здесь em0 — имя сетевой карты.

Чтобы настроить статический IP-адрес, отредактируем файл /etc/rc.conf:

# nano /etc/rc.conf

Добавим или изменим строки, как показано ниже.

hostname="freebsd.test.local"
ifconfig_em0="inet 192.168.1.103 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
local_unbound_enable="YES"
sshd_enable="YES"
moused_enable="YES"
ntpd_enable="YES"
powerd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"

Сохраним и закроем файл.

Теперь перезапустим сетевой интерфейс

# /etc/rc.d/netif restart && /etc/rc.d/routing restart

Чтобы настроить сетевую карту для получения IP-адреса от сервера DHCP, добавьте или измените только следующие строки:

hostname="freebsd.test.local"
ifconfig_em0="DHCP"

Сохраните и закройте файл. Перезапустите сетевой сервис или перезагрузите систему, чтобы изменения вступили в силу.

И это все. Теперь вы знаете, как настроить статический IP-адрес в дистрибутивах Unix и Linux. Как видно из приведенных выше примеров, настройка IP-адреса из командной строки не очень сложна, как может показаться.

Управление маршрутизацией с помощью iproute2

Из статьи Основные понятия сетей мы знаем, что если текущему узлу необходимо куда-либо отправить IP пакет, то сетевая подсистема ядра использует таблицу маршрутизации. Если пакет отправляется в ту же подсеть, которой принадлежит хост, то с помощью ARP определяется физический адрес хоста назначения и пакет отправляется напрямую хосту назначения. Если адрес назначения принадлежит не «локальной сети», то пакет отправляется на шлюз (читай — направляется по маршруту), который указан в таблице маршрутизации для сети, которой принадлежит хост назначения. При этом, выбирается та сеть, в которой адрес сети наиболее заполнен (читай — меньше хостов в подсети). Если для хоста назначения не найден маршрут, то пакет отправляется на «шлюз по умолчанию». Все шлюзы должны находиться в той же подсети, что и исходный хост.

Допустим, в локальной сети есть некоторый хост с адресом 192.168.1.100/24, а так же есть хост 192.168.1.1, который является шлюзом в глобальную сеть, а так же есть хост с адресом 192.168.1.2, который является связующим маршрутизатором с сетью 192.168.24.0/24 (то есть имеет еще один интерфейс  в сеть 192.168.24.0/24 и на нем включен форвардинг). Для того, чтобы хост с адресом 192.168.1.100/24 имел доступ в сеть Интернет и к локальной сети 192.168.24.0/24, необходимо внести в таблицу маршрутизации соответствующие записи, например с помощью команды ip route add:

# ip route add default via 192.168.1.1
# ip route add 192.168.24.0/24 via 192.168.1.2
# ip route show
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.100
192.168.24.0/24 via 192.168.1.2 dev eth1
default via 192.168.1.1 dev eth

Первая команда добавляет маршрут по умолчанию (default) через узел 192.168.1.1 (параметр via ). Вторая команда устанавливает маршрут на сеть 192.168.24.0/24 через узел 192.168.1.2.

Для вывода на экран содержимого таблицы маршрутизации используется команда ip route show. В данном случае в таблице маршрутизации три записи: первая о том, что сеть 192.168.1.0/24 доступна непосредственно на интерфейсе eth1 (запись добавляется автоматически), и две записи, добавленные пользователем: альтернативный маршрут и маршрут по умолчанию.

Добавление постоянного статического маршрута при инициализации сети

О настройке сети через конфигурационные файлы я рассказывал в статье  Настройка сети в Linux, диагностика и мониторинг, в сегодняшней статье я немного дополню эту информацию. С помощью файла /etc/network/interfaces есть возможность задать постоянные маршрута при поднятии интерфейса и удаление маршрута при выключении интерфейса. Это делается с помощью параметра up и down соответственно. Нижеприведенная конфигурация позволяет задать маршрут до сети 192.168.100.0/24 через шлюз 192.168.1.1:

iface eth1 inet static
      address 192.168.1.100
      netmask 255.255.255.0
      up ip route add 192.168.100.0/24 via 192.168.1.1
      down ip route del 192.168.100.0/24
      gateway 192.168.1.3

Выводы

На этом, данную заметку заканчиваю. Подведу краткие итоги. Для управления физическими интерфейсами применяется команда ip link из пакета iproute. Для настройки свойств физического подключения (скорость, технология, тип дуплекса используется команда ethtool. Для того, чтобы хост мог взаимодействовать с другими узлами подсети в рамках локального сегмента (широковещательного домена) на нем должен быть установлен IP-адрес и определена маска подсети. Для управления IP-адресами в Linux можно использовать команду ip addr. В локальной сети данный узел для определения физических адресов(MAC) по IP — адресам других узлов использует протокол ARP и локальный ARP -кэш (таблица). Управление ARP -таблицей осуществляется командой ip neigh. Для взаимодействия с удаленными подсетями на данном узле необходимо определить шлюз по умолчанию или/и альтернативные шлюзы. Все шлюзы должны находиться в той же подсети, что и исходный узел. Управление таблицей маршрутизации на узле может осуществляться командой ip route. У параметров команд пакета iproute2 есть сокращенный синтаксис, например, ip link show eth0 можно записать как ip l sh eth0.

Что почитать

man ip
man interfaces

Файлы настроек сети в Linux (конфигурационные файлы)

Для понимания работы сети в Linux, я бы обязательно посоветовал ознакомиться со статьей «Этапы загрузки Linux». В целом, вся работа Linux основана на, который рождается при загрузке ОС и плодит своих потомков, которые в свою очередь и выполняют всю необходимую работу, будь то запуск bash или демона. Да, и вся загрузка Linux основана на скриптах bash, в которых прописана вся последовательность запуска мелких утилит с различными параметрами, которые последовательно запускаются/останавливаются при запуске/остановке системы. Аналогично запускается и сетевая подсистема Linux.

Каждый дистрибутив Linux имеет слегка отличающийся от других механизм инициализации сети, но общая картина, думаю, после прочтения будет ясна. Если просмотреть стартовые скрипты сетевой подсистемы какого-либо дистрибутива Linux, то, как настроить конфигурацию сети с помощью конфигурационных файлов, станет более-менее понятно, например у Debian (за основу возьмем этот дистрибутив) за инициализацию сети отвечает скрипт /etc/init.d/networking, просмотрев который:

Ссылка на основную публикацию