Хатні камп'ютар адкрывае тунель і дасягае хмарнага сервера без праблем. Хмарны сервер можа дасягнуць хатняй праграмы на працягу хвіліны-двух пасля таго, як хатні камп'ютар апошні раз нешта адправіў, а затым спыняецца. У журнале WireGuard нічога не з'яўляецца, памылка рукапаціскання не паведамляецца, і перазапуск тунеля ненадоўга выпраўляе гэта. Гэты ўзор — гэта адлюстраванне, якое сканчаецца, а не зламаны тунель, і інструкцыя ніжэй пацвярджае гэта перад любымі зменамі.

Пацвердзіце, што ўзор — гэта заканчэнне адлюстравання пры прастоі

Адрозная дэталь — гэта час. Калі зваротнае злучэнне працуе адразу пасля таго, як хатні апанент адпраўляе трафік, і ламаецца пасля ціхага інтэрвалу, шлях у парадку, а стан пасярэдзіне — не. Калі яно ніколі не працавала, нават адразу пасля трафіку, гэта няправільны дыягназ.

sudo wg show wg0 latest-handshakes
sudo wg show wg0 endpoints
sudo wg show wg0 transfer

Выканайце першыя дзве каманды адразу пасля таго, як хатні апанент нешта адправіць, пачакайце пяць хвілін і выканайце іх зноў. Адзнака часу рукапаціскання, якая абнаўляецца па раскладзе без новай канчатковай кропкі, кажа, што тунель жывы. Змянілася здольнасць незапатрабаваных пакетаў прыходзіць звонку, а гэта ўласцівасць шляху, а не тунеля.

Затым зрабіце зваротную спробу і паглядзіце на лічыльнікі перадачы. Калі хмарны бок адпраўляе байты, а хатні бок не атрымлівае нічога, пакет пакінуў хмару і загінуў у прыладзе, якая захоўвае стан, па дарозе. Гэта подпіс, які вы шукаеце. Калі абодва лічыльнікі рухаюцца, тунель даставіў пакет, і падазраваны — праграма.

Размясціце keepalive на апаненце за маршрутызатарам

Пастаянныя keepalive захоўваюць адлюстраванне NAT і любы стан міжсеткавага экрана жывымі, адпраўляючы невялікі аўтэнтыфікаваны пакет па раскладзе. Налада належыць машыне за маршрутызатарам, у яе запісе для аддаленага апанента, бо менавіта гэты бок сваім выходным пакетам стварае стан.

[Peer]
PublicKey = <cloud peer public key>
AllowedIPs = 10.71.0.1/32
PersistentKeepalive = 25

Аб'яднайце яго з існуючым раздзелам апанента. Даданне другога блока з тым жа публічным ключом не з'яўляецца правільным спосабам дадання опцый, і wg-quick не аб'яднае іх за вас. Задакументаваныя 25 секунд — гэта прыклад, абраны каб быць ніжэй за звычайныя тайм-аўты UDP, а не значэнне з асаблівым сэнсам.

Размяшчэнне той жа дырэктывы на хмарным баку не дапамагае гэтай праблеме. Пакеты гэтага апанента ўжо прыходзяць з публічнага адраса, таму няма адлюстравання, якое трэба захоўваць у важным кірунку. Гэта дадае трафік і нічога не змяняе.

Чытайце таймеры замест здагадак пра інтэрвал

Keepalive працуюць, бо прыходзяць часцей, чым сканчаецца стан. Гэта робіць тайм-аўт лікам, які вам сапраўды патрэбны, і ў Linux ён чытаецца на прыладзе, якая робіць ператварэнне:

sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sudo conntrack -L -p udp --dport 51820

Першае значэнне — гэта тайм-аўт для UDP-плыні, якую бачылі толькі ў адным кірунку, а другое дзейнічае, калі адказы ўжо назіраліся. Абодва звычайна кароткія, і адлюстраванне, якое змаўкае, будзе ісці за тым, што датычыцца вашай плыні.

Параўнайце гэты лік з вашым інтэрвалам. Keepalive у 25 секунд пры тайм-аўце 30 секунд працуе; той жа keepalive пры тайм-аўце 15 секунд — не. Ніякая колькасць паўтораў не зменіць гэтую арыфметыку. Некаторыя спажывецкія маршрутызатары і мабільныя аператары выкарыстоўваюць значна карацейшыя значэнні, чым прадвызначэнне Linux, таму канфігурацыя, якая працуе ў адной сетцы, не працуе ў іншай.

ObservationWhat it meansReasonable response
Works after traffic, dies when idleMapping or firewall state expiringLower the keepalive interval
Never works, even immediatelyNo return route, listener or firewallStop tuning keepalive
Works for hours, then dies onceCarrier-side translation or address changeCheck the endpoint and logs together

Праверце слухача і міжсеткавы экран асобна

Жывое адлюстраванне неабходнае і недастатковае. Праграма на хатнім камп'ютары павінна слухаць правільны адрас, а міжсеткавы экран хоста павінен дазволіць пакет пасля расшыфроўкі.

sudo ss -lntup | grep 8080
sudo wg show wg0 allowed-ips
curl -sS -m 5 http://10.71.0.2:8080/health

Калі сокет прывязаны толькі да адраса фізічнага інтэрфейса, а не да адраса тунеля, пакеты, што прыходзяць у тунель, адкідаюцца да звароту да міжсеткавага экрана. Гэтая адмова выглядае з хмарнага боку гэтак жа, як праблема адлюстравання, і перажывае кожную наладку keepalive.

Праверка спісу дазволеных не менш важная ў іншым кірунку. Хмарны апанент павінен дазволіць хатні адрас тунеля як крыніцу, калі збіраецца адказваць, а хатні апанент павінен дазволіць хмарны адрас як прызначэнне. Пакеты keepalive — гэта аўтэнтыфікаваны трафік, і яны выконваюць тыя ж правілы, таму keepalive, які выглядае працоўным, можа суіснаваць з праграмай, якая не працуе.

Разгортвайце змену і ведайце яе межы

Ужыцёўце наладу, перазапусціце інтэрфейс, калі гэта ваш спосаб абнаўлення, а затым паўтарыце тэст прастою, а не неадкладны тэст. Пачакайце даўжэй за тайм-аўт, які вы прачыталі раней, зрабіце зваротны запыт і пацвердзіце, што лічыльнікі рухаліся з абодвух бакоў.

Запішыце інтэрвал і вымераны тайм-аўт побач з ім. Будучая змена прашыўкі маршрутызатара або пераход на мабільнае злучэнне можа змяніць тайм-аўт. Нататка дазваляе камусьці вывесці значэнне зноў, а не скапіяваць яго. Два лікі ў адным радку зберагаюць цэлае расследаванне пазней.

Пастаянныя keepalive абараняюць стан. Яны не адкрываюць порт, не дадаюць запіс у спіс дазволеных і не прымушаюць слухача з'явіцца. Калі зваротнае злучэнне не працуе зусім, вінаватая адна з гэтых трох рэчаў, і хуткі старт WireGuard апісвае наладу keepalive ў такіх жа вузкіх умовах.

Падобныя артыкулы