Bilgisayarımız bir ağa bağlanırken ağ arayüzlerini kullanır. Bir bilgisayarda Ethernet, kablosuz ağ veya sanal ağ kartı gibi birden fazla arayüz bulunabilir.
Ağa bağlandığımızda sistemimiz dhcp isteği gönderebilir. Ağda bir dhcp sunucusu varsa IP adresi, ağ maskesi, varsayılan ağ geçidi ve dns gibi ayarları bilgisayarımıza iletir. Böylece bu bilgileri elle tanımlamadan dhcp’nin gönderdiği ayarları uygulayarak bağlanabiliriz.
MAC adresi, aynı yerel ağdaki ağ kartlarının birbirlerini tanıyabilmesi için kullanılır. IP adresi ise farklı ağlar arasında yönlendirme yapabilmemizi sağlar.
TCP başlığında MAC adresi bulunmaz. Çünkü TCP, taşıma katmanında çalışır. MAC adresi Ethernet çerçevesinde, IP adresi IP başlığında, port bilgileri ise TCP veya UDP başlığında yer alır. Bu nedenle yerel ağınızın dışındaki biriyle haberleştiğinizde karşı taraf sizin MAC adresinizi doğrudan göremez. Ancak günümüzde birçok uygulama, paket başlıklarından bağımsız olarak kullanıcıdan izin alıp MAC adresini normal bir veri gibi çekebilir.

Broadcast
Broadcast, aynı yerel ağdaki bütün cihazlara paket gönderebilmemizi sağlar. Gönderilen broadcast trafiği aynı ağdaki (genel olarak) cihazlara ulaşabilir.
Bir paketin ağdaki başka cihazlar tarafından görülebilmesi, içeriğinin okunabileceği anlamına gelmez. Haberleşmede şifreleme kullanılıyorsa trafik görülse bile içerisindeki veriler doğrudan okunamayabilir.
Default Gateway ve Router
Bilgisayarımız kendi ağı dışında bulunan bir hedefe gitmek istediğinde paketi varsayılan ağ geçidine gönderir. Default gateway çoğunlukla yerel ağımızı başka ağlara bağlayan router’ın IP adresidir.
Router’lar paketleri nereye göndereceklerine routing table üzerinden karar verirler. Yönlendirme tablosunda hedef ağlar ve bu ağlara ulaşmak için kullanılacak yollar bulunur.
Kullandığımız bilgisayarlar da bazı durumlarda router gibi çalışabilir. Örneğin ana bilgisayarımız, sanal makinelerin internete çıkabilmesi için onların trafiğini başka bir ağ arayüzüne yönlendirebilir.
Yönlendirme Tablosu
ip route komutuyla bilgisayarımızın yönlendirme tablosunu görebiliriz. Çıktıda doğrudan bağlı ağlar, default route, kullanılacak ağ arayüzü ve bazı satırlarda kaynak IP adresi bulunur.

default via ile başlayan satır, yönlendirme tablosunda daha özel bir rota bulunmadığında paketin hangi ağ geçidine gönderileceğini belirtir.
dev, trafiğin hangi ağ arayüzünden çıkacağını gösterir.
src, bu rota kullanılırken tercih edilecek kaynak IP adresini gösterir. Her rota satırında src bulunması zorunlu değildir.
Yönlendirme tablosunda hedefe uygun özel bir rota bulunmuyorsa sistem default route’u kullanır. Default route da bulunmuyorsa hedefe ulaşılamadığına dair bir hata alabiliriz.
Not: No route to host hatası yalnızca yönlendirme tablosunda rota bulunmadığı için oluşmaz, güvenlik duvarı veya hedefe yerel ağ üzerinden ulaşılamaması gibi durumlarda da görülebilir.
Loopback
127.0.0.0/8 IPv4 loopback bloğudur. En sık kullandığımız loopback adresi 127.0.0.1 adresidir.
Loopback arayüzü, bilgisayarın ağ trafiğini fiziksel ağ kartına göndermeden kendi üzerine yönlendirebilmesini sağlar.
Loopback arayüzüne tanımlanan adresler de birer ağ ayarıdır. Bu ayarlar değiştirilebilir ancak birçok program 127.0.0.1 adresinin loopback olarak kullanılacağını varsaydığı için gereksiz yere değiştirilmemelidir.
ip ve ifconfig
Eskiden ağ arayüzlerini görüntülemek ve yapılandırmak için ifconfig yaygın olarak kullanılıyordu. Artık tarih oldu. Günümüzde bunun yerine çoğunlukla ip komutu kullanılır.

