II DALIS: TINKLO INŽINERIJA, SAUGUMAS IR STEBĖJIMAS
Bonding (bond0) ir 10GbE pralaidumas – realybė su Fritz!Box ir Xiaomi infrastruktūra
Namų infrastruktūroje dažnai pamirštame tinklo svarbą, tačiau tai yra kraujotakos sistema, jungianti visus komponentus. Čia svarbu suprasti realius apribojimus. "Fritz!Box" turi tik 2.5 GbE prievadus, o valdomas jungiklis (switch) taip pat yra tokio paties greičio – tik du jo prievadai yra 10 Gigabitiniai. Tai nėra trūkumas; tai sąmoningas architektūrinis sprendimas, pagrįstas perspektyva.
Architektūrinė logika: 10GbE tinklo plokštė serveryje buvo įsigyta ne todėl, kad šiandien būtų pilnai išnaudojamas jos pralaidumas, o todėl, kad ateityje, atnaujinus jungiklį ar maršrutizatorių, nereikėtų keisti serverio. Tai yra "future-proofing" – investicija į ateitį, kai namų tinklai pereis prie 10GbE standarto. Šiandien ši plokštė veikia bond režime su integruota 10GbE sąsaja, užtikrindama atsparumą gedimams ir subalansuodama apkrovą tarp dviejų fizinių sąsajų.
Faktinė tinklo topologija:
- Serveris (Fujitsu TX2550 M5): Turi dvi integruotas 10GbE sąsajas (eno1, eno2). Jos sujungtos į bond0, kad užtikrintų atsparumą gedimams.
- Jungiklis (Switch): Valdomas jungiklis su dviem 10GbE prievadais ir keliais 2.5GbE prievadais. 10GbE prievadai sujungti su serveriu, o 2.5GbE prievadai – su Fritz!Box ir kitais tinklo įrenginiais.
- Fritz!Box: Veikia kaip pagrindinis maršrutizatorius su 2.5GbE prievadais. Jis jungiasi prie jungiklio 2.5GbE greičiu, todėl išorinis interneto srautas yra ribojamas šio greičio.
- Xiaomi WiFi: Sukurtas atskiras "Xiaomi" WiFi tinklas, skirtas tik kameroms. Tai izoliuoja kamerų srautą nuo pagrindinio namų tinklo, užkertant kelią galimiems saugumo pažeidžiamumams ir sumažinant trikdžius.
Bondo konfigūracija /etc/network/interfaces:
bash# Bondo konfigūracija - dvi 10GbE sąsajos
auto bond0
iface bond0 inet static
address 10.10.10.10/24
gateway 10.10.10.1
bond-mode 4
bond-miimon 100
bond-slaves eno1 eno2
bond-downdelay 200
bond-updelay 200
bond-lacp-rate 1
bond-xmit-hash-policy layer2+3
Ši konfigūracija užtikrina, kad visas didelio intensyvumo vidinis srautas (virtualių mašinų migracija, NFS, duomenų mainai tarp serverio ir darbo stočių) naudotų 10GbE ryšį, o išorinis srautas eitų per 2.5GbE grandinę. Kamerų srautas keliauja per atskirą "Xiaomi" WiFi tinklą ir patenka į serverį per atskirą virtualų tiltą (vmbr1), taip nenaudodamas pagrindinės tinklo magistralės resursų.
Cloudflare Tunnel: Terminalo kelias nuo cloudflared login iki systemd serviso
"Cloudflare Tunnel" (anksčiau "Argo Tunnel") yra revoliucinis įrankis, leidžiantis saugiai eksponuoti vidinius servisus išoriniam pasauliui be atvirų prievadų ir sudėtingų maršrutizavimo taisyklių. Jis sukuria šifruotą tunelį tarp jūsų serverio ir "Cloudflare" krašto tinklo, todėl jūsų namų IP adresas niekada nėra atskleidžiamas.
Diegimo žingsniai:
- Atsisiunčiame
cloudflared:
bashwget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/local/bin/cloudflared
chmod +x /usr/local/bin/cloudflared
- Autentifikacija ir tunelio sukūrimas:
bashcloudflared tunnel login
cloudflared tunnel create home-server
Šios komandos atidaro naršyklės langą "Cloudflare" autentifikacijai ir sukuria tunelio ID bei susijusį DNS įrašą.
systemdserviso kūrimas, kad tunelis veiktų automatiškai:
bash# /etc/systemd/system/cloudflared.service
[Unit]
Description=Cloudflare Tunnel
After=network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/cloudflared tunnel --config /root/.cloudflared/config.yml run home-server
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
- Konfigūracijos failas
/root/.cloudflared/config.yml:
yamltunnel: home-server
credentials-file: /root/.cloudflared/home-server.json
ingress:
- hostname: proxmox.tavo-domenas.lt
service: https://localhost:8006
originRequest:
noTLSVerify: true
- hostname: kameros.tavo-domenas.lt
service: http://localhost:1984
- hostname: jellyfin.tavo-domenas.lt
service: http://localhost:8096
- hostname: grafana.tavo-domenas.lt
service: http://localhost:3000
- service: http_status:404
Kodėl tai saugiau už VPN? VPN atveria visą jūsų vidinį tinklą, o tai reiškia, kad jei įsilaužėlis randa VPN spragą, jis turi prieigą prie visko. "Cloudflare Tunnel" veikia "nulinio pasitikėjimo" (Zero Trust) principu – jis eksponuoja tik konkrečius servisus, ir kiekvienas užklausa yra autentifikuojama "Cloudflare" krašte prieš pasiekiant jūsų serverį. Be to, jūsų tikrasis IP lieka paslėptas, o "Cloudflare" apsaugo nuo DDoS atakų.
Saugos sluoksnis: Cloudflare Access ir kodėl slaptažodžiai nebėra pakankami
Net ir naudojant tunelį, standartinė slaptažodžio apsauga nėra pakankama. Slaptažodžiai gali būti pavogti, atspėti arba perimti "phishing" atakomis. Čia į pagalbą ateina "Cloudflare Access" – tai tapatybės ir prieigos valdymo (IAM) sprendimas, kuris integruojasi su išoriniais tapatybės tiekėjais (IdP), tokiais kaip "Google", "GitHub", "Microsoft Azure AD" ir kitais.
Kaip tai veikia praktiškai:
- "Cloudflare Zero Trust" administravimo skydelyje sukuriama politika, kuri nustato, kas gali pasiekti jūsų subdomenus.
- Kai vartotojas bando pasiekti, pavyzdžiui,
proxmox.tavo-domenas.lt, jis pirmiausiai nukreipiamas į "Cloudflare" autentifikavimo puslapį. - Vartotojas turi prisijungti naudodamas, tarkime, savo "Google" paskyrą.
- Po sėkmingo prisijungimo, "Cloudflare" patikrina, ar šis vartotojas yra jūsų nustatytame leidžiamų el. paštų sąraše.
- Jei taip – vartotojas peradresuojamas į jūsų vidinį servisą per šifruotą tunelį.
Papildomas sluoksnis – "one-time PIN" (OTP) per el. paštą gali būti įjungtas kaip antrasis autentifikacijos faktorius (2FA). Tai reiškia, kad net jei kas nors pavogs jūsų "Google" slaptažodį, jiems vis tiek reikės prieigos prie jūsų el. pašto, kad gautų PIN kodą. Šis dviejų sluoksnių apsaugos mechanizmas paverčia jūsų namų serverį saugesniu už daugelį įmonių tinklų.
Moon statuso puslapis (Workers): Savarankiškai veikianti stebėjimo sistema
"Moon" yra "Cloudflare Workers" pagrindu sukurta stebėjimo sistema, kuri tikrina jūsų serverio sveikatą iš išorės. Tai yra "kanarėlė anglies kasykloje" – jei "Moon" nemato jūsų serverio, vadinasi, kažkas negerai, net jei jūs patys vietoje viską matote veikiant.
Kaip tai veikia:
- "Cloudflare Worker" kas 5 minutes atlieka HTTP užklausą į jūsų serverio sveikatos tikrinimo galinį tašką (pvz.,
https://proxmox.tavo-domenas.lt/api/health). - Serveris atsako su JSON objektu, kuriame nurodo pagrindinių servisų būseną (Proxmox, go2rtc, Jellyfin, ZFS būsena, laisva vieta NAS saugykloje).
- Jei atsakymas nėra gautas arba jame nurodoma klaida, "Worker" siunčia pranešimą (pvz., per "Telegram" bot'ą).
"Worker" kodo pavyzdys (JavaScript):
javascriptexport default {
async scheduled(event, env, ctx) {
await checkHealth(env);
},
async fetch(request, env) {
// Galima paleisti ir rankiniu būdu
if (request.url.includes('/check')) {
await checkHealth(env);
return new Response('Health check triggered', { status: 200 });
}
return new Response('Not found', { status: 404 });
}
};
async function checkHealth(env) {
const endpoints = [
{ name: 'Proxmox', url: 'https://proxmox.tavo-domenas.lt:8006', status: 200 },
{ name: 'go2rtc', url: 'https://kameros.tavo-domenas.lt:1984/api/streams', status: 200 },
{ name: 'Jellyfin', url: 'https://jellyfin.tavo-domenas.lt/health', status: 200 }
];
let status = 'OK';
for (const ep of endpoints) {
try {
const resp = await fetch(ep.url, {
headers: { 'User-Agent': 'Moon-Health-Check' },
timeout: 5000
});
if (resp.status !== ep.status) {
status = `FAIL: ${ep.name} returned ${resp.status}`;
}
} catch (e) {
status = `FAIL: ${ep.name} - ${e.message}`;
}
}
// Siunčiame pranešimą per Telegram bot
if (status !== 'OK') {
const TELEGRAM_BOT_TOKEN = env.TELEGRAM_BOT_TOKEN;
const TELEGRAM_CHAT_ID = env.TELEGRAM_CHAT_ID;
const msg = `🚨 SERVER ALERT: ${status}`;
await fetch(`https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ chat_id: TELEGRAM_CHAT_ID, text: msg })
});
}
}
Ši sistema yra visiškai nemokama ("Cloudflare Workers" nemokama kvota leidžia 100,000 užklausų per dieną) ir veikia nepriklausomai nuo jūsų infrastruktūros, suteikdama "trečiosios šalies" stebėjimo perspektyvą.
Nors saugus ir greitas tinklas yra būtinas, jis tėra infrastruktūros kraujotakos sistema. Virtualizacijos sluoksnis – tai vieta, kur ši sistema įgyja formą ir prasmę, ir būtent jį nagrinėsime trečiojoje dalyje.