Интерфейсът се вдига, конфигурацията на партньора изглежда правилна и нито едно ръкостискане никога не завършва. Добавянето на маршрут по подразбиране през тунела е стъпката, която често го причинява: същата таблица за маршрутизация сега решава накъде трябва да отидат собствените шифровани пакети на тунела и отговорът, който дава, е обратно в тунела. Нищо не може да носи външния пакет, който би носил вътрешния, така че връзката спира, преди да започне. Поправката е малка, но има ред и проверката е по-важна от редакцията.

Потвърдете цикъла, преди да промените маршрут

Прочетете текущия адрес на крайната точка на партньора и след това попитайте стека за маршрутизация накъде ще отиде пакет до този адрес. Ако отговорът посочва интерфейса на тунела, цикълът е потвърден и не е нужна допълнителна диагностика. Запазете двата изхода в записа за промяната, преди да докоснете нещо, защото сравнението след поправката е същите две команди. Цикълът не е фин, след като бъде видян; трудността е, че интерфейсът изглежда здрав, докато това се случва.

sudo wg show wg1 endpoints
ip route get 198.51.100.20
ip rule show

Включете правилата за политика в това заснемане. Маршрут по подразбиране, който изглежда правилен в основната таблица, все още може да загуби от правило, което избира друга таблица за маркиран или немаркиран трафик, и цикълът ще се появи отново с таблица за маршрутизация, която изглежда наред.

Четете пътя до крайната точка, а не пътя на тунела

Пътят до крайната точка е маршрутът, по който шифрованите дейтаграми стигат до публичния адрес на партньора, и той трябва да остане извън тунела, докато тунелът съществува. Пътят на тунела е всичко, което на партньора е разрешено да носи. Тези два пътя споделят една таблица за маршрутизация и точно затова един обхващащ всичко запис може да ги сгъне един в друг. Разделянето на трафика на тунела от собствения транспорт на тунела е целият проблем на дизайна и всеки поддържан инструмент го решава малко по различен начин.

Проверете двете семейства адреси поотделно, ако интерфейсът носи и двете. Работещото изключване на IPv4 не казва нищо за това дали крайната точка IPv6 е все още достъпна, а смесената конфигурация може да изглежда работеща, докато не бъде избран адресът IPv6 на партньора.

Възстановете пътя до крайната точка с една последователна промяна

Съществуват два поддържани подхода и смесването им е начинът, по който работеща настройка става непредвидима. Първият е да оставите инструмента, който притежава интерфейса, да управлява целия тунел: wg-quick има специална обработка за диапазон на партньор по подразбиране, която инсталира отделна таблица, правила за политика и маркировка на сокет, което държи външните пакети извън тунела. Оставете тази механика непокътната, вместо да възпроизвеждате половината от нея на ръка. Настройка, която смесва ръчно добавен маршрут по подразбиране с мениджър, който вече инсталира маркировки и правила, обикновено се проваля след повторно свързване, когато мениджърът презаписва състояние, което ръчната стъпка е предполагала.

Вторият е ръчен дизайн, при който крайната точка получава явен маршрут до хост през физическия шлюз. Добавете този маршрут преди маршрута по подразбиране, заменете, вместо да добавяте, за да не може остарял запис да победи, и потвърдете търсенето след това.

sudo ip route replace 198.51.100.20/32 via 192.0.2.1 dev eth0
ip route get 198.51.100.20
sudo ip route add default dev wg1

Проверете, след което запазете път за връщане

Напредващ отпечатък от време на ръкостискане е първото доказателство и е по-силен от интерфейс, който просто съществува. Последвайте го с тест на приложение през тунела, след това нарочно свалете интерфейса и потвърдете, че хостът се връща в използваемо състояние, вместо да държи маршрут по подразбиране, сочещ към нищо. Тази последна стъпка е тази, която хората пропускат, и тя решава дали рестарт ще остави машината без връзка.

sudo wg show wg1 latest-handshakes
sudo wg-quick down wg1
ip route show default
ip route get 198.51.100.20

Преди всичко това запазете текущото състояние на маршрутизацията и се уверете, че има път за достъп, който не зависи от тунела: конзола, адрес за извънлентово управление или колега на място. Отдалечена машина, която загуби маршрута си по подразбиране, не може да бъде възстановена през връзката, която току-що е загубила, и най-безопасната стъпка в runbook е тази, направена преди първата команда.

Подобни статии