CIDR ve Bir Arayüze Birden Fazla IP Verilmesi
IP adresleri eskiden sınıflı adresleme adı verilen bir yöntem kullanıyordu. Yöntem IP adreslerini 5 ana sınıfıa bölüyor ve birçok adresin boşa harcanmasına sebep oluyordu. Bundan ötürü zamanla bu fikir terk edildi ve CIDR denen yeni gösterime geçildi.
IP adreslerinin sonunda gördüğümüz /24, /16 veya benzeri ifadeler CIDR gösterimidir. Buradaki sayı, adresin kaç bitinin ağ kısmını oluşturduğunu belirtir.
Bir ağ arayüzünde yalnızca bir IP adresi bulunmak zorunda değildir. Aynı arayüze birden fazla IPv4 veya IPv6 adresi tanımlanabilir.

VirtualBox Ağ Modları
Sanal makinelerin birbirleriyle, ana makineyle ve internetle nasıl haberleşeceğini VirtualBox içerisindeki ağ modları belirler. Ağ ayarları yapmak için sanal makine ayarlarına girip network sekmesine geçmeniz gerekir.

- NAT: Sanal makine, VirtualBox’ın adres çevirisini kullanarak ana makine üzerinden internete çıkar. Cihazlara yönlendirilebilir public IP verilebilen ağlarda NAT zorunlu değildir.
- Bridged Adapter: Sanal makine, fiziksel ağa ayrı bir cihaz gibi bağlanır. DHCP’den IP alabilir ve aynı ağdaki cihazlarla haberleşebilir.
- Internal Network: Yalnızca aynı isimdeki iç ağa bağlı sanal makineler haberleşebilir. Ana makine ve internet bu ağa dahil değildir.
- Host-only Adapter: Ana makine ile sanal makineler arasında özel bir ağ kurar. Ana makine ve aynı host-only ağa bağlı sanal makineler birbiriyle haberleşebilir.
Özgür yazılım kampında hemen hemen sistem temelli birçok eğitimin temel gereksinimi olan sanal makinelerin birbirleriyle ve ana makine ile haberleşmesi için bir yapılandırma yapalım.
İlk olarak virtualbox’ta sol sekmede yer alan ağ simgesine gidelim. Burada sanal ağ kartları oluşturabiliyoruz. Oluştur seçeneğine tıklayıp oluşturalım.

vboxnet2 adında bir sanal ağ kartı oluşturdum. Ağı 192.168.58.0/24 . Bir sonraki adımda haberleştireceğimiz sanal makinelerin ağ ayarlarını yapacağız.
Bunun için ilk önce haberleştireceğimiz sanal makineleri shutdown edelim. Ardından sağ tık ile sanal makine ayarlarına gidelim, network ayarlarına gelelim.
İlk ağ kartını NAT, ikinci ağ kartını “host-only adapter” olarak değiştirelim.

İkinci ağ kartını vboxnet2 ağ kartına geçirelim. Bunu da “Ad” kısmından yapıyoruz.

haberleştireceğimiz diğer sanal makinelerde de aynı ayarları tekrar edelim.
Ardından iki sanal makineyi de başlatıp ağ arayüzlerini görmek için,
komutunu yazalım. Burada enp0s8 ağ kartını gördükten sonra ilk önce sanal ağ kartını ayağa kaldıralım.
Ancak öncesinde iki dağıtım arasında farklı olarak gördüğüm bir özelliği paylaşmak istiyorum. Debian’da ağ kartı eklendiğinde down durumda başlarken, rocky’de bir şey yapmama gerek kalmadan up oldu. Devam edelim.
Ağ arayüzünü ayağa kaldırdıktan sonra bir ip atayalım.
Rocky’e geçelim.
Artık sanal makineleri ana makineyle ve birbirleriyle haberleştirebiliyoruz. Ancak şimdi sistemi yeniden başlattıktan sonra da devam edebilmesi için gerekli ayarlamaları yapalım.
İlk olarak Rocky de network manager ayarlamalarını yapacağız. Mevcut durumu incelemek için
komutunu giriyorum. Çıktı da

