вторник, 5 декабря 2023 г.

Тестирование пропускной способности канала связи с помощью Iperf

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

Задачу тестирования пропускной способности обычно необходимо решать в тех ситуациях, когда нужно проверить потенциально возможную максимальную скорость передачи информации от одного хоста до другого хоста с учётом всего промежуточного оборудования. Или же, например, в сценариях тестирования производительности клиентов за VPN.

Общая схема тестируемого сценария следующая:

В качестве операционной системы здесь будет использоваться Linux Ubuntu 22.04.

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

Обновим метаинформацию по репозиториям и установим iperf3:

sudo apt update
sudo apt install -y iperf3

Запустим сервер iperf на прослушивание подключения от клиентов по всем доступным IP-адресам:

sudo iperf3 -s 0.0.0.0

Убедитесь, что порт TCP/5201 не закрыт брандмауэром.

Теперь можно переходить к тестированию со стороны клиентов.

Запуск iperf на клиенте Linux

Обновим метаинформацию по репозиториям и установим iperf3:

sudo apt update
sudo apt install -y iperf3

Запустим тест производительности канала связи до сервера iperf. Тестирование буем выполнять в течении одной минуты:

sudo iperf3 -c 10.10.10.71 -V -t 60
Linux task 5.15.0-41-generic #44-Ubuntu SMP Wed Jun 22 14:20:53 UTC 2022 x86_64
Control connection MSS 1448
Time: Sat, 16 Sep 2023 10:43:27 GMT
Connecting to host 10.10.10.71, port 5201
      Cookie: kmijzbq5bc2oiync7ftnwbdetvmep76gfcb7
      TCP MSS: 1448 (default)
[  5] local 10.10.10.35 port 44954 connected to 10.10.10.71 port 5201
Starting Test: protocol: TCP, 1 streams, 131072 byte blocks, omitting 0 seconds, 60 second test, tos 0
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  89.2 MBytes   748 Mbits/sec  652   90.5 KBytes       
[  5]   1.00-2.00   sec  74.3 MBytes   623 Mbits/sec  291   53.7 KBytes       
[  5]   2.00-3.00   sec  89.4 MBytes   750 Mbits/sec  613    228 KBytes       
[  5]   3.00-4.00   sec   174 MBytes  1.46 Gbits/sec  375    346 KBytes       
[  5]   4.00-5.00   sec   289 MBytes  2.42 Gbits/sec  100    525 KBytes 
<...>
[  5]  57.00-58.00  sec   119 MBytes   996 Mbits/sec  618    338 KBytes       
[  5]  58.00-59.00  sec  91.2 MBytes   765 Mbits/sec  1064    198 KBytes       
[  5]  59.00-60.00  sec   104 MBytes   870 Mbits/sec  490   91.9 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.00  sec  6.75 GBytes   966 Mbits/sec  28107             sender
[  5]   0.00-60.00  sec  6.75 GBytes   966 Mbits/sec                  receiver
CPU Utilization: local/sender 12.0% (0.0%u/12.0%s), remote/receiver 4.4% (0.0%u/4.4%s)
snd_tcp_congestion cubic
rcv_tcp_congestion cubic

iperf Done.
root@task:/home/roman# 

Как видно по результатам выше – средняя скорость передачи данных по каналу связи немного не дотягивает до одного гигабита в секунду.

Запуск iperf на клиенте Windows

Для запуска клиента iperf на Windows предварительно необходимо загрузить дистрибутив.

Распаковываем архив:

И запускаем тест производительности канала:

iperf3.exe -c 10.10.10.71 -V -t 60
C:\tmp\iperf-3.1.3-win64>iperf3.exe -c 10.10.10.71 -V -t 60
iperf 3.1.3
CYGWIN_NT-10.0 DESKTOP-QQRNKJQ 2.5.1(0.297/5/3) 2016-04-21 22:14 x86_64
Time: Sat, 16 Sep 2023 10:51:44 GMT
Connecting to host 10.10.10.71, port 5201
      Cookie: DESKTOP-QQRNKJQ.1694861504.261775.29
      TCP MSS: 0 (default)
