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

Начните с того, куда пришёл запрос

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

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

Ответу нужен маршрут к пулу

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

Проверьте маршрут, который сервер выбирает для адреса клиента, а не тот, который он использует для своей подсети. Эти два поиска могут дать разные ответы, и здесь важен второй. Трансляция — это альтернативный вариант, и она меняет то, что видит сервер. Она может упростить обратный путь, а также убирает исходный адрес клиента из журналов сервера, что влияет на любое правило или отчёт, построенный на этом поле.

Сравните захват на сервере с захватом на шлюзе

Сравните то, что покидает сервер, с тем, что приходит на шлюз. Захват на исходящем интерфейсе сервера и захват на шлюзе туннеля отвечают на разные половины вопроса, а разрыв между ними указывает место потери.

ip route get 10.90.0.14
tcpdump -ni any host 10.90.0.14 and port 443
ip route show table all | grep 10.90.0.0
Where the reply stopsWhat it proves
Request in the server log, nothing on its outbound captureThe server picked a gateway that cannot reach the pool
Reply leaves the server but never shows up at the gatewayLoss on the LAN path, not on the tunnel
Reply reaches the gateway but not the clientReturn translation or tunnel policy, not the server route

Запрос, сгенерированный самим шлюзом, — плохая замена проверке с клиента, потому что он исходит с другого адреса и встречает другие правила. Поэтому успешный ping со шлюза и неудачный запрос с клиента могут быть верны одновременно.

Если на пути несколько маршрутизаторов, проверьте каждый, которому нужен маршрут к пулу. Схема «площадка — площадка» часто требует, чтобы удалённый префикс был известен более чем на одном устройстве, а сам шлюз должен пересылать между туннелем и локальной сетью; заметки strongSwan о пересылке охватывают сторону sysctl и межсетевого экрана.

Запишите пул, префикс и ответственного

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

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

Похожие статьи