enp0s8 kartı mevcut durumda açılışta gelecek yeni ağ ayarını uyguluyor. Biz açılışta daima aynı ip’yi alması için düzenlemelere başlayalım.
Bu komutta,
- nmcli connection modify enp0s8: enp0s8 bağlantı profilini değiştirir.
- ipv4.method manual: IP adresinin DHCP’den değil, elle verileceğini belirtir.
- ipv4.addresses 192.168.58.12/24: Kalıcı IP adresini ve ağ maskesini tanımlar.
- ipv4.gateway : Bu bağlantıya ağ geçidi verilmez. İnternete NAT kartı olan enp0s3 üzerinden çıkacağız.
- ipv4.dns : Host-only bağlantıya DNS sunucusu verilmez.
- ipv4.never-default yes: enp0s8 bağlantısının varsayılan internet yolu olmasını engeller.
- connection.autoconnect yes: Sistem açıldığında bu bağlantının otomatik etkinleştirilmesini sağlar.
Kısacası enp0s8 kartına kalıcı olarak 192.168.58.12/24 adresini verir, fakat internet trafiğini NAT kartına bırakır.
Ardından yeni ayarlarla bağlantı yeniden etkinleştirmek için
tekrar network manager’ın durumuna baktığımızda

başarıyla rocky tarafında işlemi tamamladığımızı görüyoruz. Şimdi diğer makine içinde bu işlemleri yapalım.
Ubuntu’da, Rocky’den farklı olarak ağ ayarlarını doğrudan NetworkManager üzerinden değil, Netplan yapılandırma dosyası üzerinden yapıyoruz. Çünkü Ubuntu ağ yapılandırmasında varsayılan olarak Netplan’i, Rocky Linux ise doğrudan NetworkManager’ı kullanır.
Mevcut konfigürasyon dosyalarını inceleyerek başlayalım.
-rw——- 1 root root 303 Sep 2 07:55 00-installer-config.yaml
Mevcut dosya içeriğine ek olarak enp0s8’e statik ip ataması yapalım.

Burada enp0s3 kartını Nat için, yani internete çıkabilmek için, enp0s8 kartını diğer sanal makine ve ana makine ile bağlantı kurabilmek için yapılandırdık.
Dosyada bir yazım hatası yapıp yapmadığımızı kontrol etmek için
herhangi bir çıktı almıyoruz, yapmamışız. Ayarları uygulayabiliriz.

