Ağ yapılandırma, tanılama ve genel Linux sorun giderme, sistem yönetiminin önemli parçalarıdır. Linux sistemleriyle çalışan bir geliştirici için bile Linux ağ komutları hakkında bilgi sahibi olmak ek bir avantajdır.

Özellikle, DevOps mühendisi olmak veya SRE ekibinde yer almak istiyorsanız, günlük faaliyetlerinizin bir parçası olacağı için tüm Linux troubleshooting komutlarını bilmek önemlidir.

Bu yazıda, Linux sistemlerinde yerel olarak bulunan önemli Linux ağ ve troubleshooting komutlarını ele alacağız.

En İyi Linux Ağ ve Sorun Giderme Komutları Nelerdir?

Aşağıda yerel olarak mevcut olan troubleshooting komutlarının bir listesi bulunmaktadır:

Terminal KomutuAçıklama
hostnameSunucunun hostname’ini kontrol etmek ve ayarlamak için kullanılır.
hostHost DNS ayrıntılarını almak için kullanılır.
pingICMP protokolünü kullanarak uzak sunucunun erişilebilir olup olmadığını kontrol eder. Ayrıca paketlerin round trip time’ını gösterir.
curlBir sunucudan veya sunucuya veri aktarmak için kullanılan cross-platform utility’dir. Birçok ağ sorununu gidermek için kullanılabilir.
wgetDosyaları indirmek için kullanılan utility’dir. Proxy bağlantılarını ve bağlantılarını troubleshooting için kullanılabilir.
ipifconfig yerine kullanılan bir komuttur. Sistemlerin ağ arayüzlerini yapılandırmak ve bilgi almak için kullanılabilir.
arpARP cache’i görüntülemek ve yönetmek için kullanılan utility’dir.
ss/netstatÖncelikle bağlantıları ve portlar üzerindeki PID’leri ve Unix soketlerini kontrol etmek için kullanılır.
tracerouteICMP protokolünü kullanarak hedef sunucuya ulaşan hopları bulur. Ayrıca hoplar arasındaki süreyi gösterir.
mtrmtr, ping ve traceroute’un bir karışımıdır. Ayrıca intermediate hosts ve responsiveness gibi ek bilgiler sağlar.
digBir domain adıyla ilişkili DNS kayıtlarını almanıza yardımcı olur.
nslookupdig’e benzer bir komuttur.
ncTCP/UDP soketlerini debug etmek için kullanılan utility’dir.
telnetPortlar üzerinde uzak bağlantıyı test etmek için kullanılabilir.
routeTüm route tablosu bilgilerini almanıza yardımcı olur.
tcpdumpAğ paketlerini yakalamanıza ve ağ sorunlarını analiz etmenize yardımcı olan utility’dir.
lsofAçık tüm dosyaları ve bunları açan işlem bilgilerini listeler.

Her komutu anlayalım ve Linux’u troubleshooting için nasıl kullanabileceğimizi görelim.

Önemli Not: Bu yazıda bahsedilen her komutun/utility’nin birçok seçeneği ve flag’i vardır. Her komutun bir man sayfası vardır ve kullanmanız gereken flag’leri ve seçenekleri belirlemek için bunu kullanabilirsiniz. Örneğin, ip komutu için terminalde man ip yazarak o komut hakkında tüm detayları alabilirsiniz.

hostname

Hostname komutu, makinenin hostname’ini görüntülemek ve hostname’i ayarlamak için kullanılır.

hostname

Hostname komutunu kullanarak makine için yeni bir hostname ayarlayabilirsiniz. Örneğin,

sudo hostname sezer.in

Eğer hostname’i hostname komutuyla ayarlarsanız, makineyi yeniden başlattığınızda, hostname, hostname dosyasında belirtilen isme değişir (örn: /etc/hostname).

Bu nedenle hostname’i kalıcı olarak değiştirmek istiyorsanız, sunucuda bulunan /etc/hosts dosyasını veya ilgili hostname dosyasını kullanabilirsiniz.

  • Ubuntu makineler için /etc/hostname dosyasını değiştirebilirsiniz.
  • RHEL, CentOS ve Fedora için /etc/sysconfig/network dosyasını değiştirebilirsiniz.

