WireGuard PersistentKeepalive: NAT зураглалыг амьд байлга
Хэрэв урвуу холболт нь хос трафик илгээсний дараа шууд ажилладаг бол зураглал хугацаа дуусч байна. keepalive-г чиглүүлэгчийн ард тохируулаад, дараа нь бодит хугацааг уншина уу.
Гэрийн хайрцаг туннелийг нээж, үүлэн серверт ямар ч асуудалгүй хүрдэг. Үүлэн сервер нь гэрийн хайрцаг сүүлд ямар нэгэн зүйл илгээсний дараа нэг эсвэл хоёр минутын турш гэрийн аппликейшн руу хүрч чадна, дараа нь зогсдог. 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 урсгалын хугацаа бөгөөд хоёр дахь нь хариултууд ажиглагдсаны дараа хэрэгжинэ. Хоёулаа ихэвчлэн богино бөгөөд чимээгүй болсон зураглал таны урсгалд хамаарахыг дагана.
Тухайн тоог өөрийн завсарлагатай харьцуулна уу. 30 секундын хугацааны доор 25 секундын keepalive ажилладаг; мөн ижил keepalive 15 секундын хугацааны доор ажиллахгүй. Хэчнээн дахин оролдсон ч энэ арифметик өөрчлөгдөхгүй. Зарим хэрэглэгчийн чиглүүлэгч болон гар утасны операторууд Linux-ийн анхдагчаас хамаагүй богино утга ашигладаг тул нэг сүлжээнд ажилладаг тохиргоо нөгөөд бүтэлгүйтдэг.
| Observation | What it means | Reasonable response |
|---|---|---|
| Works after traffic, dies when idle | Mapping or firewall state expiring | Lower the keepalive interval |
| Never works, even immediately | No return route, listener or firewall | Stop tuning keepalive |
| Works for hours, then dies once | Carrier-side translation or address change | Check 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 тохиргоог мөн адил нарийн нөхцлөөр тайлбарладаг.