Burada enter bastıktan sonra başarıyla yapılandırmayı tamamladık.
Makineler arasında ve anamakineye doğrudan ping atmayı denediğimde başarıyla çalışıyor. İki makineden de internete çıkabiliyorum. Statik ip alıp almadığını kontrol etmek için bilgisayarımı farklı bir ağa bağladım, ardından sanal makineleri yeniden başlattım. Yine aynı ip’ler üzerinden iletişim kurabilmeye devam edebildim. Yani bu işlemi de başarıyla tamamlamış olduk.
IPv4 ve IPv6
IPv4 adresleri 32 bit uzunluğundadır. İnternete bağlanan cihazların sayısı arttığı için kullanılabilecek IPv4 adresleri yetersiz kalmaya başlamıştır. Bunun üzerine IPv6 peydah olur.
IPv6 adresleri 128 bit uzunluğundadır ve IPv4’e göre çok daha geniş bir adres alanı sağlar.
TCP ve UDP
TCP bağlantı kurarak çalışan ve verilerin sıralı, eksiksiz ulaştırılmasını kontrol eden bir taşıma protokolüdür. Paket kaybolursa yeniden gönderilmesini sağlayabilir. Bu kontroller nedeniyle UDP’ye göre daha fazla işlem yapar.
UDP bağlantı kurmadan datagram (tcp de segment udp de datagram denir) gönderir. Paketin ulaşıp ulaşmadığını, sırasını veya tekrar gönderilmesini kendi başına garanti etmez. Bu nedenle gecikmenin düşük tutulmasının önemli olduğu bazı uygulamalarda tercih edilebilir.
Not: TCP’nin güvenilir olması, veriyi şifrelediği veya güvenli hâle getirdiği anlamına gelmez. UDP de doğrudan “güvensiz” bir protokol değildir. Buradaki fark güvenlikten ziyade teslimat ve bağlantı kontrolüdür.
UDP kullanılacaksa uygulama paket kaybını tolere edebilmeli veya ihtiyaç duyduğu kontrolü kendisi sağlamalıdır.
Video aktarımı hem TCP hem UDP üzerinden yapılabilir. Canlı bir videoda kaybolan tek bir kareyi yeniden istemek, bu sırada yeni karelerin de gecikmesine neden olabilir. Bu yüzden bazı gerçek zamanlı yayınlarda eski paketi tekrar beklemek yerine akışa devam etmek yani UDP kullanmak tercih edilir
DNS de ihtiyaca göre hem UDP hem TCP kullanabilir.
Port
Bir IP adresi üzerinde birden fazla servis çalışabilir. Port numaraları, gelen verinin aynı IP adresindeki hangi uygulamaya veya servise teslim edileceğini belirler.
Örneğin tek bir sunucuda web servisi, SSH servisi ve başka uygulamalar farklı portları dinleyebilir. Böylece aynı IP adresi üzerinden birden fazla ağ hizmeti sunulabilir.
Netmask ve Subnetting
Netmask veya CIDR prefix değeri, IP adresinin ağ ve cihaz kısımlarını birbirinden ayırır. Başka bir ifadeyle ağın hangi adres aralığını kapsadığını belirler.
Subnetting, büyük bir IP ağını daha küçük ağlara bölmemizi sağlar. Böylece farklı cihaz grupları ayrı ağlarda tutulabilir.
Klasik IPv4 subnetlerinde ağ adresi ve broadcast adresi cihazlara verilmez. Bu nedenle subnet hesabında iki adres cihazlara dağıtılamaz. Toplam adres sayısından 2’yi çıkartarak kullanılabilir IP adres sayısını öğrenebiliriz.
Ağ kısmı
Cihaz kısmı
/24 → 256 toplam adres → 254 kullanılabilir adres
Firewall
Firewall, ağ trafiğini belirlenen kurallara göre kabul eder veya engeller. Kaynak ve hedef IP adresi, protokol ve port gibi bilgilere bakarak hangi trafiğin geçebileceğine karar verebilir.
OSI Modeli
OSI modeli, ağ haberleşmesini farklı katmanlara ayırarak incelememizi sağlar. Fiziksel bağlantıdan uygulamaya kadar yapılan işlemler yedi katman altında ele alınır.
Bu model sayesinde MAC adresi, IP adresi, TCP, UDP ve uygulama protokolleri gibi yapıların ağ haberleşmesinin hangi bölümünde görev yaptığını daha kolay ayırabiliriz.

traceroute
traceroute, hedefe giderken paketin geçtiği router’ları adım adım görmemizi sağlar.