host

Host komutu, bir IP veya DNS adının tersine lookup’ı için kullanılır.

Örneğin, bir IP’ye bağlı DNS’yi bulmak istiyorsanız, aşağıdaki gibi host komutlarını kullanabilirsiniz.

host 8.8.8.8

Ayrıca bir domain adıyla ilişkili IP adresini bulmak için de kullanabilirsiniz. Örneğin,

host google.com

ping

Ping networking utility’si, uzak sunucunun erişilebilir olup olmadığını kontrol etmek için kullanılır. Öncelikle bağlantıyı kontrol etmek ve ağ sorunlarını gidermek için kullanılır.

Şu ayrıntıları sağlar:

  • Gönderilen ve alınan byte’lar
  • Gönderilen, alınan ve kaybolan paketler
  • Yaklaşık round-trip time (milisaniye cinsinden)

Ping komutunun aşağıdaki gibi sözdizimi vardır:

ping <IP veya DNS>

Örneğin,

ping google.com

Bir IP adresine ping atmak için:

ping 8.8.8.8

Ping çıktısını ctrl+c kullanmadan sınırlamak istiyorsanız, aşağıda gösterildiği gibi bir sayı ile “-c” flag’ini kullanabilirsiniz:

ping -c 1 google.com

curl

Curl utility’si öncelikle bir sunucudan veya sunucuya veri aktarmak için kullanılır. Ancak, ağ sorunlarını gidermek için de kullanılabilir.

Ağ sorunlarını gidermek için curl, DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET ve TFTP gibi protokolleri destekler.

Örneğin, curl telnet kullanarak port 22’de bağlantıyı kontrol edebilir.

curl -v telnet://192.168.33.10:22

FTP bağlantısını kontrol etmek için curl kullanabilirsiniz.

curl ftp://ftptest.net

Web server bağlantısını troubleshooting için de kullanabilirsiniz.

curl https://google.com -I

wget

Wget komutu, öncelikle web sayfalarını fetch etmek için kullanılır.

Wget, ağ sorunlarını gidermek için de kullanılabilir.

Örneğin, wget kullanarak proxy server bağlantılarını troubleshooting yapabilirsiniz.

wget -e use_proxy=yes http_proxy=<proxy_host:port> https://google.com

Bir web sitesinin çalışıp çalışmadığını kontrol edebilirsiniz.

wget www.google.com

ip (ifconfig)

ip komutu, routes ve ağ arayüzlerini görüntülemek ve manipulate etmek için kullanılır. ip komutu, ifconfig’in yeni versiyonudur. ifconfig tüm sistemlerde çalışır, ancak ifconfig yerine ip komutunu kullanmak daha iyidir.

ip komutunun birkaç örneğine bir göz atalım.

Ağ cihazlarını ve konfigürasyonu görüntüleyin

ip addr

Bu komutu pipes ve grep ile kullanarak daha ayrıntılı çıktılar alabilirsiniz, örneğin eth0 arayüzünün IP adresini almak gibi. Bu, IP’nin dinamik olarak fetched edilmesi gereken automation tools üzerinde çalışırken çok yararlıdır.

Aşağıdaki komut, eth0 ağ arayüzünün IP adresini alır.

ip a | grep eth0  | grep "inet" | awk -F" " '{print $2}'

Belirli bir arayüzün ayrıntılarını alın

ip a show eth0

Routing tablolarını listeleyebilirsiniz.

ip route
ip route list

arp

ARP (Address Resolution Protocol), yerel ağların IP adresleri ve MAC adresleri hakkında sistemin etkileşimde bulunduğu cache tablosunu gösterir.

arp

Örnek çıktı:

root@sezer:~$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.2.3                 ether   52:54:00:12:35:03   C                     eth0
192.168.33.1             ether   0a:00:27:00:00:00   C                     eth1
10.0.2.2                 ether   52:54:00:12:35:02   C                     eth0

