Как можно определить, какой именно хост блокирует передачу пакета?

Между узлами А и Б, судя по всему, происходит блокировка пакетов. <br/> Как можно определить, на каком этапе происходит потеря пакета с определенной сигнатурой, подобно тому, как это делает <code>traceroute</code>? <br/> <br/> У меня есть Linux-сервер, расположенный далеко от Москвы на РТ, и он перестал работать с OpenVPN: соединение устанавливается, но входящие данные не проходят. Провайдер РТ утверждает, что "ничего не блокируем и за работу VPN не отвечаем". <br/> <br/> Возможно ли: <br/> 1. Создать тестовый пакет, который будет выглядеть как трафик OpenVPN? <br/> 2. Отправлять этот пакет многократно и отслеживать момент, после которого он перестает доходить? <br/> <br/> Интересно в образовательных целях узнать, как можно диагностировать подобные проблемы.
  • 27 августа 2024 г. 12:44
Ответы на вопрос 2
Для диагностики блокировки пакетов между узлами A и B можно использовать различные инструменты и подходы, такие как `ping`, `traceroute`, `tcpdump`, а также специально настроенные тестовые пакеты. Давайте рассмотрим по порядку, как можно поймать место блокировки пакетов и как создать тестовые пакеты, аналогичные трафику OpenVPN.

### 1. Использование `traceroute`

`traceroute` позволяет отследить путь, который пакеты проходят от одного узла к другому. Он использует специальный механизм, отправляя пакеты с увеличивающимся значением TTL (Time-to-Live) для определения маршрута и времени ответа каждого узла.

Пример использования `traceroute`:
```bash
traceroute <адрес_сервера_Б>
```
Тем не менее, `traceroute` может не всегда показать точное место блокировки, если узел по пути не отвечает или игнорирует ICMP-пакеты.

### 2. Анализ трафика с `tcpdump`

С помощью `tcpdump` вы можете захватывать пакеты в точке, где происходит попытка установить соединение OpenVPN, чтобы проверить, какие пакеты отправляются и принимаются.

Пример команды для захвата пакетов:
```bash
tcpdump -i <интерфейс> -nn -s 0 -A port <порт_OpenVPN>
```

Это поможет вам увидеть, проходят ли пакеты через ваш сервер и уходят ли они дальше.

### 3. Генерация тестовых пакетов

Чтобы сымитировать трафик OpenVPN, вы можете использовать `hping3` или `Scapy` для создания кастомных TCP/UDP пакетов. Например, OpenVPN по умолчанию работает на UDP, и вы можете отправлять UDP пакеты по определенному порту.

Пример использования `hping3` для отправки UDP пакетов:
```bash
hping3 --udp -p <порт_OpenVPN> <адрес_сервера_Б>
```
Вы можете отправлять пакеты в цикле и отслеживать, когда они перестают доходить:
```bash
while true; do hping3 --udp -p <порт_OpenVPN> <адрес_сервера_Б>; sleep 1; done
```

### 4. Серверный анализ

Если у вас есть доступ к серверу Б, попробуйте запустить `tcpdump` или `Wireshark` на нем, чтобы определить, доходят ли пакеты до него. Это поможет вам выяснить, блокируется ли трафик по пути к серверу или же блокировка происходит уже на стороне сервера Б.

### 5. Использование VPN-тестирования

Вы можете попробовать обойти блокировки, используя различные протоколы (например, TCP вместо UDP) или потестировать VPN-сервисы, которые вы знакомы. Это поможет изолировать проблему, связанную с OpenVPN.

### 6. Проверка MTU и фрагментация

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

### Заключение

Комбинируя эти методы, вы сможете получить более полное представление о том, где происходит блокировка. Также можете в этом процессе использовать инструменты, такие как `mtr`, которые комбинируют в себе `ping` и `traceroute`, предоставляя более полную картину о потере пакетов и времени отклика.
Штука в том, что так не определишь. Именно потому что та верно отметил "соединение устанавливается , но ни один входящий байт не проходит". На самом деле конечно проходит, просто ТСПУ провайдера калечит VPN пакеты, так что до сервера доходит не шифрованный пакет, а абракадабра, которую нельзя расшифровать. Отсюда и проблема, сервер не может подтвердить подлинность пакета и отвергает его. 
Тут только можно посоветовать переход на какие то более другие протоколы, которые роскомпозору не по зубам.
Похожие вопросы