UnrealIRCd

UnrealIRCd link Bloğu: İki IRC Sunucusunu Birbirine Bağlamak

· 5 dk okuma

UnrealIRCd link Bloğu: İki IRC Sunucusunu Birbirine Bağlamak
İçindekiler
  1. Ön Hazırlık
  2. Örnek Senaryo
  3. hub Sunucusundaki link Bloğu
  4. leaf Sunucusundaki link Bloğu
  5. incoming ve outgoing
  6. Parola mı, spkifp mi?
  7. autoconnect
  8. Elle Bağlanmak ve Bağlantıyı Kesmek
  9. Bağlantı Sonrası Senkronizasyon
  10. Sık Görülen Link Hataları
  11. Services Bağlantısı da Bir Link'tir
  12. Ağ Bölünmeleriyle Yaşamak
  13. Link Ayarlarını Belgelemek
  14. Sonuç

Tek sunuculu bir IRC ağı küçük topluluklar için yeterlidir; ancak kullanıcı sayısı arttıkça, farklı bölgelere hizmet vermek veya kesintilere karşı yedeklilik sağlamak istediğinizde birden fazla sunucuya ihtiyaç duyarsınız. UnrealIRCd'de sunucular link bloğu ile birbirine bağlanır. Bağlantı kurulduğunda iki sunucu tek bir ağ gibi davranır: kullanıcılar hangi sunucuya bağlanırsa bağlansın aynı kanallarda buluşur.

Ön Hazırlık

İki sunucuyu bağlamadan önce şunlardan emin olun:

  • Her iki sunucunun me bloğundaki name ve sid değerleri farklı olmalı. Ayrıntılar: me ve admin blokları.
  • Her iki sunucuda sunucu bağlantıları için bir listen portu açık olmalı. Bkz. listen ve TLS portları.
  • Cloak anahtarları ve ağ adı gibi ağ genelindeki ayarlar her iki sunucuda aynı olmalı.
  • Sunucu bağlantıları için bir class tanımlı olmalı (genellikle servers).

Örnek Senaryo

İki sunucumuz olsun:

  • hub.ornekagi.net (sid 001), IP 203.0.113.10
  • leaf.ornekagi.net (sid 002), IP 198.51.100.20

Her iki sunucu da sunucu bağlantıları için 6900 portunu TLS ile dinliyor.

link leaf.ornekagi.net {
	incoming {
		mask 198.51.100.20;
	}
	outgoing {
		bind-ip *;
		hostname 198.51.100.20;
		port 6900;
		options { tls; }
	}
	password "LEAF_SPKIFP_DEGERI" { spkifp; }
	class servers;
}
link hub.ornekagi.net {
	incoming {
		mask 203.0.113.10;
	}
	outgoing {
		bind-ip *;
		hostname 203.0.113.10;
		port 6900;
		options { tls; autoconnect; }
	}
	password "HUB_SPKIFP_DEGERI" { spkifp; }
	class servers;
}

Blok adı, karşı sunucunun me bloğundaki name değeriyle birebir aynı olmalıdır.

incoming ve outgoing

incoming: Karşı sunucunun bize bağlanmasına izin verilen adresleri tanımlar. mask ile yalnızca karşı sunucunun IP adresini yazmak, başkalarının bu link bloğunu kullanarak ağa sızmasını engeller.

outgoing: Bizim karşı sunucuya bağlanırken kullanacağımız bilgileri içerir: adres (hostname), port, TLS kullanımı ve isteğe bağlı olarak otomatik bağlanma.

Bir sunucu yalnızca gelen bağlantı kabul edecekse outgoing bloğu atlanabilir; yalnızca giden bağlantı yapacaksa incoming atlanabilir. Çoğu senaryoda ikisini de tanımlamak esneklik sağlar.

Parola mı, spkifp mi?

Eskiden sunucular birbirini paylaşılan bir parolayla doğrulardı. Bu yöntem hâlâ çalışır ama parolanın sızması durumunda risklidir. UnrealIRCd, her sunucunun TLS sertifikasının açık anahtar parmak izini (spkifp) kullanarak çok daha güvenli bir doğrulama sunar.

Her sunucuda kendi spkifp değerini öğrenmek için:

./unrealircd spkifp

Bu komutun çıktısındaki değeri karşı sunucunun link bloğundaki password satırına yazarsınız. Yani hub'ın spkifp değeri leaf'in yapılandırmasına, leaf'in spkifp değeri hub'ın yapılandırmasına gider. Komut çıktısı, karşı tarafa yapıştırmanız gereken satırı genellikle hazır olarak gösterir.

