Часто при отладке какой-нибудь сетевой схемы можно столкнуться с ситуацией, когда всё настроено правильно, однако трафик по какой-то причине не идёт или нет подключения на какой-то порт роутера. В этом случае для определения причин данных проблем необходимо провести диагностику сети.
В роутерах RTU существует возможность отслеживать прохождение и направление трафика по всем интерфейсам, либо по каждому в отдельности с помощью tcpdump
.
В данной статье будут описаны некоторые команды использования tcpdump
.
Рассмотрим следующую схему подключения:
На примере данной схемы будут рассмотрены команды tcpdump
.
Просмотреть трафик со всех интерфейсов можно командой tcpdump
:
Однако, в этом случае, будет показан весь трафик со всех интерфейсов, что может мешать просматривать какой-то конкретный трафик. В этом случае можно указать в команду, какой именно трафик нужно показывать.
Просмотрим подключение на 80-й порт RTU с хоста 172.26.19.16:
tcpdump -i 3g-internet port 80 and host 172.26.19.16Где, -i 3g-internet - название Wan интерфейса.
Попробуем подключиться на порт 80 роутера RTU с помощью утилиты "Netcat":
root@LT40:~# nc 172.26.19.15 80 nc: can't connect to remote host (172.26.19.15): Connection refused root@LT40:~#
Как видим, подключение было отклонено.
Посмотрим, что происходит на порту 80 на RTU1068:
root@RTUx68:~# tcpdump -i 3g-internet port 80 and host 172.26.19.16 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on 3g-internet, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes 07:07:04.484750 IP 172.26.19.16.53184 > 172.26.19.15.80: Flags [S], seq 3130758208, win 29200, options [mss 1460,sackOK,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,wscale 5], length 0 07:07:04.503751 IP 172.26.19.15.80 > 172.26.19.16.53184: Flags [R.], seq 0, ack 3130758209, win 0, length 0 2 packets captured 3 packets received by filter 0 packets dropped by kernel root@RTUx68:~#
RTU получил от LT пакет установки соединения с флагом SYN, в правиле данный флаг указан как [S]. Однако RTU отклонил соединение, отправив ответ с флагом RST: в правиле данный флаг указан как [R.].
В данном случае такое поведение было вызвано тем, что порт 80 на RTU1068 закрыт и входящее соединение было отклонено политикой по умолчанию "REJECT", с отправкой удалённой стороне ICMP сообщения о недоступности порта.
Если политикой по умолчанию будет стоять DROP, RTU1068 будет отклонять подключение и не будет отправлять ответ ICMP о недоступности порта.
С помощью tcpdump
можно просматривать трафик, фильтруя его по протоколам:
Попробуем отследить передачу GRE пакетов на Wan интерфейсе:
Выполним пинг с LT40 на RTU1068 через GRE тоннель:
root@LT40:~# ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1): 56 data bytes 64 bytes from 10.0.0.1: seq=0 ttl=64 time=752.683 ms 64 bytes from 10.0.0.1: seq=1 ttl=64 time=89.256 ms 64 bytes from 10.0.0.1: seq=2 ttl=64 time=188.509 ms 64 bytes from 10.0.0.1: seq=3 ttl=64 time=207.885 ms ^C --- 10.0.0.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 89.256/309.583/752.683 ms
Просмотрим трафик GRE на RTU с помощью команды:
tcpdump -i 3g-internet proto gre
root@RTUx68:~# tcpdump -i 3g-internet proto gre tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on 3g-internet, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes 08:24:33.059063 IP 172.26.19.16 > 172.26.19.15: GREv0, length 88: IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 26394, seq 0, length 64 08:24:33.086216 IP 172.26.19.15 > 172.26.19.16: GREv0, length 88: IP 10.0.0.1 > 10.0.0.2: ICMP echo reply, id 26394, seq 0, length 64 08:24:33.431356 IP 172.26.19.16 > 172.26.19.15: GREv0, length 88: IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 26394, seq 1, length 64 08:24:33.439461 IP 172.26.19.15 > 172.26.19.16: GREv0, length 88: IP 10.0.0.1 > 10.0.0.2: ICMP echo reply, id 26394, seq 1, length 64 08:24:34.540031 IP 172.26.19.16 > 172.26.19.15: GREv0, length 88: IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 26394, seq 2, length 64 08:24:34.549479 IP 172.26.19.15 > 172.26.19.16: GREv0, length 88: IP 10.0.0.1 > 10.0.0.2: ICMP echo reply, id 26394, seq 2, length 64 08:24:35.500180 IP 172.26.19.16 > 172.26.19.15: GREv0, length 88: IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 26394, seq 3, length 64 08:24:35.538593 IP 172.26.19.15 > 172.26.19.16: GREv0, length 88: IP 10.0.0.1 > 10.0.0.2: ICMP echo reply, id 26394, seq 3, length 64 8 packets captured 8 packets received by filter 0 packets dropped by kernel root@RTUx68:~#
Некоторые протоколы не требуют указывания proto в команде, и достаточно подать следующую команду:
tcpdump -i 3g-internet esp
или
tcpdump -i 3g-internet tcp
Таким образом, tcpdump
позволяет более детально просматривать трафик на интерфейсах, что упрощает мониторинг и поиск неисправностей при отладке сети.