Каждый администратор Linux должен уметь настраивать сеть и диагностировать любые сетевые проблемы. Мы разберем топ 7 сетевых команд linux, которые могут вам в этом помочь.
Список рассматриваемых команд в данной статье:
Команда IP в системах Linux
Эта команда является одной из основных команд, которая понадобится каждому администратору в повседневной работе, от настройки новых систем и назначения IP-адресов до устранения неполадок в существующих системах. Команда ip может отображать информацию об ip адресах, управлять маршрутизацией, а также отображать различные сетевые устройства, интерфейсы и туннели.
Синтаксис команды ip будет следующий:
ip <опции> <объект> <команда>
К части <объект> данной команды чаще всего относятся:
- adress — сетевые адреса
- link — конфигурирование сетевых устройств
- tunnel — туннелирование через протокол IP
- route — управление маршрутизацией
- rule — правила маршрутизации
- vrf — управление виртуальным маршрутизатором
- xfrm — управление политиками IPSec
Приведем примеры использования данной команды.
Показать IP-адреса, назначенные интерфейсу на вашем сервере
[root@srv ~]# ip address show
Назначить IP-адрес интерфейсу, например, enps03
[root@srv ~]# ip address add 192.168.1.254/24 dev enps03
Чтобы удалить IP-адрес интерфейса введите:
[root@srv ~]# ip address del 192.168.1.254/24 dev enps03
Изменить статус интерфейса и перевести eth0 в режим онлайн
[root@srv ~]# ip link set eth0 up
Изменить статус интерфейса и перевести eth0 в режим офлайн
[root@srv ~]# ip link set eth0 down
Изменить MTU интерфейса eth0
[root@srv ~]# ip link set eth0 mtu 9000
Измените статус интерфейса, включив беспорядочный режим для eth0
[root@srv ~]# ip link set eth0 promisc on
Добавить маршрут по умолчанию (для всех адресов) через локальный шлюз 192.168.1.254, доступный на устройстве eth0
[root@srv ~]# ip route add default via 192.168.1.254 dev eth0
Добавить маршрут к 192.168.1.0/24 через шлюз 192.168.1.254
[root@srv ~]# ip route add 192.168.1.0/24 via 192.168.1.254
Добавить маршрут к 192.168.1.0/24, который может быть достигнут на устройстве eth0
[root@srv ~]# ip route add 192.168.1.0/24 dev eth0
Удалить маршрут для 192.168.1.0/24 через шлюз 192.168.1.254
[root@srv ~]# ip route delete 192.168.1.0/24 via 192.168.1.254
Отобразить маршрут, выбранный для IP 10.10.1.4
[root@srv ~]# ip route get 10.10.1.4
Команда ifconfig в системах Linux
Хотя сейчас команду ifconfig заменила команда ip, она все равно является популярным инструментом для настройки и диагностирования сети в Linux.
Синтаксис команды ifconfig:
ifconfig <опции> <интерфейс> <команда> <параметры> адрес
Разберем пару примеров.
Отобразить сведения о текущих сетевых настройках
[root@srv ~]# ifconfig
Отобразим сведения об интерфейсе enp0s3
[root@srv ~]# ifconfig enp0s3
Переведем интерфейс enp0s3 в режим офлайн
[root@srv ~]# ifconfig enp0s3 down
Переведем интерфейс enp0s3 в режим онлайн
[root@srv ~]# ifconfig enp0s3 up
Назначим ip адрес интерфейсу eth0
[root@srv ~]# ifconfig eth0 192.168.0.1
Теперь назначим сетевую маску интерфейсу eth0
[root@srv ~]# ifconfig eth0 netmask 255.255.255.254
Изменим MTU для eth0
[root@srv ~]# ifconfig eth0 mtu 1080
КОМАНДА MTR В СИСТЕМАХ LINUX
MTR (Matt’s traceroute) — это программа с интерфейсом командной строки, которая служит средством диагностики сети и устранения неполадок. Данная команда сочетает в себе функциональность ping и traceroute. Как и traceroute, команда mtr покажет маршрут от компьютера до указанного хоста в сети. mtr предоставляет множество статистических данных о каждом прыжке, например время отклика и процент. С помощью команды mtr вы получите больше информации о маршруте и сможете увидеть проблемные устройства по пути. Если вы видите внезапное увеличение времени ответа или потерю пакетов, то очевидно, что где-то плохой канал.
Синтаксис команды MTR следующий:
mtr <опции> hostname/IP
Команда mtr без опций показывает статистику, включая каждый прыжок (имена хостов) со временем и % потерь
[root@srv ~]# mtr google.com
Используем опцию -g и получим IP-адреса вместо имен хостов:
[root@srv ~]# mtr -g google.com
Показать числовые IP-адреса и имена хостов:
[root@srv ~]# mtr -b google.com
Установить количество пингов, которые вы хотите отправить:
[root@srv ~]# mtr -c 10 google.com
Получите отчет о mtrрезультате выполнения команды:
[root@srv ~]# mtr -r -c 10 google.com > mtr-output.log
или же с флагом -w (обеспечивает более подробный вывод):
[root@srv ~]# mtr -rw -c 10 google.com > mtr-output-advanced.log
Принудительно использовать TCP вместо ICMP:
[root@srv ~]# mtr –tcp google.com
Принудительно использовать UDP вместо ICMP:
[root@srv ~]# mtr –udp google.com
Чтобы указать максимальное количество переходов (по умолчанию — 30) между локальной системой и удаленной машиной:
[root@srv ~]# mtr -m 35 google.com
Определить размер пакета:
[root@srv ~]# mtr -r -s 50 google.com
КОМАНДА tcpdump В СИСТЕМАХ LINUX
Команда tcpdump предназначена для захвата и отображения информации о пакетах.
Перед началом захвата пакетов утилитой tcpdump сначала нужно посмотреть список доступных интерфейсов от root:
[root@localhost ~]# tcpdump -D
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.usbmon1 (USB bus number 1)
5.any (Pseudo-device that captures on all interfaces)
6.lo [Loopback]
Если нужно захватить трафик на eth0, то следует использовать опцию -i eth0
[root@srv ~]# tcpdump -i eth0
[root@srv ~]# tcpdump -i eth0 -c 10
Захват трафика определённого хоста
Вы можете отфильтровать трафик, исходящий от определенного хоста. Например, чтобы найти трафик, идущий от и до хоста 8.8.8.8, используйте команду:
[root@srv ~]# tcpdump -i eth0 -c 10 host 8.8.8.8
Для приходящего трафика от 8.8.8.8 используйте:
[root@srv ~]# tcpdump -i eth0 src host 8.8.8.8
Для исходящего трафика на 8.8.8.8 используйте:
[root@srv ~]# tcpdump -i eth0 dst host 8.8.8.8
Захват трафика подсети
Вы также можете захватывать трафик в определенную сеть и из нее, используя следующую команду:
[root@srv ~]# tcpdump -i eth0 net 192.168.1.0 mask 255.255.255.0
или же:
[root@srv ~]# tcpdump -i eth0 net 192.168.1.0/24
Можно отфильтровать по источнику или месту назначения.
Поступающий трафик:
[root@srv ~]# tcpdump -i eth0 src net 10.1.0.0/24
Исходящий трафик:
[root@srv ~]# tcpdump -i eth0 dst net 10.1.0.0/24
Захват трафика по портам
Захватить только трафик DNS-порта 53:
[root@srv ~]# tcpdump -i eth0 port 53
Для конкретного хоста:
[root@srv ~]# tcpdump -i eth0 host 8.8.8.8 and port 53
Чтобы захватить только HTTPS-трафик:
[root@srv ~]# tcpdump -i eth0 -c 10 host www.google.com and port 443
Чтобы захватить все порты, кроме 80 и 25:
[root@srv ~]# tcpdump -i eth0 port not 53 and not 25
КОМАНДА NETSTAT В СИСТЕМАХ LINUX
netstat (network statistics) — это утилита командной строки, выводящая на дисплей состояние TCP-соединений (как входящих, так и исходящих), таблицы маршрутизации, число сетевых интерфейсов и сетевую статистику по протоколам. netstat является частью пакетов ifconfig и iproute2.
Если netstat отсутствует в вашей системе linux, то установите его следующей командой:
[root@srv ~]# dnf install net-tools
Синтаксис команды netstat такой:
netstat <options>
Команду можно использовать без каких либо параметров
[root@server ~]# netstat
Чтобы перечислить все порты и соединения независимо от их состояния или протокола, используйте:
[root@srv ~]# netstat -a
Вывести список всех TCP-портов
[root@srv ~]# netstat -at
Перечислите все порты UDP
[root@srv ~]# netstat -au
Перечислить все прослушиваемые порты
[root@srv ~]# netstat -l
Перечислить все прослушиваемые порты TCP
[root@srv ~]# netstat -lt
Перечислить все прослушиваемые порты UDP
[root@srv ~]# netstat -lu
Перечислить прослушиваемые UNIX сокеты
[root@srv ~]# netstat -lx
Отображение статистики для всех портов независимо от протокола
[root@srv ~]# netstat -s
Показать статистику только TCP портов
[root@srv ~]# netstat -st
Чтобы просмотреть TCP-соединения с указанным именем PID / программы, используйте:
[root@srv ~]# netstat -tp
Чтобы найти процесс, использующий определенный номер порта, запустите:
[root@srv ~]# netstat -an | grep ':<port number>'
КОМАНДА NSLOOKUP В СИСТЕМАХ LINUX
nslookup — это утилита, предоставляющая пользователю интерфейс командной строки для обращения к системе DNS (проще говоря, DNS-клиент). Позволяет задавать различные типы запросов к записям DNS и опрашивать произвольно указываемые сервера.
Рассмотрим следующие распространенные примеры.
Найти A-запись домена
[root@srv ~]# nslookup example.com
Проверить записи NS домена
[root@srv ~]# nslookup -type=ns example.com
Найти записи MX, отвечающие за обмен электронной почтой
[root@srv ~]# nslookup -query=mx example.com
Найти все доступные записи DNS домена
[root@srv ~]# nslookup -type=any example.com
Чтобы проверить использование определенного DNS-сервера
[root@srv ~]# nslookup example.com ns1.nsexample.com
Проверить А запись домена по IP адресу
[root@srv ~]# nslookup 8.8.8.8
КОМАНДА PING В СИСТЕМАХ LINUX
Ping — это инструмент, который проверяет подключение к узлу сети на уровне IP протокола TCP / IP. Отправляя сообщения эхо-запроса ICMP, отображается получение соответствующих сообщений эхо-ответа, а также время приема-передачи. Ping — это основная команда TCP / IP, используемая для устранения неполадок подключения, доступности и разрешения имен.
Самое простое и очевидное использование команды на доступность хоста
[root@srv ~]# ping google.com
Мы можем остановить команду Ping в консоли используя сочетание клавиш CTRL + C или ограничить количество отправляемых запросов за ранее опцией -с
[root@srv ~]# ping -c 10 google.com
В системе с несколькими сетевыми интерфейсами можно выбрать нужный для отправки
[root@srv ~]# ping -I eth0 google.com
Или зададим интерфейс в виде IP адреса
[root@srv ~]# ping -I 192.168.1.10 google.com
Так же можно указать версию IP для использования v4 или v6
[root@srv ~]# ping -4 google.com
[root@srv ~]# ping -6 google.com
Хороший результат диагностики будет, если мы теряем 0% пакетов. Также чем меньше в выводе команды будет задержка, тем лучше качество связи.
Во время проверки связи с хостом мы можем увидеть различные ответы:
Destination Host Unreachable
Возможна причина данного ответа может заключаться в том, что отсутствует маршрут от вашего хоста до хоста назначения, либо удаленный маршрутизатор сообщает, что нет маршрута к целевому узлу.
Request timed out
У этого ответа может быть много причин, довольно распестрённая — это блокировка брандмауэром на удаленной машине.
Name or service not known
Это означает, что заданный хост не существует или вы неправильно указали имя хоста.
На этом обзор сетевых утилит закончен. Если вы нашли эту статью полезной, обязательно напишите об этом в комментариях!
В статье использованы материалы сайта redhat