Sertifikayı yenilediğinizde (örneğin Let's Encrypt otomatik yenileme yaptığında) açık anahtar değişirse spkifp değeri de değişir. Bu yüzden sunucu bağlantıları için kullanılan sertifikanın anahtarını sabit tutmak veya yenileme sonrası değerleri güncellemek gerekir. Sertifika yönetimi için Let's Encrypt sertifikası yazımıza bakın.

autoconnect

options { autoconnect; } eklenen sunucu, bağlantı koptuğunda veya başlatıldığında karşı tarafa otomatik olarak bağlanmayı dener. Deneme aralığı, link bloğunun kullandığı class'taki connfreq değeriyle belirlenir.

Genel kural: autoconnect'i yalnızca bir tarafta, tercihen leaf sunucuda açın. İki tarafın aynı anda birbirine bağlanmaya çalışması nadiren de olsa gereksiz bağlantı denemelerine yol açabilir.

Elle Bağlanmak ve Bağlantıyı Kesmek

Oper olarak IRC içinden:

/connect leaf.ornekagi.net
/squit leaf.ornekagi.net Bakim calismasi

/CONNECT bağlantıyı başlatır, /SQUIT sunucuyu ağdan ayırır. Bağlantının durumunu görmek için /LINKS veya UnrealIRCd'nin /MAP komutunu kullanabilirsiniz.

Bağlantı Sonrası Senkronizasyon

İki sunucu bağlandığında birbirlerine bildikleri bütün kullanıcıları, kanalları, modları ve yasakları gönderir. Buna netburst denir. Bu sırada nick çakışması olursa (iki sunucuda aynı nickli farklı kullanıcılar) sunucular belirli kurallara göre çakışmayı çözer. Kanallarda, bağlantı koptuğu sırada açılan modlar ve verilen op yetkileri de birleştirilir; bu nedenle ağ bölünmelerinde (netsplit) kanalların ele geçirilmesini önlemek için services ve kanal korumaları önemlidir.

HataOlası neden
"Link denied (No matching link configuration)"Blok adı karşı sunucunun adıyla eşleşmiyor veya incoming mask yanlış
"Authentication failed"Parola veya spkifp değeri yanlış ya da sertifika değişmiş
"SID collision"İki sunucu aynı sid değerine sahip
"Connection refused"Karşı tarafta port dinlenmiyor veya güvenlik duvarı kapalı
"TLS handshake failed"Bir taraf TLS beklerken diğeri şifresiz bağlanıyor
Cloak farkı uyarısıSunucular arasında cloak anahtarları farklı

Bağlantı sorunlarında her iki sunucunun log dosyasına bakmak çoğu zaman sorunu hemen gösterir. Log ayarları için log ayarları yazımıza bakın.

Anope veya Atheme gibi services paketleri de UnrealIRCd'ye bir link bloğu üzerinden bağlanır. Fark, services sunucusunun ayrıca ulines bloğunda tanımlanmasıdır. Bu konu ulines ve services bağlantısı yazımızda ayrıntılı olarak anlatılıyor.

Ağ Bölünmeleriyle Yaşamak

En iyi yapılandırılmış ağda bile sunucular arasındaki bağlantı zaman zaman kopar; buna netsplit denir. İnternet sağlayıcısındaki bir sorun, sunucuların birindeki kısa bir kesinti veya bakım çalışması bölünmeye yol açabilir. Bölünme sırasında her iki taraftaki kullanıcılar birbirini ağdan çıkmış gibi görür; bağlantı geri geldiğinde ise netburst ile her şey yeniden birleşir. Kullanıcılarınızı bu durum hakkında bilgilendirmek, "Herkes çıktı, ne oldu?" sorularını azaltır.

Bölünmelerin etkisini azaltmak için leaf sunucularda autoconnect kullanın, sunucuları güvenilir ve birbirine yakın veri merkezlerinde barındırın ve hub sunucuyu ağın en sağlam bağlantısına sahip makine olarak seçin. Services'in kayıtlı kanallarda op yetkilerini koruması, bölünme sırasında kanal ele geçirme girişimlerini de büyük ölçüde engeller.

Her sunucunun hangi sunucuya bağlandığını, hangi portu ve hangi doğrulama yöntemini kullandığını gösteren basit bir tablo tutun. Sertifika yenilemelerinde spkifp değerlerinin güncellenmesi gerektiğinde bu tablo, hangi sunucularda değişiklik yapmanız gerektiğini bir bakışta gösterir ve gece yarısı kopan bir link'i dakikalar içinde onarmanızı sağlar.

Sonuç

link bloğu, tek sunuculu bir kurulumu gerçek bir ağa dönüştürür. Karşı sunucuyu IP ile sınırlayan incoming maskeleri, TLS zorunluluğu ve spkifp doğrulamasıyla hem güvenli hem de sağlam bir sunucu bağlantısı kurabilirsiniz. Ağınızın genel mimarisini planlamak için ağ yapısı: hub ve leaf yazımızla devam edebilirsiniz.

IRC sorunun mu var? Kanalda birlikte çözelim.

💬 Kanala Bağlan

Sıkça Sorulan Sorular

İki sunucuyu bağlamak için her iki tarafta da link bloğu gerekir mi?

Evet. Her sunucu, diğerini tanımlayan bir link bloğuna sahip olmalıdır.

spkifp nedir?

Karşı sunucunun TLS sertifikasının açık anahtarına ait parmak izidir. Parola yerine kullanılarak çok daha güvenli bir sunucu kimlik doğrulaması sağlar.

Link kopunca otomatik yeniden bağlanır mı?

outgoing bloğunda autoconnect seçeneği tanımlıysa sunucu belirli aralıklarla yeniden bağlanmayı dener.