Çoğu homelab düz bir ağla başlar: Pi-hole çalıştıran bir Raspberry Pi, bir NAS, Proxmox ve bir düzine konteyner çalıştıran bir mini PC; hepsi İSS modeminin dağıttığı 192.168.1.0/24 ağında. Akıllı TV ve artık firmware güncellemesi almayan bir kamera bu ağı NAS'ınızın yönetim sayfasıyla paylaşır, iki yıl önceki Jellyfin port yönlendirmesi de hâlâ açıktır.
Bu yazı, IoT cihazlarını ve misafirleri yalıtan, servisleri güvenli biçimde dışarıya açan ve kolayca kurtarılabilen bir homelab ağı tasarlıyor, ardından onu çiziyor.
Ağın yapması gerekenler
- Yalıtım. TV'ler, kameralar ve misafir telefonları internete ulaşır; NAS'ınıza ya da hypervisor'ınıza değil.
- Güvenli dışa açma. Her servis için ayrı bir port değil, kimliği doğrulanmış ve şifreli tek bir giriş yolu.
- Kurtarılabilirlik. Bir disk öldüğünde ağı hafızanızdan değil, yedeklerden ve bir diyagramdan yeniden kurarsınız.
Donanım: çift NAT olmaması için bridge modunda bir İSS modemi; ikisi de açık kaynak olan, VLAN'lar arasında yönlendirme yapan ve DHCP, DNS ile VPN'leri çalıştıran bir OPNsense ya da pfSense CE güvenlik duvarı; 802.1Q VLAN desteği olan yönetilebilir bir switch; SSID'leri VLAN'lara eşleyen bir erişim noktası; VM'ler ve LXC konteynerleri için bir Proxmox VE sunucusu; ve bir NAS.
VLAN planı
RFC 1918 özel adres aralıklarından (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) bir /16 seçin ve her VLAN'a bir /24 verin. Eve bağlanacağınız ağlarda yaygın olan 192.168.0.0/24 ve 192.168.1.0/24'ten, ayrıca 172.17.0.0/16'dan (Docker'ın olağan varsayılan bridge ağı) ve 100.64.0.0/10'dan (Tailscale'in adresleri) kaçının. Bu örnek, VLAN ID'sini üçüncü oktet olarak kullanan 10.23.0.0/16'yı kullanıyor.
| VLAN | Ad | Alt ağ | Neler bulunur | Dışarıya izin verilen |
|---|---|---|---|---|
| 10 | Management (yönetim) | 10.23.10.0/24 | Güvenlik duvarı, switch, AP ve Proxmox'un yönetim arayüzleri | Yalnızca güncellemeler |
| 20 | Trusted (güvenilir) | 10.23.20.0/24 | Dizüstü bilgisayarlarınız ve telefonlarınız | İnternet, proxy, yönetici cihazlardan yönetim |
| 30 | Servers (sunucular) | 10.23.30.0/24 | VM'ler, konteynerler, NAS, proxy, Pi-hole | Güncellemeler için internet |
| 40 | IoT | 10.23.40.0/24 | TV, hoparlörler, kameralar, akıllı prizler | Yalnızca internet |
| 50 | Guest (misafir) | 10.23.50.0/24 | Misafirler | Yalnızca internet |
Güvenlik duvarından switch'e, switch'ten erişim noktasına ve switch'ten Proxmox'a giden bağlantılar etiketli trunk'lardır; OPNsense dokümantasyonu, güvenlik duvarı trunk'ına etiketsiz VLAN'lar karıştırılmaması konusunda uyarır. Diğer cihazlar etiketsiz access portu alır.
Proxmox'ta, Proxmox VE ağ dokümantasyonundaki gibi bridge'i VLAN-aware yapın ve sunucunun yönetim adresini VLAN 10'a koyun. Böylece her VM kendi VLAN etiketini alır:
auto vmbr0
iface vmbr0 inet manual
bridge-ports eno1
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
auto vmbr0.10
iface vmbr0.10 inet static
address 10.23.10.5/24
gateway 10.23.10.1
Her kablosuz VLAN için bir SSID oluşturun: Trusted, IoT ve Guest. Cisco Meraki'nin önerisine göre erişim noktası başına en fazla üç SSID olmalı, çünkü her SSID en düşük veri hızında her 100 ms'de bir kendi beacon çerçevesini gönderir.
VLAN'lar arası güvenlik duvarı kuralları
OPNsense ve pfSense kuralları trafiğin girdiği arayüzde, yukarıdan aşağıya değerlendirir: İlk eşleşen kural kazanır, hiçbir kurala uymayan trafik de varsayılan engelleme kuralına takılır. İkisi de stateful çalışır; bu yüzden Trusted'ın 443 üzerinden proxy'ye erişmesine izin verdiğinizde yanıtlar da geri gelebilir.
Her VLAN için önce ihtiyaç duyduğu şeye izin verin, ardından RFC1918 adlı bir alias ile tüm özel adres aralıklarını engelleyin, en son da internete izin verin. IoT arayüzünde:
| # | Eylem | Kaynak | Hedef | Port | Neden |
|---|---|---|---|---|---|
| 1 | Pass | IoT net | Pi-hole, 10.23.30.53 | 53 | Filtrelenmiş DNS |
| 2 | Block | IoT net | Güvenlik duvarının kendi adresleri | any | Yönetim sayfalarına erişim yok |
| 3 | Block | IoT net | RFC1918 alias'ı | any | Diğer VLAN'lara erişim yok |
| 4 | Pass | IoT net | any | any | İnternet |
2 numaralı kural, güvenlik duvarının alias'ta olmayan genel WAN adresini de kapsar; pfSense bu hedefe This firewall (self) der. Dar kapsamlı istisnalar engelleme kurallarının üstüne yazılır: Trusted'dan 443 üzerinden proxy'ye, yönetici dizüstü bilgisayarınızdan 8006 üzerinden Proxmox web arayüzüne, Home Assistant'tan IoT'ye. Bu alias yalnızca IPv4'ü kapsar; VLAN'larınız IPv6 önekleri alıyorsa onları da engelleyin.
Sürpriz genellikle ekran yansıtmada (casting) çıkar. AirPlay ve Google Cast cihazları 224.0.0.251 üzerindeki multicast DNS ile bulur; Apple'ın belirttiği gibi bu trafik genellikle alt ağlar arasında yönlendirilmez. Trusted ile IoT arasında OPNsense'in os-mdns-repeater eklentisi gibi bir mDNS repeater çalıştırın ve Trusted'ın TV'ye erişmesine izin verin.
Reverse proxy arkasındaki servisler
Servers VLAN'ında Caddy, Traefik ya da Nginx Proxy Manager gibi tek bir reverse proxy TLS'i sonlandırır ve trafiği host adına göre yönlendirir; böylece güvenlik duvarı 443'e yalnızca tek bir adres için izin verir.
Sahibi olduğunuz bir alan adının altındaki adları kullanın, örneğin jellyfin.home.example.com. RFC 6762'nin multicast DNS için ayırdığı .local'dan kaçının; .internal ya da home.arpa altındaki adlar yerelde çalışır, ama hiçbir genel CA bunlar için sertifika vermez.
Sertifikaları Let's Encrypt'ten DNS-01 doğrulamasıyla alın: ACME istemciniz, DNS sağlayıcınızın API'si üzerinden _acme-challenge.<name> adresinde bir TXT kaydı oluşturur; böylece hiçbir şeyin internetten erişilebilir olması gerekmez. Wildcard sertifika veren tek doğrulama türü de budur ve sizin de bir wildcard sertifikaya ihtiyacınız var. Let's Encrypt her sertifikayı herkese açık Certificate Transparency günlüklerine gönderir; bu yüzden *.home.example.com servis listeniz yerine tek bir ad yayımlar. Caddy 2.10'dan beri diğer siteler eşleşen bir wildcard sertifikayı yeniden kullanır:
*.home.example.com {
tls {
dns cloudflare {env.CF_API_TOKEN}
}
abort
}
jellyfin.home.example.com {
reverse_proxy 10.23.30.21:8096
}
Bunun için caddy-dns/cloudflare modülünü içeren bir Caddy derlemesi ve yetkileri Zone.Zone:Read ile Zone.DNS:Edit ile sınırlı bir token gerekir. Sertifikalar bugün 90 gün geçerli, Şubat 2028'e kadar bu süre 45 güne inecek; bu yüzden yenilemeyi otomatikleştirin.
Uzaktan erişim seçenekleri
| Seçenek | İnternetin gördüğü | Efor | Ödünleşimler |
|---|---|---|---|
| 443'ü proxy'ye yönlendirmek | IP adresiniz ve her uygulamanın giriş sayfası | Düşük | Tek engel her uygulamanın kendi giriş ekranıdır; carrier-grade NAT arkasında çalışmaz |
| Güvenlik duvarında WireGuard | Kimliği doğrulanmamış paketleri yok sayan tek bir UDP portu | Orta | Erişilebilir bir genel IP ve cihaz başına bir anahtar çifti gerekir |
| Tailscale | İçeriye açık hiçbir şey | Düşük | Tailscale'in koordinasyon servisine ya da self-hosted Headscale'e dayanır; bu yazı yazılırken (Kasım 2026) Personal planı ücretsiz |
| Cloudflare Tunnel | İçeriye açık hiçbir şey | Düşük ila orta | TLS'i Cloudflare sonlandırır ve trafiğinizi görür; alan adınızın Cloudflare'de olması gerekir |
WireGuard kendi kullanımınız için iyi bir varsayılan seçimdir: WireGuard makalesine göre kimliği doğrulanmamış paketlere hiçbir zaman yanıt vermez, bu yüzden port tarayıcıları onu göremez. Yine de gelen bağlantılar için bir port gerektirir ve carrier-grade NAT bunu imkânsız kılar; WAN adresinizin RFC 6598 paylaşımlı aralığı olan 100.64.0.0/10 içinde olması bunun ele veren işaretidir.
Tailscale ve Cloudflare Tunnel ise bağlantıyı dışarıya doğru kurar. Tailscale'in DERP aktarıcıları yalnızca WireGuard ile şifreli kalan paketleri iletir ve bir subnet router, her VM'e istemci kurmadan Servers VLAN'ına ulaşır. Tunnel, VPN kurmayacak kişilerle paylaşılan servisler için uygundur; Cloudflare Access bir giriş adımı ekleyebilir. Zero trust mimari diyagramı, kimliğin neden ağ konumundan daha önemli olduğunu açıklıyor.
VLAN başına DNS ve DHCP
Güvenlik duvarı her VLAN'da DHCP sunar ve sunucular için rezervasyon tutar. OPNsense varsayılan olarak doğrulama yapan, özyinelemeli bir çözümleyici olan Unbound'u etkinleştirir. Trusted ve IoT için Servers VLAN'ında Pi-hole ya da AdGuard Home çalıştırın: İkisi de reklamları ve izleyicileri filtreler, *.home.example.com adlarını proxy'ye yönlendiren yerel kayıtları tutar ve diğer sorguları Unbound'a iletir (DNS nasıl çalışır yazısı tek bir sorguyu uçtan uca izliyor). Misafirler doğrudan güvenlik duvarını kullanır. Başka bir makinede ikinci bir filtreleme örneği çalıştırın: Tek örnek durursa bu VLAN'lar ad çözümlemesini kaybeder.
Yedekler ve güç
3-2-1 kuralını uygulayın: üç kopya, iki farklı depolama türü, biri başka bir konumda. VM'leriniz birinci kopyadır, NAS'a ya da bir Proxmox Backup Server'a alınan gecelik yedekler ikinci, bir bulut bucket'ındaki şifreli kopya da üçüncü. Proxmox Backup Server artımlı, tekilleştirilmiş ve şifreli yedekler alır; Proxmox bunları tam olarak güvenmediğiniz hedeflerde bile güvenli sayar. RAID ve snapshot'lar yedek değildir. Güvenlik duvarı yapılandırmasını dışa aktarın (OPNsense ve pfSense'te tek bir XML dosyası), bu diyagramla birlikte saklayın ve geri yüklemeyi test edin; felaket kurtarma mimari diyagramı RPO ve RTO'yu ele alıyor.
Güvenlik duvarını, switch'i, Proxmox sunucusunu ve NAS'ı bir UPS'e bağlayın. Network UPS Tools (NUT) ile UPS'e bağlı makine, diğerlerine ağ üzerinden kapanmalarını söyler; bu yüzden switch'in de UPS'e bağlı olması gerekir. UPS'i prizden çekilen güce ve teknik veri sayfasındaki çalışma süresi grafiğine göre boyutlandırın: Saatlere değil, dakikalara ihtiyacınız var.
Homelab ağ diyagramı
Diyagram içeriği
- Internet
- OPNsense or pfSense
- Managed switch
- Access point
- VLAN 20 · Trusted
- Laptops and phones
- VLAN 40 · IoT
- TV, cameras, plugs
- VLAN 50 · Guest
- VLAN 30 · Servers
- Reverse proxy (Caddy)
- Proxmox VE host
- NAS (backups)
- Links
- deny inbound
- WireGuard UDP 51820
- trunk: 10–50
- trunk: 10, 20, 40, 50
- trunk: 10, 30
- HTTPS 443 from Trusted and VPN
- HTTP to apps
- nightly backups
- SSID home
- SSID iot
- SSID guest
Nasıl okunur:
- Üst sıra: internet, güvenlik duvarı, switch. WAN, UDP 51820 üzerindeki WireGuard dışında tüm gelen trafiği reddeder (kesikli).
- Trunk'lar etiketli VLAN'ları taşır: switch'e 10'dan 50'ye kadar, erişim noktasına PoE üzerinden 10, 20, 40 ve 50, Proxmox'a 10 ve 30.
- Çerçeveler VLAN'lardır, üzerlerinde ID, ad ve CIDR yazar. Management, yani VLAN 10, switch'in altındaki etikettir.
- Turkuaz kenarlar izin verilen akışlardır: Trusted'dan ve VPN istemcilerinden proxy'ye HTTPS 443, oradan uygulamalara HTTP. Kesikli gri çizgi gecelik yedektir.
- Erişim noktası home, iot ve guest SSID'lerini 20, 40 ve 50 numaralı VLAN'lara eşler.
- Markdown bloğu VLAN planını ve ayarları içerir; gösterge bağlantı renklerini açıklar.
Homelab ağ diyagramlarını net çizmek
- Her VLAN'ı ID, ad ve CIDR bilgisiyle doğrudan çerçevenin üzerinde etiketleyin.
- Trunk'ları taşıdıkları VLAN'larla işaretleyin. Bir trunk'ta eksik kalan VLAN klasik bir hatadır.
- Güvenlik duvarını VLAN'lar arasındaki tek yol olarak çizin, izin verilen akışları portlarıyla etiketleyin.
- Dışarıdan giriş yolunu gösterin, tek bir UDP portu olsa bile.
- Dışarıda bırakın: konteynerleri, MAC adreslerini ve switch port numaralarını. Bunlar, ağ topolojisi diyagramı rehberinin açıkladığı gibi fiziksel bir diyagrama aittir.
- Diyagramı yapılandırma yedeklerinizle birlikte saklayın ve bir kural değiştiğinde güncelleyin.
Archboard'da oluşturun
- Google ya da GitHub ile giriş yapın ve bir diyagram oluşturun.
- Ağ paketinden yan yana bir İnternet düğümü, OPNsense ya da pfSense etiketli bir Güvenlik duvarı ve bir Ağ anahtarı ekleyin; erişim noktası için de sağ alta bir Kablosuz düğümü koyun.
- VLAN 20, 30, 40 ve 50 için dört Alt ağ çerçevesi ekleyin ve her birine adını ve CIDR değerini yazın.
- Servers çerçevesine reverse proxy olarak bir Yük dengeleyici (pakette proxy türü yok), Proxmox için bir Sunucu ve Tür alanı NAS olarak ayarlanmış bir Cihaz ekleyin. Trusted çerçevesine dizüstü bilgisayar için bir Cihaz, IoT çerçevesine de IoT cihazı için bir Cihaz ekleyin.
- Bunları birbirine bağlayın, her bağlantının bağlantı türünü WAN, Ethernet, PoE ya da Wi-Fi olarak ayarlayın ve bağlantıyı VLAN'ları ya da SSID'siyle etiketleyin. İzin verilen akışları turkuaz, WireGuard'ı ve yedekleri kesikli çizin.
- Ağ paketinden bir Ağ göstergesi, VLAN planını içeren Temel paketinden bir Markdown bloğu ve her VLAN'ın kuralı için Temel Metin etiketleri ekleyin.
Uygulamalarınız bir compose.yaml dosyasında tanımlıysa Docker Compose'dan diyagrama aracı servis tarafının taslağını çıkarır, ağ diyagramları sayfası da paketin tamamını gösterir. Örnek 15 diyagram düğümü kullanıyor ve Free planın sınırları içinde kalıyor; bu sayı aynı zamanda Free planda diyagram başına sınırdır.
SSS
Bir homelab ağında hangi VLAN'lar olmalı? Genellikle beş tane: yönetim, güvenilir cihazlar, sunucular, IoT ve misafir. Yalnızca cihazlar farklı kurallara ihtiyaç duyduğunda yenisini ekleyin; her VLAN yeni kurallar ve çoğu zaman bir SSID daha getirir.
VLAN'lar için yönetilebilir bir switch gerekir mi? Evet, 802.1Q destekli yönetilebilir ya da akıllı (smart) bir switch ve SSID'leri VLAN'lara eşleyen bir erişim noktası gerekir. Yönetilemeyen switch'ler portları VLAN'lara atayamaz.
OPNsense ya da pfSense'i Proxmox üzerinde VM olarak mı çalıştırmalıyım? Bir cihazdan tasarruf ettirir, ama sunucu her yeniden başladığında bütün ev internetsiz kalır. Küçük, ayrı bir güvenlik duvarını kurtarmak daha kolaydır. Sanallaştıracaksanız WAN'a ayrı bir NIC verin ve yapılandırma dışa aktarımının bir kopyasını sunucunun dışında saklayın.
Self-hosted bir servis için port açmak güvenli mi? Uygulamanın giriş sayfasını internete açar; bu durumda uygulamanın güvenlik güncellemeleri sizin savunmanız olur. VPN'i tercih edin; port yönlendirmek zorundaysanız yalnızca 443'ü reverse proxy'ye yönlendirin ve önüne kimlik doğrulama ekleyin.
Yalnızca dahili servisler için Let's Encrypt kullanabilir miyim? Evet, DNS-01 ile: Bir TXT kaydı alan adını sizin kontrol ettiğinizi kanıtlar, bu yüzden servisin internetten hiç erişilebilir olması gerekmez. Wildcard sertifika, servis adlarını Certificate Transparency günlüklerinin dışında tutar.