# Ghid Rapid: Configurare CRULE pentru Rețea EU + US

## 🎯 Scenariul Tău

**Ai:**
- Servere în **Europa** (EU)
- Servere în **SUA** (US)

**Vrei:**
- Optimizare topologie rețea
- Prevenire link-uri redundante
- Reducere costuri trafic

---

## 🚀 QUICK START

### **Pasul 1: Upgrade la v1.4.0**

```bash
cd ~/ircu2
git pull origin main
git fetch --tags
git checkout v1.4.0
```

### **Pasul 2: Rulează instalarea**

```bash
./install.sh
```

### **Pasul 3: La configurare**

Când ajungi la această secțiune:

```
═══════════════════════════════════════
CONFIGURARE CRULE (Reguli Conexiune)
═══════════════════════════════════════

CRULE permite optimizarea topologiei rețelei IRC.
Previne link-uri redundante între servere.

Exemplu: Dacă ai servere în EU și US, CRULE poate
limita la 1 singur link EU-US în loc de multiple.

Configurare CRULE pentru optimizare rețea? (y/n) [n]:
```

**Răspunde:** `y`

### **Pasul 4: Alege opțiunea**

```
Selectați tipul de optimizare:
1) Previne link-uri redundante către o regiune (recomandat)
2) Necesită operator online pentru link-uri
3) Ambele (1+2)
4) Custom (configurare manuală ulterior)

Opțiune [1]:
```

**Pentru rețea EU + US, alege:** `1`

### **Pasul 5: Configurează pattern-ul**

```
Regiune/pattern de blocat (ex: *.eu.*, *.us.*, *.asia.*) [*.eu.*]:
```

---

## 📋 CONFIGURĂRI RECOMANDATE

### **Opțiunea A: Pe servere US - Blochează EU redundante**

```
Opțiune: 1
Pattern: *.eu.*
```

**Rezultat în ircd.conf:**
```conf
# Previne link-uri redundante către *.eu.*
CRule {
    server = "*.eu.*";
    all = no;
    rule = "connected(*.eu.*)";
};
```

**Efect:**
- ✅ Prima conexiune US→EU: **PERMISĂ**
- ❌ A doua conexiune US→EU: **BLOCATĂ** (autoconnect)
- ✅ Operatorii pot forța cu `/CONNECT` dacă e nevoie

---

### **Opțiunea B: Pe servere EU - Blochează US redundante**

```
Opțiune: 1
Pattern: *.us.*
```

**Rezultat în ircd.conf:**
```conf
# Previne link-uri redundante către *.us.*
CRule {
    server = "*.us.*";
    all = no;
    rule = "connected(*.us.*)";
};
```

**Efect:**
- ✅ Prima conexiune EU→US: **PERMISĂ**
- ❌ A doua conexiune EU→US: **BLOCATĂ** (autoconnect)

---

### **Opțiunea C: Configurare avansată (pentru experți)**

Dacă vrei control mai precis, alege opțiunea `3` (Ambele):

```
Opțiune: 3
Regiune de blocat: *.eu.underchat.org
Pattern servere care necesită oper: *.test.underchat.org
```

**Rezultat:**
```conf
# Previne link-uri redundante către *.eu.underchat.org
CRule {
    server = "*.eu.underchat.org";
    all = no;
    rule = "connected(*.eu.underchat.org)";
};

# Necesită operator online pentru *.test.underchat.org
CRule {
    server = "*.test.underchat.org";
    all = no;
    rule = "!directop()";
};
```

---

## 🎯 EXEMPLE PRACTICE

### **Exemplu 1: Rețea simplă (2 EU + 2 US)**

**Topologie:**
- US: `boston.us.underchat.org`, `newyork.us.underchat.org`
- EU: `madrid.es.underchat.org`, `paris.fr.underchat.org`

**Configurare:**

**Pe TOATE serverele US:**
```conf
CRule {
    server = "*.eu.underchat.org";
    all = no;
    rule = "connected(*.eu.underchat.org)";
};
```

**Pe TOATE serverele EU:**
```conf
CRule {
    server = "*.us.underchat.org";
    all = no;
    rule = "connected(*.us.underchat.org)";
};
```

**Rezultat:**
- Link-uri permise: 1 US-EU (ex: boston-madrid)
- Link-uri blocate: toate celelalte US-EU autoconnect
- **Economie:** De la 4 link-uri la 1 link!

---

### **Exemplu 2: Rețea complexă (3 regiuni)**

**Topologie:**
- US: 2 servere
- EU: 2 servere  
- Asia: 1 server

**Configurare pe fiecare server:**