Çıktı da yıldız görünmesi, ilgili denemeye zaman aşımı süresi içerisinde cevap gelmediğini gösterir. Bunun nedeni router’ın cevap vermemesi, ICMP mesajlarının güvenlik duvarı tarafından engellenmesi veya ağdaki başka bir filtre olabilir.
Yıldız görülen bir adım, paketin kesin olarak orada durduğu anlamına gelmez. Sonraki adımlar görünüyorsa trafik o router üzerinden veya o noktadan geçmeye devam etmiş ancak ilgili cihaz traceroute denemesine cevap vermemiş olabilir.
Public ve Private IP Çakışması
Bir public IP bloğunu private ağımızda gelişigüzel kullanırsak yönlendirme karışıklığı yaşayabiliriz. Sistem bu adresin yerel ağda mı yoksa internet üzerinde mi bulunduğuna yönlendirme tablosuna göre karar verir.
Yerel ağdaki rota daha özel olduğu için aynı public adrese internet üzerinden ulaşmak istediğimizde paket yanlışlıkla yerel ağa gönderilebilir. Bu nedenle private ağlarda private kullanım için ayrılmış adres bloklarını tercih ederiz.
ping, TTL ve Traceroute İlişkisi
TTL, bir IP paketinin kaç router geçebileceğini sınırlar. Paket her router’dan geçtiğinde TTL değeri bir azaltılır. Değer sıfıra düştüğünde router paketi düşürür ve çoğunlukla ICMP Time Exceeded mesajı gönderir.
ping tarafından gönderilen paketlerin başlangıç TTL değeri işletim sistemine göre değişebilir. Ping çıktısında gördüğümüz TTL ise cevap paketinin bize ulaştığı andaki kalan değerdir.
Traceroute bu mekanizmadan yararlanır. İlk denemede düşük bir TTL değeri kullanır. TTL ilk router’da bittiğinde o router cevap verir. Sonraki denemelerde TTL kademeli olarak artırılır ve böylece yol üzerindeki router’lar ortaya çıkarılır.
ICMP
Ping, hata bildirimleri ve traceroute sırasında alınan bazı cevaplar ICMP üzerinden taşınır.
ICMP, TCP veya UDP değildir. Ayrı bir protokoldür. Bu nedenle TCP ve UDP servislerinde olduğu gibi port numarası kullanmaz.
Kimi zaman güvenlik sıkılaştırılması yapılırken ICMP’nin gelişi sistemlerce kısıtlanabilir, yani ping yanıtı alınmaması bağlantının kesin olarak çalışmadığını göstermez
ss
ss komutuyla kendi bilgisayarımızdaki dinleme durumunda olan TCP ve UDP soketlerini görebiliriz.
t: TCPu: UDPl: Yalnızca dinleyen soketlern: Port isimleri yerine port numaraları

netstat eskiden bu iş için yaygın olarak kullanılıyordu. Günümüzde çoğunlukla ss tercih edilir. Netstat tamamen yok olmuş değildir ancak eski kabul edilir ve bazı sistemlerde varsayılan olarak bulunmaz.
Netcat
Netcat ile belirli bir port üzerinde dinleme başlatabiliriz. Notlarda nc -lvp 4444 kullanarak 4444 numaralı portu dinleyen bir örnek oluşturduk.

nmap
Nmap, ağdaki cihazları ve bu cihazlarda erişilebilir durumda olan portları incelemek için kullanılabilir. Tek bir araç içerisinde farklı tarama yöntemleri ve seçenekler bulunur.
Telnet
Telnet, uzak bir sisteme düz metin üzerinden bağlantı kurulmasını sağlayan bir protokoldür. Haberleşme şifrelenmediği için uzaktan yönetim amacıyla yerini büyük ölçüde SSH’ye bırakmıştır.
Telnet istemcisi günümüzde bir hedefteki TCP portuna bağlantı kurulup kurulamadığını kontrol etmek için de kullanılabilir. Ancak bir porta Telnet ile bağlanamamak her zaman o porta hiç kimsenin bağlanamayacağı anlamına gelmez. Güvenlik duvarı kuralları, kaynak IP adresi veya servisin yalnızca belirli arayüzleri dinlemesi sonucu değiştirebilir.
Tcpdump
Tcpdump, bir ağ arayüzünden geçen paketleri yakalamamızı ve incelememizi sağlar. Yalnızca TCP paketlerini değil, UDP ve ICMP gibi farklı protokollere ait paketleri de filtreleyebilir.
Belirli bir TCP portundaki gelen ve giden trafiği filtreleyerek kaydedebiliriz.

Tcpdump ile UDP trafiğini filtreleyerek paketleri yakalayacağız.
Bunu iki ayrı sanal makineden yürüteceğim. Yazının önceki kısımlarında statik ip ataması yaptığım rocky ve ubuntu benimle olacak. Öncelikle ubuntu’da,
tcpdump’ı enp0s8’deki udp paketlerini filtreleyecek şekilde ayarladık
Ardından,
rocky’den ubuntu’ya bir udp paketi yolladık.

başarıyla tcpdump aracıyla udp paketlerini de filtreyebilmiş olduk.