[  4] local 10.10.10.45 port 51794 connected to 10.10.10.71 port 5201
Starting Test: protocol: TCP, 1 streams, 131072 byte blocks, omitting 0 seconds, 60 second test
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  60.8 MBytes   509 Mbits/sec
[  4]   1.00-2.00   sec  97.4 MBytes   817 Mbits/sec
[  4]   2.00-3.00   sec   105 MBytes   880 Mbits/sec
[  4]   3.00-4.00   sec   124 MBytes  1.04 Gbits/sec
[  4]  54.00-55.00  sec  81.0 MBytes   680 Mbits/sec
[  4]  55.00-56.00  sec  86.4 MBytes   723 Mbits/sec
[  4]  56.00-57.00  sec   109 MBytes   915 Mbits/sec
[  4]  57.00-58.00  sec   124 MBytes  1.04 Gbits/sec
[  4]  58.00-59.00  sec   104 MBytes   875 Mbits/sec
[  4]  59.00-60.00  sec  63.2 MBytes   530 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
Test Complete. Summary Results:
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-60.00  sec  4.85 GBytes   694 Mbits/sec                  sender
[  4]   0.00-60.00  sec  4.85 GBytes   694 Mbits/sec                  receiver
CPU Utilization: local/sender 30.0% (1.8%u/28.2%s), remote/receiver 2.9% (0.0%u/2.9%s)

iperf Done.

C:\tmp\iperf-3.1.3-win64>


Тестирование пропускной способности канала связи завершено.


вторник, 7 ноября 2023 г.

Использование маскарада с Iptables для трансляции сетевых адресов (NAT) MASQUERADE

 

Реализация маскарада с помощью Iptables

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

Шаг 1. Добавление правила маскирования в цепочку POSTROUTING

Выполните следующую команду в терминале Linux:

$iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Эта команда добавляет в цепочку POSTROUTING таблицы NAT правило, которое сопоставляет все исходящие пакеты, проходящие через интерфейс eth0, и заменяет их исходный IP-адрес на IP-адрес интерфейса eth0.

    • Параметр -t используется для указания таблицы, с которой мы хотим работать, в данном случае это таблица NAT.

    • Опция -A используется для добавления нового правила в цепочку.

    • Опция -o используется для указания исходящего интерфейса, через который проходят пакеты.

    • Параметр -j используется для указания цели правила, которым в данном случае является MASQUERADE, что означает, что исходный IP-адрес пакета должен быть замаскирован.

После добавления этого правила исходный IP-адрес любого исходящего пакета, проходящего через интерфейс eth0, маскируется IP-адресом интерфейса eth0.

Шаг 2. Указание IP-адреса для маскировки

По умолчанию правило маскировки применяется ко всем исходящим пакетам на всех интерфейсах. Однако можно указать конкретный интерфейс для маскировки с помощью параметра -s, за которым следует IP-адрес интерфейса.

Выполните следующую команду:

$iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

Примечание. Правило маскировки применяется только к пакетам, отправляемым через интерфейс eth1.

Шаг 3. Указание исходного IP-адреса для маскировки

Правило маскировки заменяет исходный IP-адрес всех исходящих пакетов на IP-адрес исходящего интерфейса по умолчанию.

Выполните следующую команду, чтобы указать другой исходный IP-адрес, используя параметр –to-source, за которым следует IP-адрес:

$iptables -t nat -A POSTROUTING -o eth0 --to-source 203.0.113.1 -j MASQUERADE

Примечание. Эта команда маскирует все исходящие пакеты с IP-адресом 203.0.113.1.

среда, 1 ноября 2023 г.

Batch Configuration - сброс пароля на камере Optimus

УТИЛИТ

Запускаем программу в нижнем меню
Через "Add" добавляем устройство, причем самое важное - достаточно вбить IP адрес камеры  и все. Порт не трогаем, логин и пароль - вбиваем любую фигню, они не проверяются.

Далее в верхнем меню выбираем камеру жмем System Config - Restore - Выбираем Simple Restore и потом Complite Restore, получаем "Configuration failed", но настройки на самом деле сбросились.

Камера перегружается и готово.

пятница, 27 октября 2023 г.

Используем tcpdump для анализа и перехвата сетевого трафика

 


Утилита tcpdump — отличный инструмент командной, который способен перехватывать и анализировать сетевой трафик. Может оказаться большим подспорьем при решении сетевых проблем. Пакеты можно сохранить в файл и анализировать позже. Рекомендуется время от времени запускать эту утилиту, чтобы следить за своей сетью.