ss (netstat)

Ss komutu, netstat’ın yerini almıştır. Hâlâ tüm sistemlerde netstat komutunu kullanabilirsiniz.

Ss komutunu kullanarak, netstat komutundan daha fazla bilgi alabilirsiniz. Ss komutu hızlıdır çünkü tüm bilgileri kernel userspace’den alır.

Şimdi ss komutunun birkaç kullanımına göz atalım.

Tüm bağlantıları listeleme

ss komutu, makinenizdeki tüm TCP, UDP ve Unix soket bağlantılarını listeleyecektir.

root@sezer:~$ ss
Netid  State      Recv-Q Send-Q   Local Address:Port       Peer Address:Port
u_str  ESTAB      0      0                    * 7594                  * 0
u_str  ESTAB      0      0      @/com/ubuntu/upstart 7605                  * 0  
u_str  ESTAB      0      0                    * 29701                 * 0
u_str  ESTAB      0      0      /var/run/dbus/system_bus_socket 29702                 * 0
tcp    ESTAB      0      400      172.31.18.184:ssh         1.22.167.31:61808

ss komutunun çıktısı büyük olacaktır, bu yüzden çıktıyı kaydırmak için ss | less komutunu kullanabilirsiniz.

TCP, UDP ve Unix soketlerini filtreleme

TCP, UDP veya Unix soket ayrıntılarını filtrelemek istiyorsanız, ss komutuyla birlikte “-t”, “-u” ve “-x” flag’lerini kullanın. Belirli portlara yapılan tüm bağlantıları gösterecektir. Bağlı ve dinlenen portları listelemek istiyorsanız, aşağıda gösterildiği gibi belirli flag ile birlikte a kullanabilirsiniz.

ss -ta
ss -ua
ss -xa

Tüm dinleyen portları listeleme

root@sezer:~$ ss -lt
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
LISTEN     0      128                     *:ssh                      *:*
LISTEN     0      50                     :::http-alt                 :::*
LISTEN     0      50                     :::55857                   :::*
LISTEN     0      128                    :::ssh                     :::*
LISTEN     0      50                     :::53285                   :::*

Tüm kurulan bağlantıları listeleme

Tüm kurulan portları listelemek için, aşağıda gösterildiği gibi state established flag’ini kullanın.

ss -t -r state established

Dinleme durumundaki tüm soketleri listelemek için,

ss -t -r state listening

traceroute

Eğer sisteminizde veya sunucunuzda traceroute utility’si yoksa, yerel depodan kurabilirsiniz.

Traceroute, bir ağ sorun giderme utility’sidir. Traceroute kullanarak, belirli bir paketin hedefe ulaşması için gereken hop sayısını bulabilirsiniz. Esasen, paketin sunucunuzdan uzak ana bilgisayara kadar olan yolunu izleyebilirsiniz.

Örneğin,

traceroute google.com

Çıktı aşağıdaki gibi olacaktır;

traceroute to google.com (173.194.33.163), 30 hops max, 60 byte packets 1 ec2-50-112-0-84.us-west-2.compute.amazonaws.com (50.112.0.84) 1.974 ms 1.895 ms 1.899 ms 2 100.64.1.247 (100.64.1.247) 1.414 ms 100.64.1.137 (100.64.1.137) 1.127 ms 100.64.1.97 (100.64.1.97) 1.313 ms 3 100.64.0.198 (100.64.0.198) 1.443 ms 100.64.0.62 (100.64.0.62) 2.160 ms 100.64.0.60 (100.64.0.60) 2.116 ms 10 66.249.94.214 (66.249.94.214) 6.313 ms 7.104 ms 209.85.249.34 (209.85.249.34) 5.986 ms 11 209.85.244.65 (209.85.244.65) 6.157 ms 6.341 ms 6.574 m. 12 sea09s18-in-f3.1e100.net (173.194.33.163) 6.302 ms 6.517 ms 6.071 ms

Yukarıdaki çıktı, sezer.in AWS ec2 sunucusundan google.com’a ulaşmak için hop sayısını (12) gösterir.

