Nebula: relay sozlangan, ammo ishlatilmayapti — tekshirish kerak bo'lgan uchta sozlama
Relay yo'li uchta hostdagi uchta bayonotning mos kelishini talab qiladi. Avval relay rolini, manzilning relay ro'yxatini va peer ruxsatini tekshiring.
Siz relay hostini qo'shdingiz, uning Nebula manzilini konfiguratsiyaga yozdingiz, ammo ikkala peer hali ham gaplashmayapti. Bu relay yo'li uchta alohida bayonotning mos kelishini talab qilgani uchun bo'ladi, va ulardan faqat bittasi siz tahrirlagan mashinada joylashgan. Men buni ikki marta kuzatdim: bir marta yo'naltiruvchi hostga hech qachon relay roli berilmagan, yana bir marta sozlamalar ulanishning noto'g'ri tomoniga yozilgan. Quyidagi ketma-ketlik rolni, e'lonni va ruxsatni shu tartibda tekshiradi, har bir qadamda davom etish kerakligini aytadigan buyruq bor.
Konfiguratsiyani tahrirlashdan oldin uchta rolni xaritalang
Nebula har bir hostga bir vazifa beradi, vazifalar meros qolmaydi. Mayoq «bu peer qayerda» degan savollarga javob beradi, shunda hostlar bir-birini topa oladi. Relay ishlaydigan to'g'ridan-to'g'ri yo'li bo'lmagan ikki peer o'rtasida trafikni yo'naltiradi. Oddiy host ikkalasini ham qilmaydi. Muhim uchta sozlama uch xil mashinada joylashgan, shuning uchun to'liq ko'rinadigan klient konfiguratsiyasi ikkala peerni ham kutishda qoldirishi mumkin.
# on the discovery host
lighthouse:
am_lighthouse: true
hosts: []
# on every other host, point at the discovery host's Nebula address
lighthouse:
hosts:
- 10.42.0.1
Bitta alomat ikki xil nosozlik sinfini ajratadi. Agar ikkala peer bir-birini ro'yxatga olsa va jurnal hech qachon tugamaydigan qo'l siqish urinishlarini ko'rsatsa, aniqlash ishlayapti va ma'lumot yo'li NAT yoki xavfsizlik devori bilan to'silgan. Agar peer boshqasining manzilini umuman bilmasa, muammo mayoqda yoki uning statik host xaritasida, relay sozlamalari buni tuzata olmaydi.
Boshqa narsani tahrirlashdan oldin har bir host aslida qaysi konfiguratsiyani yuklaganini tasdiqlang. Siz tahrirlagan fayldan boshqa yo'lni o'qiydigan birlik «o'zgarish hech narsa qilmadi» deganining keng tarqalgan va uyatli sababi:
systemctl cat nebula | grep ExecStart
nebula -version
journalctl -u nebula -n 20 --no-pager
Aralash parkda versiya qatori muhim. Relay bilan ishlash, teshish xatti-harakati va qabul qilinadigan konfiguratsiya kalitlari nashrlar orasida bir xil emas, shuning uchun eski build o'zi uchun yozilmagan bo'limni tushunadi deb o'ylamang. Hostlarni bitta kichik seriyaga tekislang, so'ng har bir hostda nebula -test -config /etc/nebula/config.yml ni ishga tushiring va kod amalga oshirmaydigan transportni disk raskadrovka qilishdan oldin chiqishni solishtiring.
Relay hostida yo'naltirish rolini yoqing
Relay roli yo'naltiruvchi hostdagi bitta bayroq, va u mayoq bo'lishdan alohida. Aniqlash yoqilgan va relay yo'naltirish o'chirilgan host hali ham faqat aniqlash xizmati. Relayda:
relay:
am_relay: true
Bu bayroq niyatni e'lon qiladi; u yetib borish imkoniyatini yaratmaydi. Relay ikkala peerdan ham yetib boriladigan bo'lishi kerak, bu amalda ommaviy manzil, host xavfsizlik devorida va har qanday bulut xavfsizlik guruhida Nebula portida ochiq kiruvchi UDP, va uning oldida ikkilangan NAT yo'qligini bildiradi. Tinglayotgan soketni tekshiring, so'ng peer paketlarining kelishini kuzating:
ss -lunp | grep nebula
tcpdump -ni any udp port 4242 and host 198.51.100.7
Ikki chegara keyinroq vaqtni tejaydi. Relayga boshqa relay orqali yetib bo'lmaydi, shuning uchun konfiguratsiyadagi relay nomlari zanjiri yo'naltiruvchi hostga foydali yo'l berishning o'rnini bosmaydi. Va relay paketlarni yo'naltiradi; u ruxsat bermaydi, shuning uchun relaydan o'tgan oqimga ruxsat berilganini manzilning o'z kiruvchi qoidalari hal qiladi. Rol va uning talablari relay konfiguratsiyasi hujjatida bayon etilgan.
Relayni klientdan emas, manzildan e'lon qiling
Bu eng ko'p soat yeydigan teskari holat. Relay ro'yxati siz yetib bormoqchi bo'lgan hostda bo'lishi kerak, chunki u boshqa peerlarga o'sha hostga yetish uchun qaysi relaylardan foydalanish mumkinligini aytadi. Uni ulanishni boshlaydigan klientga qo'yish klientga kerak bo'lgan yo'nalish uchun hech narsa qilmaydi:
# on the DESTINATION host: relays others may use to reach me
relay:
relays:
- 10.42.0.5
Peerlar mayoqqa ro'yxatdan o'tishda bu ro'yxatni manzillari bilan birga xabar qiladi, shuning uchun e'lon to'g'ridan-to'g'ri almashinuv emas, aniqlash orqali tarqaladi. Agar manzil hech qanday mayoqqa yetib bormasa, uning relay ro'yxati hech qachon tarqalmaydi va to'g'ri sozlangan relay bekor qoladi. Bu nosozlik aynan buzilgan relayga o'xshaydi va unday emas.
Xuddi shu bosqichda manzilga boshlang'ich yo'l bering. Statik host xaritasi Nebula manzilini ommaviy oxirgi nuqtaga bog'laydi, shunda birinchi qo'l siqishga boradigan joy bo'ladi, va agar manzil to'g'ridan-to'g'ri yetib borolmaydigan hostlardan relaydan o'tgan trafikni qabul qilsa, unga relay uchun yozuv kerak:
static_host_map:
"10.42.0.5": ["203.0.113.10:4242"]
Ulanayotgan peerga relaydan foydalanishga ruxsat bering
Boshlovchi tomon o'z ruxsatiga muhtoj. relay.use_relays sukut bo'yicha yoqilgan, shuning uchun qidirishga arziydigan holat ochiq false bo'lib, u ko'pincha relay funksiyasi paydo bo'lishidan oldin yozilgan shablondan ko'chirilgan yoki to'g'ridan-to'g'ri yo'llarni majburlashga qaratilgan avvalgi urinishdan qolgan:
relay:
use_relays: true
Bu tomondagi ruxsat yagona darvoza emas. Manzilning kiruvchi qoidalari relaydan o'tgan paketga ham amal qiladi, va ular moslashtiradigan manba tunnel ichidagi shaxs, relayning o'z manzili emas. Relaydan o'tgan qo'l siqish tugagach ham dastur ishlamay qolsa, qoidani qayta yozishdan oldin manzil jurnalida qayd etilgan manbani o'qing.
NAT dan o'tish sozlamalari bularning barchasi bilan o'zaro ta'sirlashadi. punchy.punch ikki peerga to'g'ridan-to'g'ri yo'l ochishda yordam beradi, va u muvaffaqiyatli bo'lsa kuzatish uchun relay trafigi bo'lmaydi; bu muvaffaqiyat, yo'qolgan relay emas. Vaqti-vaqti bilan ishlaydigan juftlik odatda teshish ba'zan muvaffaqiyatli bo'lishini bildiradi, shuning uchun bir urinishdan xulosa chiqarmasdan o'sha juftlikni bir necha marta sinab ko'ring.
Muvaffaqiyatsiz bo'lgan juftlik bilan tekshiring, so'ng qayta yuklang
Haqiqatan muvaffaqiyatsiz bo'lgan ikki hostni kerakli dastur bilan sinab ko'ring. Ish stansiyangizdan relayning o'z xizmatiga muvaffaqiyatli ping boshqa ikki peer o'rtasidagi yo'naltirish haqida hech narsani isbotlamaydi, va bu butun protseduradagi eng keng tarqalgan noto'g'ri musbat.
journalctl -u nebula -f | grep -iE "relay|handshake"
ping -c 3 10.42.0.9
Qayta ishga tushirish o'rniga qayta yuklang va ishlayotgan jarayon siz tahrirlagan faylni olganini tasdiqlang. Qayta ishga tushirish har bir tunnelni buzadi va keyingi sinovni o'qishni qiyinlashtiradi, SIGHUP esa jarayonni saqlab, konfiguratsiyani qayta o'qishga majbur qiladi:
sudo systemctl kill -s HUP nebula
# same signal when nebula runs in the foreground
kill -HUP $(pidof nebula)systemctl reload faqat mahalliy birlik ExecReload ni belgilaganda ishlaydi, loyiha bilan keladigan birlik buni qilmaydi, shuning uchun standart o'rnatishda muvaffaqiyatli bo'ladigan qadam systemctl kill -s HUP. Qayta yuklagandan so'ng jarayon ochgan konfiguratsiya yo'li uchun jurnalni o'qing, siz taxmin qilgan fayl emas, yangi fayl o'qilganini bilish uchun.
Relay sozlamalari va NAT teshish ikkalasi ham yo'lga ta'sir qiladi; hech biri shaxsga ta'sir qilmaydi. Agar ishlayotgan konfiguratsiyada am_relay, relays va use_relays tasdiqlangandan keyin ham juftlik qo'l siqishda muvaffaqiyatsiz bo'lsa, ikkala host ham sozlangan nomlari uchun berilgan sertifikatlarni taqdim etishini va ikkala tomonda CA bir xilligini tekshiring. Sertifikat va xavfsizlik devori konfiguratsiyasini o'zgarmas saqlab, bir vaqtda bitta transport sozlamasini o'zgartiring, chunki bitta sinovga tushgan sertifikat tahriri va relay tahriri qo'l siqishni qaysi biri siljitganini aytmaydi. Nom yoki CA nomuvofiqligi hech qachon topilmagan relay bilan bir joyda muvaffaqiyatsiz bo'ladi, shuning uchun bu qarshi tekshiruv ham xuddi shu bosqichga tegishli.
So'ng har bir bayonot o'ziga tegishli faylda turishini tasdiqlang:
- Yo'naltiruvchi hostda
am_relay: true, va o'sha host ikkala tomondan UDP orqali yetib boriladigan bo'lsin. - Manzilda o'sha hostning Nebula manzilini ko'rsatadigan
relays:. - Ulanishni boshlaydigan peerda
use_relays: true. - Yo'l o'zgargandan keyin ham manzilning kiruvchi qoidalari haqiqiy manbaga ruxsat beradi.