Чаму traceroute памірае ў адным кірунку праз VPN-тунель
След, які завяршаецца ў адным кірунку і друкуе зоркі ў другім, звычайна з’яўляецца дыягнастычнай праблемай. Параўнайце метады проб, зваротныя шляхі і рэальны запыт.
Вывад traceroute, які завяршаецца ў адным кірунку і друкуе радкі зорак у другім, выглядае як асіметрычная перадача, і звычайна ёю не з’яўляецца. Кожны паказаны хоп патрабуе, каб проба дайшла, каб маршрутызатар вырашыў адказаць і каб адказ вярнуўся і супаў з пробай. Парушце любое з гэтых звёнаў — і радок стане зоркай, а тунель працягне перадаваць даныя.
След — гэта доказ пра дыягностыку раней, чым доказ пра транспарт. Варта спытаць, якое з трох звёнаў адмовіла, і адказ прыходзіць з пакетаў, а не з формы вываду.
Зорка — гэта адсутны адказ, а не адсутны хоп
Traceroute ідзе вонкі, пасылаючы пробы, TTL якіх сканчаецца на адзін маршрутызатар далей кожны раўнд. Маршрутызатар, які адкідае пратэрмінаваную пробу, павінен вярнуць паведамленне ICMP Time Exceeded з уласным імем, і інструмент друкуе гэтае імя. Інструмент насамрэч чакае, што гэтае паведамленне прыйдзе ў межах тайм-аўту. Калі маршрутызатар адказвае з іншага адрасу крыніцы, абмяжоўвае частку генерацыі памылак або скідвае пробу без слова, раўнд не дае нічога прыдатнага для друку.
Ні адзін з гэтых вынікаў не кажа, што прамы шлях зламаны. Зорка — гэта справаздача пра неатрыманы ліст, а не пра пустую дарогу.
Метад пробы вызначае, які фільтр вы сустрэнеце
Метад па змаўчанні ў Linux — звычайна порт прызначэння UDP з высокім нумарам, tracert у Windows пасылае ICMP-рэха, а Linux можна загадаць выкарыстоўваць замест гэтага ICMP або TCP. Кожны з іх выглядае для станнага фэйрвола або хмарнай групы бяспекі як іншы від трафіку. Параўнанне UDP-следу з аднаго боку з ICMP-следам з другога параўноўвае два розныя эксперыменты. Замацуйце метад, сямейства адрасоў, адрас крыніцы і тайм-аўт, перш чым называць вынікі розніцай.
Для сумленнага параўнання запускайце след з гаспадароў, якія сапраўды нясуць трафік, а не з шлюза, які перасылае за іх. След, згенераваны маршрутызатарам, выкарыстоўвае ўласны адрас крыніцы і палітыку вываду, якія могуць быць строгай за ўсё, што бачыць кліент. Запішыце дакладную каманду, каб наступны чалавек мог яе паўтарыць.
Значэнне тайм-аўту — другая палова эксперыменту, і яго лёгка забыць у нататках. Чаканне ў дзве секунды на перагружаным шляху паведамляе пра зоркі там, дзе чаканне ў пяць секунд паведамляе пра хопы. Трымайце значэнне аднолькавым ва ўсіх запусках, каб параўнанне заставалася пра сетку.
Зваротны шлях — гэта ўласны маршрут
Памылка ICMP — звычайны пакет з уласнымі крыніцай і прызначэннем, і яму патрэбны шлях назад да трасіроўшчыка. Калі палітыка тунелю нясе прэфіксы LAN, але не адрас маршрутызатара, які згенераваў памылку, паведамленне выходзіць шляхам, які не можа да вас дабрацца. Фільтрацыя адказаў можа скінуць яго нават калі маршрут існуе, бо пакет прыходзіць з нечаканага адрасу на нечаканым інтэрфейсе. Гэта няўзгодненасць у дыягнастычнай плоскасці, а не збой праграмы.
Пашырэнне кожнага селектара, пакуль след не завершыцца, робіць карціну прыгажэйшай, а палітыку горшай. Адрэмантуйце канкрэтны дыягнастычны адрас або прыміце зорку і праверце праграму іншым спосабам.
Пацвердзіце тунель рэальным запытам
TCP-рукапоціск на ўласным порце сэрвісу правярае перадачу, зваротную маршрутызацыю і фільтрацыю ў кірунку, які важны. Каманды ніжэй выконваюцца на абодвух канцах і параўноўваюць, што кожны бок можа адкрыць. Замяніце порт сэрвісу і імя інтэрфейсу тунелю з вашай канфігурацыі.
traceroute -I -n -w 2 203.0.113.40
traceroute -T -p 443 -n -w 2 203.0.113.40
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 5 http://203.0.113.40:8080/health
ss -tan state established
Спачатку прачытайце два запускі traceroute: калі запуск ICMP паказвае хопы, а запуск TCP не паказвае, розніца ў метадзе, а не ў шляху. Затым вазьміце вынік curl як адказ на ўзроўні праграмы, бо завершаны абмен з разумным кодам стану азначае, што прамы і зваротны шляхі працуюць для рэальнага трафіку. Спіс сокетаў паказвае, ці ўсталявана злучэнне наогул, і ніякі след гэтага вам не скажа.
Тунель, які нясе інтэрактыўную сесію ў абодвух кірунках, пакуль адзін traceroute друкуе зоркі, здаровы і проста нефатагенічны. Захоўвайце вывад каманд з кожнага боку як запіс і стаўцеся да адсутных хопаў як да адкрытага пытання пра дыягностыку, а не як да прысуду пра VPN.