Bu utility, ağ paketlerinin ana bilgisayara ulaşmaması ile ilgili sorunları gidermek istediğinizde çok kullanışlıdır.

mtr

mtr utility’si, ağ darboğazlarını gidermek için kullanılan bir ağ tanılama aracıdır. Ping ve traceroute’un işlevselliğini birleştirir.

Örneğin, aşağıdaki komut, gerçek zamanlı olarak traceroute çıktısını gösterir.

mtr google.com
linux ağ komutları

Mtr report

–report flag’ini kullanarak bir rapor oluşturabilirsiniz. mtr raporunu çalıştırdığınızda, hedefe 10 paket gönderir ve raporu oluşturur.

image 8

dig

Eğer DNS lookup ile ilgili bir işiniz varsa, “dig” komutunu kullanarak DNS name server’ları sorgulayabilirsiniz.

Dig ile tüm DNS kayıtlarını alın

Aşağıdaki komut, x.com’un tüm DNS kayıtlarını ve TTL bilgilerini döndürür.

dig x.com ANY
image 9

Verbose olmadan çıktı almak için +short kullanın.

dig google.com ANY +short

Dig ile belirli bir DNS kaydını alın

Örneğin, belirli bir domain adı için A kaydını almak istiyorsanız, dig komutunu kullanabilirsiniz. +short, bilgiyi verbose olmadan sağlar.

dig www.google.com A +short

Benzer şekilde, diğer kayıt bilgilerini ayrı ayrı almak için aşağıdaki komutları kullanabilirsiniz.

dig google.com CNAME +short
dig google.com MX +short
dig google.com TXT +short
dig google.com NS +short

Dig ile ters DNS lookup yapın

Dig kullanarak ters DNS lookup gerçekleştirebilirsiniz. Aşağıdaki komutu kullanarak 8.8.8.8 IP adresini istediğiniz IP ile değiştirin.

dig -x 8.8.8.8

nslookup

Nslookup (Name Server Lookup) utility’si, DNS girişlerini kontrol etmek için kullanılır. Dig komutuna benzer.

Bir domain’in DNS kayıtlarını kontrol etmek için aşağıdaki komutu kullanabilirsiniz

nslookup google.com

Ayrıca IP adresi ile tersine lookup yapabilirsiniz.

nslookup 8.8.8.8

Bir domain adının tüm DNS kayıtlarını almak için aşağıdaki komutu kullanabilirsiniz.

nslookup -type=any google.com

Benzer şekilde, mx, soa gibi kayıtlar için sorgu yapabilirsiniz.

nc (netcat)

nc (netcat) komutu, ağ komutlarının İsviçre çakısı olarak bilinir.

nc kullanarak, belirli bir portta çalışan bir hizmetin bağlantısını kontrol edebilirsiniz.

Örneğin, ssh portunun açık olup olmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz.

nc -v -n 192.168.33.10 22

netcat ayrıca TCP/UDP üzerinden veri transferi ve port taraması için kullanılabilir.

Port taraması bulut ortamlarında önerilmez. Ortamınızda port tarama işlemlerini gerçekleştirmek için bulut sağlayıcısına başvurmanız gerekir.

telnet

Telnet komutu, bir porttaki TCP bağlantılarını troubleshooting için kullanılır.

Telnet kullanarak port bağlantısını kontrol etmek için aşağıdaki komutu kullanın.

telnet 10.4.5.5 22

route

“route” komutu, sisteminizin route tablosunun ayrıntılarını almak ve manipulate etmek için kullanılır. Route komutunun birkaç örneğine bakalım.

Tüm rotaları listeleme

Mevcut rotaların tümünü listelemek için “route” komutunu herhangi bir argüman olmadan çalıştırın.

root@sezer:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ip-172-31-16-1. 0.0.0.0         UG    0      0        0 eth0
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0
172.31.16.0     *               255.255.240.0   U     0      0        0 eth0

