Почему работающий VPN всё равно получает тайм-аут на ответе
То, что запрос доходит до частного сервера, — лишь половина обмена. Его ответ должен найти клиента туннеля через нужный шлюз, маршрут или трансляцию.
Запрос приходит, сервер его регистрирует, а клиент всё равно сообщает о тайм-ауте. Такое сочетание означает, что ответ не нашёл обратного пути, и это одна из немногих неисправностей, которую можно подтвердить с обеих сторон одновременно. Выполняйте проверки по порядку и останавливайтесь, когда какая-то из них не проходит.
Начните с того, куда пришёл запрос
Прежде чем проверять что-либо ещё, убедитесь, что пакет дошёл до сервиса. Запись в журнале на стороне сервера, счётчик соединений или разрешённый захват на дальнем конце отвечают на один и тот же вопрос, а их отсутствие возвращает вас к туннелю, а не вперёд к ответу. Это та проверка, которая отделяет проблему пересылки от проблемы обратного пути.
Если запрос так и не пришёл, остановитесь здесь. Туннель, маршрутизация к частному префиксу или правило доступа — это тема, а обратный путь пока не важен. Запишите также адрес источника, который увидел сервер. Это либо адрес пула, выданный клиенту, либо транслированный адрес, и это различие определяет, какая из последующих проверок применима.
Ответу нужен маршрут к пулу
Клиент удалённого доступа обычно получает адрес из пула, и частной сети нужен маршрут обратно к этому пулу. Сервер, чей маршрут по умолчанию указывает на его собственный шлюз, передаёт пакет этому шлюзу, который понятия не имеет, где находится пул, поэтому ответ погибает там. Клиент видит тайм-аут, потому что ничего не вернулось, и это невозможно отличить от запроса, который так и не ушёл.
Проверьте маршрут, который сервер выбирает для адреса клиента, а не тот, который он использует для своей подсети. Эти два поиска могут дать разные ответы, и здесь важен второй. Трансляция — это альтернативный вариант, и она меняет то, что видит сервер. Она может упростить обратный путь, а также убирает исходный адрес клиента из журналов сервера, что влияет на любое правило или отчёт, построенный на этом поле.
Сравните захват на сервере с захватом на шлюзе
Сравните то, что покидает сервер, с тем, что приходит на шлюз. Захват на исходящем интерфейсе сервера и захват на шлюзе туннеля отвечают на разные половины вопроса, а разрыв между ними указывает место потери.
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 stops | What it proves |
|---|---|
| Request in the server log, nothing on its outbound capture | The server picked a gateway that cannot reach the pool |
| Reply leaves the server but never shows up at the gateway | Loss on the LAN path, not on the tunnel |
| Reply reaches the gateway but not the client | Return translation or tunnel policy, not the server route |
Запрос, сгенерированный самим шлюзом, — плохая замена проверке с клиента, потому что он исходит с другого адреса и встречает другие правила. Поэтому успешный ping со шлюза и неудачный запрос с клиента могут быть верны одновременно.
Если на пути несколько маршрутизаторов, проверьте каждый, которому нужен маршрут к пулу. Схема «площадка — площадка» часто требует, чтобы удалённый префикс был известен более чем на одном устройстве, а сам шлюз должен пересылать между туннелем и локальной сетью; заметки strongSwan о пересылке охватывают сторону sysctl и межсетевого экрана.
Запишите пул, префикс и ответственного
В заметку входят четыре факта: пул, который получил клиент, частный префикс, который ему был нужен, маршрутизатор, отвечающий за ответ, и правило трансляции, если оно есть. С ними последующая смена шлюза — это сравнение, а не расследование.
Затем повторите проверку с обычным клиентом и реальной учётной записью приложения. Расширение прав приложения не может исправить обратный путь пакета, а смена учётной записи во время этой диагностики запутает следующее сравнение. Если схема опирается на трансляцию, задокументируйте её там, где читают журналы сервера. Тот, кто видит незнакомый адрес источника в журнале аудита, не должен заново выяснять соответствие по тикету.