İçerik
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 Komutu | Açıklama |
---|---|
hostname | Sunucunun hostname’ini kontrol etmek ve ayarlamak için kullanılır. |
host | Host DNS ayrıntılarını almak için kullanılır. |
ping | ICMP protokolünü kullanarak uzak sunucunun erişilebilir olup olmadığını kontrol eder. Ayrıca paketlerin round trip time’ını gösterir. |
curl | Bir sunucudan veya sunucuya veri aktarmak için kullanılan cross-platform utility’dir. Birçok ağ sorununu gidermek için kullanılabilir. |
wget | Dosyaları indirmek için kullanılan utility’dir. Proxy bağlantılarını ve bağlantılarını troubleshooting için kullanılabilir. |
ip | ifconfig yerine kullanılan bir komuttur. Sistemlerin ağ arayüzlerini yapılandırmak ve bilgi almak için kullanılabilir. |
arp | ARP 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. |
traceroute | ICMP protokolünü kullanarak hedef sunucuya ulaşan hopları bulur. Ayrıca hoplar arasındaki süreyi gösterir. |
mtr | mtr, ping ve traceroute’un bir karışımıdır. Ayrıca intermediate hosts ve responsiveness gibi ek bilgiler sağlar. |
dig | Bir domain adıyla ilişkili DNS kayıtlarını almanıza yardımcı olur. |
nslookup | dig’e benzer bir komuttur. |
nc | TCP/UDP soketlerini debug etmek için kullanılan utility’dir. |
telnet | Portlar üzerinde uzak bağlantıyı test etmek için kullanılabilir. |
route | Tüm route tablosu bilgilerini almanıza yardımcı olur. |
tcpdump | Ağ paketlerini yakalamanıza ve ağ sorunlarını analiz etmenize yardımcı olan utility’dir. |
lsof | Açı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
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.
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
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:
Kategori | Açık Kaynak Araçlar |
---|---|
Network Scanners | Nmap, Zenmap (Nmap için GUI) |
Packet Analyzers | Wireshark, Tcpdump |
Bandwidth Monitors | BandwidthD, Cacti |
Port Scanners | Nmap, Masscan |
Ping/Traceroute Tools | MTR (My Traceroute) |
Wireless Network Analyzers | Wireshark (kablosuz için), Kismet |
Network Simulators | GNS3, Mininet |
DNS Tools | DNSperf |
Network Performance Testing | iperf |
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.