Содержание:


  • Вывод tcpdump
  • Установка tcpdump
  • Опции tcpdump
  • Фильтры tcpdump:
    • Фильтр выражений
    • Фильтр портов
    • Фильтр хостов
    • Комбинирование фильтров
  • Сохранение заголовков в файл
  • Просмотр сведений о пакете
  • Вывод

Вывод tcpdump


Утилита tcpdump позволяет проверять заголовки пакетов TCP/IP и выводить одну строку для каждого из пакетов. Она будет делать это до тех пор, пока не нажать Ctrl + C.


Давайте рассмотрим одну строку из примера вывода:


20:58:26.765637 IP 10.0.0.50.80 > 10.0.0.1.53181: Flags [F.], seq 1, ack 2, win 453, options [nop,nop,TS val 3822939 ecr 249100129], length 0

Каждая строка включает:


  • Метка времени Unix (20: 58: 26.765637)
  • протокол (IP)
  • имя или IP-адрес исходного хоста и номер порта (10.0.0.50.80)
  • имя хоста или IP-адрес назначения и номер порта (10.0.0.1.53181)
  • Флаги TCP (Flags [F.]). Указывают на состояние соединения и могут содержать более одного значения:
    • o S — SYN. Первый шаг в установлении соединения
    • F — FIN. Прекращение соединения
    • — ACK. Пакет подтверждения принят успешно
    • P — PUSH. Указывает получателю обрабатывать пакеты вместо их буферизации
    • R — RST. Связь прервалась
  • Порядковый номер данных в пакете. (seq 1)
  • Номер подтверждения. (ack 2)
  • Размер окна (win 453). Количество байтов, доступных в приемном буфере. Далее следуют параметры TCP
  • Длина полезной нагрузки данных. (length 0)

Установка tcpdump


В дистрибутивах на основе Debian tcpdump можно установить с помощью команды APT:


# apt install tcpdump -y

В дистрибутивах на основе RPM tcpdump можно установить с помощью YUM:


# yum install tcpdump -y

В RHEL 8 с использование DNF:


# dnf install tcpdump -y

Опции tcpdump


Запускать tcpdump нужно с правами root. Tcpdump включает в себя множество опций и фильтров. При запуске tcpdump без каких-либо параметров произойдет перехват всех пакетов, проходящих через интерфейс по умолчанию.


Вывести список доступных системе сетевых интерфейсов, в которых tcpdump может захватывать пакеты:


# tcpdump -D

или


# tcpdump --list-interfaces

1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.eth1
5.any (Pseudo-device that captures on all interfaces)
6.lo [Loopback]

Очень полезно для систем, в которых нет команды для вывода списка интерфейсов.


Для захвата пакетов, проходящих через определенный интерфейс, используйте -i с именем интерфейса. Если не указать имя, тогда tcpdump подберет первый обнаруженный сетевой интерфейс.


# tcpdump -i eth1

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
01:06:09.278817 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 1, length 64
01:06:09.279374 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 4761, seq 1, length 64
01:06:10.281142 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 2, length 64

  • -v увеличивает количество отображаемой информации о пакетах
  • -vv дает еще более подробную информацию

По умолчанию tcpdump преобразует IP-адреса в имена хостов, а также использует имена служб вместо номеров портов.


  • -n Если DNS не работает или вы не хотите, чтобы tcpdump выполнял поиск имени.

# tcpdump –n

listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100
04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0
04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36
04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0
04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100

  • -c захватывает только набор строк, например, 5:

#tcpdump -c 5

04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100
04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0
04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36
04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0
04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100
5 packets captured

  • -tttt для использования более удобных временных меток (по умолчанию используются временные метки Unix)

# tcpdump –tttt

2020-07-06 04:30:12.203638 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186734102:2186734138, ack 204107103, win 37232, length 36
2020-07-06 04:30:12.203910 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0
2020-07-06 04:30:12.204292 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 36:72, ack 1, win 37232, length 36
2020-07-06 04:30:12.204524 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0
2020-07-06 04:30:12.204658 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 72:108, ack 1, win 37232, length 36

Фильтры tcpdump


Фильтр выражений


Фильтр выражений выбирает, какие заголовки пакетов будут отображаться. Если фильтры не применяются, отображаются все заголовки пакетов.


Самые распространенные фильтры :


  • port
  • host
  • src
  • dst
  • tcp
  • udp
  • icmp

