Петља подразумеване руте у WireGuard-у: пронађите путању до крајње тачке
Подразумевана рута шаље сопствене шифроване пакете тунела назад у њега. Прочитајте путању до крајње тачке, додајте једну руту до хоста, затим проверите и вратите.
Интерфејс се подиже, конфигурација партнера изгледа исправно и ниједно руковање се никада не завршава. Додавање подразумеване руте кроз тунел је корак који то често изазива: иста табела рута сада одлучује куда треба да иду сопствени шифровани пакети тунела, а одговор који даје води назад у тунел. Ништа не може да носи спољни пакет који би носио унутрашњи, па се веза зауставља пре него што почне. Поправка је мала, али има редослед, а провера је важнија од измене.
Потврдите петљу пре него што промените руту
Прочитајте тренутну адресу крајње тачке партнера и затим питајте стек за рутирање куда би ишао пакет на ту адресу. Ако одговор наводи интерфејс тунела, петља је потврђена и даља дијагностика није потребна. Сачувајте оба излаза у запису о измени пре него што било шта додирнете, јер је поређење после поправке исте две команде. Петља није суптилна када се једном види; тешкоћа је у томе што интерфејс изгледа здраво док се то дешава.
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-у је онај предузет пре прве команде.