```conf
# Previne redundanță către US
CRule {
    server = "*.us.underchat.org";
    all = no;
    rule = "connected(*.us.underchat.org)";
};

# Previne redundanță către EU
CRule {
    server = "*.eu.underchat.org";
    all = no;
    rule = "connected(*.eu.underchat.org)";
};

# Previne redundanță către Asia
CRule {
    server = "*.asia.underchat.org";
    all = no;
    rule = "connected(*.asia.underchat.org)";
};
```

**Rezultat:**
- Maxim 1 link între orice 2 regiuni
- Topologie optimizată: US-EU, EU-Asia, US-Asia
- **Economie:** De la 10+ link-uri la 3 link-uri!

---

## 🔧 VERIFICARE DUPĂ CONFIGURARE

### **1. Verifică config-ul:**

```bash
grep -A 5 "CRule {" /home/ircd/ircd/lib/ircd.conf
```

**Output așteptat:**
```conf
# Previne link-uri redundante către *.eu.*
CRule {
    server = "*.eu.*";
    all = no;
    rule = "connected(*.eu.*)";
};
```

### **2. Pornește serverul:**

```bash
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
```

### **3. Verifică din IRC:**

```irc
# Ca operator, conectează-te:
/OPER username password

# Vezi regulile CRULE:
/STATS d

# Output:
:server 242 nick d *.eu.*::connected(*.eu.*)
```

### **4. Testează funcționarea:**

```bash
# Prima conexiune către EU:
/CONNECT madrid.es.underchat.org 4400

# Încearcă a doua conexiune către alt server EU:
/CONNECT paris.fr.underchat.org 4400

# Ar trebui să vezi:
:server NOTICE nick :Connection to paris.fr.underchat.org denied by connection rule
```

---

## 💡 TIPS & TRICKS

### **Tip 1: Override manual când e nevoie**

Dacă ai setat `all = no` (implicit), operatorii pot forța:

```irc
# Forțează conexiunea (override CRULE):
/QUOTE CONNECT madrid.es.underchat.org 4400
```

### **Tip 2: Pattern-uri flexibile**

```conf
# Blochează toate serverele .eu.underchat.org:
server = "*.eu.underchat.org";

# Blochează doar Spania:
server = "*.es.eu.underchat.org";

# Blochează toate EXCEPT unul:
server = "*.eu.underchat.org";
rule = "connected(*.eu.underchat.org) && !connected(madrid.*)";
```

### **Tip 3: Combinație cu preferințe**

```conf
# Preferă Manhattan pentru EU, altfel blochează:
CRule {
    server = "*.eu.*";
    all = no;
    rule = "connected(*.eu.*) && !via(manhattan.*, *.eu.*)";
};
```

---

## 🚨 TROUBLESHOOTING

### **Problemă: CRULE nu apare în config**

**Cauză:** Ai răspuns `n` la întrebarea despre CRULE sau ai folosit versiune veche.

**Soluție:**
```bash
git checkout v1.4.0
./install.sh
# Răspunde 'y' la CRULE
```

### **Problemă: Toate conexiunile sunt blocate**

**Cauză:** Regula e prea strictă sau `all = yes`.

**Soluție:**
```bash
nano /home/ircd/ircd/lib/ircd.conf
# Editează CRule: schimbă 'all = yes' în 'all = no'
# SAU comentează regula cu #
```

### **Problemă: Vreau să editez manual CRULE**

**Soluție:**
```bash
nano /home/ircd/ircd/lib/ircd.conf

# Caută secțiunea CRULE și modifică:
CRule {
    server = "*.eu.*";
    all = no;
    rule = "connected(*.eu.*)";
};

# Restart IRCd:
killall ircd
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
```

---

## 📚 DOCUMENTAȚIE COMPLETĂ

Pentru detalii avansate, vezi:
- **CRULE_EXPLAINED.md** - Explicație completă CRULE
- **doc/readme.crules** - Documentație originală
- **ircd/test/*.conf** - Exemple de configurări

---

## 🎯 CONCLUZIE

Cu **CRULE configurat corect**, rețeaua ta EU + US va avea:

✅ **Topologie optimizată** - Nu mai ai link-uri redundante  
✅ **Costuri reduse** - Mai puțin trafic internațional  
✅ **Control granular** - Poți override când e nevoie  
✅ **Routing eficient** - Mesajele circulă optim  

**Timpul de configurare:** ~2 minute  
**Economie:** De la 4+ link-uri la 1-2 link-uri optimizate!

---

**Versiune:** 1.0  
**Data:** 14 Februarie 2026  
**Pentru:** UnderChat IRCd v1.4.0+