Фильтр портов


Фильт портов используется для просмотра пакетов, поступающих на определенный порт:


# tcpdump -i eth1 -c 5 port 80

23:54:24.978612 IP 10.0.0.1.53971 > 10.0.0.50.80: Flags [SEW], seq 53967733, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0
23:54:24.978650 IP 10.0.0.50.80 > 10.0.0.1.53971: Flags [S.E], seq 996967790, ack 53967734, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0
23:54:24.978699 IP 10.0.0.1.53972 > 10.0.0.50.80: Flags [SEW], seq 226341105, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0
23:54:24.978711 IP 10.0.0.50.80 > 10.0.0.1.53972: Flags [S.E], seq 1363851389, ack 226341106, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0 

Фильтр хостов


Для перехвата пакетов, приходящих или исходящих от определенного хоста. Например, IP-адрес 10.0.2.15:


# tcpdump host 10.0.2.15

03:48:06.087509 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 3862934963:3862934999, ack 65355639, win 37232, length 36
03:48:06.087806 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0
03:48:06.088087 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 36:72, ack 1, win 37232, length 36
03:48:06.088274 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0
03:48:06.088440 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 72:108, ack 1, win 37232, length 36

Для перехвата пакетов определенных типов протоколов. Например, icmp, на интерфейсе eth1:


# tcpdump -i eth1 icmp

04:03:47.408545 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 75, length 64
04:03:47.408999 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 75, length 64
04:03:48.408697 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 76, length 64
04:03:48.409208 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 76, length 64
04:03:49.411287 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 77, length 64

Комбинирование фильтров


Фильтры можно комбинировать с помощью операторов:


  • AND
  • OR
  • NOT

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


# tcpdump -n -i eth1 src 10.0.0.1 and dst port 80

00:18:17.155066 IP 10.0.0.1.54222 > 10.0.0.50.80: Flags [F.], seq 500773341, ack 2116767648, win 4117, options [nop,nop,TS val 257786173 ecr 5979014], length 0
00:18:17.155104 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [S], seq 904045691, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 257786173 ecr 0,sackOK,eol], length 0
00:18:17.157337 IP 10.0.0.1.54221 > 10.0.0.50.80: Flags [P.], seq 4282813257:4282813756, ack 1348066220, win 4111, options [nop,nop,TS val 257786174 ecr 5979015], length 499: HTTP: GET / HTTP/1.1
00:18:17.157366 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [.], ack 1306947508, win 4117, options [nop,nop,TS val 257786174 ecr 5983566], length 0

Если нужно перехватить все пакеты кроме ICMP, используем оператор NOT:


# tcpdump -i eth1 not icmp

Сохранение заголовков в файл


Вывод tcpdump может довольно быстро перемещаться по экрану. В таких случаях можно сохранить заголовки пакетов в файле с опцией -w. Вывод сохраняется в файлы с расширением .pcap.


Следующая команда сохраняет 10 строк вывода интерфейса eth1 в icmp.pcap.


# tcpdump -i eth1 -c 10 -w icmp.pcap

tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel

Прочитать этот файл можно с помощью опции -r


# tcpdump -i eth1 -c 10 -w icmp.pcap

reading from file icmp.pcap, link-type EN10MB (Ethernet)
05:33:20.852732 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 33, length 64
05:33:20.853245 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 33, length 64
05:33:21.852586 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 34, length 64
05:33:21.853104 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 34, length 64
05:33:22.852615 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 35, length 64

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


Пока мы видели только заголовки пакетов, а для просмотра содержимого нужно использовать параметр -A. Вывод содержимого будет в формате ASCII.


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


# tcpdump -c10 -i eth1 -n -A port 80

23:35:53.109306 IP 10.0.0.1.53916 > 10.0.0.50.80: Flags [P.], seq 2366590408:2366590907, ack 175457677, win 4111, options [nop,nop,TS val 255253117 ecr 5344866], length 499: HTTP: GET / HTTP/1.1
E..'..@.@.%.
...
..2...P..M.
uE............
.6.}.Q.bGET / HTTP/1.1
Host: 10.0.0.50
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
If-Modified-Since: Tue, 04 Mar 2014 11:46:45 GMT

Вывод


Утилита tcpdump проста в настройке и освоении. Необходимо лишь немного разобраться с:


  • выводом
  • фильтрами
  • опциями