Çıktıyı herhangi bir hostname olmadan sayısal formda almak istiyorsanız, “route” komutuyla birlikte “-n” flag’ini kullanabilirsiniz.

root@sezer:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.31.16.1     0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.31.16.0     0.0.0.0         255.255.240.0   U     0      0        0 eth0

tcpdump

tcpdump komutu, öncelikle ağ trafiğini troubleshooting için kullanılır.

Not: tcpdump komutunun çıktısını analiz etmek belirli bir öğrenme gerektirir, bu nedenle bunun açıklanması bu makalenin kapsamı dışındadır.

tcpdump komutu, sistemin ağ arayüzleriyle çalışır. Bu nedenle komutu çalıştırmak için yönetici ayrıcalıklarına ihtiyacınız vardır.

Tüm ağ arayüzlerini listeleme

Tüm arayüzleri listelemek için aşağıdaki komutu kullanın.

sudo tcpdump --list-interfaces

Belirli bir arayüzde paketleri yakalama

Belirli bir arayüzdeki paketlerin dump’ını almak için aşağıdaki komutu kullanabilirsiniz.

Not: Paket yakalamayı durdurmak için ctrl + c tuşlarına basın.

sudo tcpdump -i eth0

Paket yakalamayı sınırlama

Paket yakalamayı sınırlamak için -c flat’ini bir sayı ile kullanabilirsiniz.

Örneğin,

sudo tcpdump -i eth0 -c 10

Tüm arayüzlerde paket yakalama

Tüm arayüzlerde paketleri yakalamak için aşağıda gösterildiği gibi any flag’ini kullanın.

sudo tcpdump -i any

lsof

lsof, günlük Linux troubleshooting’de kullanılacak bir komuttur. Bu komut, Linux sistemleriyle çalışan herkes için eşit derecede önemlidir.

Tüm açık dosyaları listelemek için lsof komutunu çalıştırın.

lsof

Geliştiricilerin ve DevOps mühendislerinin sıkça karşılaştığı hatalardan biri “Bind failed error: Address already in use” hatasıdır. Bu durumda, bir port ile ilişkili işlem kimliğini aşağıdaki komutu kullanarak bulabilirsiniz. Ardından, portu serbest bırakmak için işlemi sonlandırabilirsiniz.

lsof -i :8080

Üçüncü Parti Ağ Sorun Giderme Araçları

Üçüncü parti çözümlerden temin edilebilecek daha fazla ağ sorun giderme komut satırı utility’si mevcuttur.

Bu araçları ayrı ayrı yüklemeniz ve sorun giderme amaçlarınız için kullanmanız gerekir. Güvenlik uyumluluğu nedenleriyle, her kuruluş bunu yapmanıza izin vermeyebilir.

Ancak, üçüncü taraf araçları kullanma seçeneğiniz varsa, onları keşfedebilirsiniz.

Aşağıdaki tabloda, farklı kategoriler altında bazı araç bilgilerini organize ettim:

KategoriAçık Kaynak Araçlar
Network ScannersNmap, Zenmap (Nmap için GUI)
Packet AnalyzersWireshark, Tcpdump
Bandwidth MonitorsBandwidthD, Cacti
Port ScannersNmap, Masscan
Ping/Traceroute ToolsMTR (My Traceroute)
Wireless Network AnalyzersWireshark (kablosuz için), Kismet
Network SimulatorsGNS3, Mininet
DNS ToolsDNSperf
Network Performance Testingiperf

Sonuç

Bu makalede, ağ sorun giderme ve yapılandırma için önemli Linux komut satırı utility’lerini ele aldık.

Sistem yönetimi, DevOps veya SRE rolleriyle yeni başlıyorsanız, üzerinde çalıştığınız projeleri desteklemek için bu utility’leri öğrenmek önemlidir.

Her utility’nin birçok işlevselliği vardır ve gereksinimlerinizi karşılamak için daha fazlasını keşfedebilirsiniz.

Eğer ilginizi çekerse Helm Chart : Yeni Başlayanlar İçin 1 Konuda Detaylı Rehber konuma da göz atabilirsiniz.