RDP Monster

Linux'ta IP Adresi Öğrenme: ip addr, hostname -I, curl

Linux'ta IP Adresi Öğrenme: ip addr, hostname -I, curl

Linux'ta IP adresinizi ip addr ile kontrol edin

Güncel her Linux dağıtımında "IP adresim nedir" sorusunu yanıtlayan komut, iproute2 paketinden gelen ip komutudur. Tüm büyük dağıtımlarda varsayılan olarak bulunur, root gerektirmeden çalışır ve bu rehberdeki diğer komutlar ya onu sarmalar ya da onun yerini almıştır. Temel kullanım, her arayüzü tüm adresleriyle listeler:

ip addr show
ip a            # same thing, shorter

Tek ağ kartı olan bir sunucuda çıktı şöyle görünür (valid_lft ömür satırları kısaltılmıştır):

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 203.0.113.25/24 brd 203.0.113.255 scope global eth0
    inet6 2001:db8:1::25/64 scope global
    inet6 fe80::5054:ff:fe12:3456/64 scope link

Nasıl okunur:

  • Arayüz adı. lo geri döngü arayüzüdür, her zaman 127.0.0.1 adresine sahiptir ve yalnızca makinenin kendisinden erişilebilir. Buradaki gerçek kart eth0; öngörülebilir arayüz adlarıyla ens3, enp0s3 veya eno1 olarak görünür, kablosuz kartlar ise wl ile başlar.
  • inet IPv4 adresidir, inet6 ise IPv6. /24 soneki CIDR gösteriminde önek uzunluğudur; 255.255.255.0 alt ağ maskesinin modern yazımıdır.
  • scope global bu makinenin ötesine yönlendirilebilir anlamına gelir; scope link (fe80:: satırı) yalnızca bağlı ağ segmentinde geçerlidir; scope host ise geri döngüdür.
  • LOWER_UP ile birlikte state UP arayüzün etkin olduğunu ve bağlantısının bulunduğunu gösterir. state DOWN veya NO-CARRIER, bir arayüzün hiç adresi olmamasının olağan nedenidir.

Faydalı varyantlar:

ip -4 addr                  # IPv4 only
ip -6 addr                  # IPv6 only
ip -br -4 addr              # one line per interface
ip -4 addr show dev eth0    # a single interface

Kısa biçim (-br), birden fazla arayüz olduğunda (Docker çalıştıran bir VPS'te olağan durum) Linux'ta IP adresi kontrol etmenin en hızlı yoludur:

$ ip -br -4 addr
lo               UNKNOWN        127.0.0.1/8
eth0             UP             203.0.113.25/24
docker0          DOWN           172.17.0.1/16

hostname -I: sadece adresler

Yalnızca adreslere ihtiyacınız varsa hostname -I (büyük I), yapılandırılmış tüm adresleri tek satırda, boşlukla ayrılmış olarak, geri döngü ve IPv6 link-local adresleri hariç tutarak yazdırır:

$ hostname -I
203.0.113.25 2001:db8:1::25

İki uyarı. Küçük harfli hostname -i farklı bir komuttur: makinenin ana makine adını /etc/hosts ve DNS üzerinden çözümler; bu da Debian ve Ubuntu'da genellikle 127.0.1.1 sonucunu verir. Ayrıca hostname -I adresleri garantili bir sırayla yazdırmaz, docker0 gibi sanal köprüler de dahildir; dolayısıyla hostname -I | awk '{print $1}' insanlar için bir kısayoldur, betikler için güvenilir bir "birincil IP" değildir. Bu seçenek POSIX değildir: Debian, Ubuntu, Fedora ve RHEL'de bulunur, Alpine gibi minimal BusyBox tabanlı imajlarda bulunmayabilir.

ifconfig, nmcli ve networkctl

ifconfig (kullanımdan kaldırıldı, net-tools)

Eski eğitimlerde gösterilen komut ifconfig'dir. net-tools paketine aittir, yıllardır iproute2 lehine kullanımdan kaldırılmıştır ve güncel Ubuntu, Debian ve Fedora/RHEL sürümlerinin varsayılan kurulumunda yer almaz. command not found hatası alıyorsanız ip komutuna geçin ya da paketi kurun:

sudo apt install net-tools     # Debian / Ubuntu
sudo dnf install net-tools     # Fedora / RHEL / Rocky / Alma
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 203.0.113.25  netmask 255.255.255.0  broadcast 203.0.113.255
        inet6 fe80::5054:ff:fe12:3456  prefixlen 64  scopeid 0x20<link>

Okunaklıdır, ama gerçek bir sınırı vardır: ifconfig her arayüz için yalnızca bir IPv4 adresi gösterir. ip addr add ile eklenen ve birden fazla genel IP'si olan bir VPS'te sık görülen ikincil adresler onun için görünmezdir.

nmcli ve networkctl

Masaüstü sistemler ile Fedora/RHEL ailesi sunucular ağlarını NetworkManager ile yönetir; Ubuntu Server, systemd-networkd üzerinde netplan kullanır ve birçok VPS imajı aynı modeli izler. Her birinin adresi, ağ geçidini ve DNS'i tek blokta gösteren bir durum aracı vardır:

nmcli device show eth0
nmcli -g IP4.ADDRESS device show eth0     # NetworkManager: just the address field
networkctl status eth0                    # systemd-networkd

-g (--get-values) bayrağı tek bir alanın çıplak değerini, önek uzunluğu dahil, yazdırır; bu da betikler için kullanışlıdır. Makinenizin hangi yığını çalıştırdığından, hatta hangi dağıtım ve sürüm olduğundan emin değilseniz, önce komut satırından işletim sistemi sürümünü belirleyin; yanıt hangi aracın mevcut olduğunu belirler.

Genel IP adresinizi curl ile bulun

Yukarıdakilerin tümü arayüzde yapılandırılmış adresi bildirir. Çoğu VPS'te genel IPv4 doğrudan arayüze atanır, dolayısıyla internetin gördüğü adres de budur. Evde, ofiste veya bazı bulut ortamlarında arayüz RFC 1918 aralıklarından (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) özel bir adres taşır ve bir yönlendirici ya da 1:1 NAT çıkışta bunu çevirir. Genel tarafı görmenin tek güvenilir yolu harici bir servise sormaktır:

curl -4 icanhazip.com
curl -4 ifconfig.me/ip
curl -4 https://api.ipify.org
curl -6 icanhazip.com          # public IPv6, if the host has one

-4 ve -6 bayrakları adres ailesini zorlar; bu, çift yığınlı makinelerde önemlidir: bunlar olmadan curl IPv6'yı tercih edip beklemediğiniz bir adres döndürebilir. icanhazip.com 2021'den beri Cloudflare tarafından işletiliyor ve düz metin döndürüyor. Yanıtı "trafiğimin çıktığı adres" olarak okuyun: VPN veya proxy arkasındayken bu, internet servis sağlayıcınızın değil, çıkış düğümünün adresidir.

IPv6: global ve link-local

Neredeyse her Linux arayüzü en az bir inet6 satırı gösterir ve bu sıklıkla genel bir IPv6 adresi sanılır. fe80:: ile başlayan ve scope link olarak işaretlenen satır link-local'dir: her arayüz bunu otomatik olarak üretir, yalnızca bağlı ağda geçerlidir ve internetten asla erişilemez. Genel bir IPv6 adresi scope global olarak işaretlenir ve 2 ya da 3 ile başlar, çünkü global unicast alanı 2000::/3'tür.

ip -6 addr show scope global
ip -6 route show default

İlk komut hiçbir şey yazdırmıyorsa makinenin yönlendirilebilir IPv6 adresi yoktur ve curl -6 başarısız olur. Masaüstünde temporary olarak işaretlenmiş ek global adresler gizlilik uzantılarından gelir; sunucularda bunlar kapalı tutulur, böylece adres DNS ve güvenlik duvarı kuralları için sabit kalır.

Varsayılan ağ geçidi, yönlendirme ve DNS

Adresin kendisi, makinenin herhangi bir yere ulaşıp ulaşamayacağını söylemez. Bunu yönlendirme tablosu söyler ve ip route (kısa biçim ip r) onu yazdırır:

$ ip route
default via 203.0.113.1 dev eth0 proto static
203.0.113.0/24 dev eth0 proto kernel scope link src 203.0.113.25

default via satırı varsayılan ağ geçididir; daha özel bir yol eşleşmediğinde her paketin kullandığı yönlendiricidir. İkinci satır, adres yapılandırıldığında çekirdek tarafından eklenmiştir; src alanı, makinenin o ağda kaynak olarak tercih ettiği adrestir. Buradaki en kullanışlı numara bunun üzerine kurulur: çekirdeğe belirli bir hedef için hangi adresi kullanacağını sorun.

$ ip route get 1.1.1.1
1.1.1.1 via 203.0.113.1 dev eth0 src 203.0.113.25 uid 1000
    cache

Bu src değeri, tanımı gereği, hangi arayüz, köprü ya da tünel bulunursa bulunsun makinenin internete doğru giden adresidir. DNS için /etc/resolv.conf hâlâ bakılacak yerdir, ancak systemd-resolved çalıştıran sistemlerde (18.04'ten beri Ubuntu, yeni Fedora sürümleri) yalnızca yerel saplama 127.0.0.53 adresini içerir; gerçek üst düzey çözümleyiciler resolvectl status ile ya da NetworkManager kullanan makinelerde nmcli device show çıktısındaki IP4.DNS alanlarıyla görülür.

Betik yazımı: IP adresini bir değişkene koymak

Etkileşimli çıktı insanlar için tasarlanmıştır; bir betiğin ise çevresinde hiçbir şey olmayan tek bir adrese ihtiyacı vardır. Şu kalıplar, en basitten en sağlamına doğru, işi görür:

# One interface, IPv4, prefix length stripped
IP=$(ip -4 -o addr show dev eth0 | awk '{print $4}' | cut -d/ -f1)

# Robust: the source address used to reach the internet
IP=$(ip route get 1.1.1.1 | awk '{for (i=1; i<=NF; i++) if ($i == "src") {print $(i+1); exit}}')

# Same thing with JSON output and jq
IP=$(ip -j route get 1.1.1.1 | jq -r '.[0].prefsrc')

# Public IP, with a timeout so the script never hangs offline
PUBLIC_IP=$(curl -4 -s --max-time 5 https://icanhazip.com)

-o bayrağı ip komutunun her adresi tek satırda yazdırmasını sağlar; bu da awk alan konumlarını güvende tutar. Arayüz birden fazla IPv4 adresi taşıyorsa head -n 1 ekleyin. -j bayrağı ip komutunu JSON çıktısına geçirir ve ardından jq alanları ada göre seçer. Birden fazla makinede çalışan her şeyde bu biçimi tercih edin: arayüz adları makineden makineye değişir, alan adları değişmez.

KomutNe gösterirEn uygun kullanım
ip addr / ip -br -4 addrHer arayüz, tüm adresler, durumGünlük kullanım, bütün resim
hostname -ITüm adresler tek satırdaHızlı bir bakış
ip route get 1.1.1.1İnternete doğru kullanılan kaynak adresBetikler, çok arayüzlü makineler
ifconfigArayüz başına bir IPv4 (kullanımdan kaldırıldı)Eski sistemler, eski eğitimler
curl -4 icanhazip.comİnternetin gördüğü genel IPv4NAT, VPN, bir VPS adresini doğrulama

Bir VPS'te neler değişir

Adanmış IPv4 adresi olan bir VPS'te ip -4 addr, hostname -I ve curl -4 icanhazip.com aynı adresi döndürmelidir, çünkü genel IP arada NAT olmadan doğrudan arayüze yapılandırılmıştır. Uyuşmadıklarında yolda bir şey vardır: sağlayıcı tarafında bir NAT, unutulmuş bir VPN istemcisi ya da hostname -I çıktısında ilk sırayı kapan bir Docker köprüsü.

Adres doğrulandıktan sonra iki şeyi kontrol edin. Birincisi, adresin gerçekten erişilebilir olup olmadığı ve hangi portlarda; bu, yapılandırılmış olup olmadığından farklı bir sorudur: Linux sunucunuzdaki açık portları kontrol edin (içeriden ss -tulpn, dışarıdan nmap ile). İkincisi, ters DNS. Adresinizin PTR kaydını sorgulayın:

dig -x 203.0.113.25 +short

Yeni bir VPS genellikle sağlayıcıya ait genel bir adla ya da hiçbir şeyle yanıt verir. Sunucu e-posta gönderiyorsa veya herhangi bir genel servis sunuyorsa, ana makine adını ve ters DNS'i birbiriyle uyumlu olacak şekilde ayarlayın; özellikle giden e-posta, PTR kaydı ile HELO adı uyuşmadığında rutin olarak reddedilir.

Bu komutlar en hızlı, adresi yalnızca size ait olan ve değişmeyen bir sunucuda refleks hâline gelir. rdp.monster'dan bir Linux VPS adanmış IPv4 ile gelir: tam root erişimi, adanmış CPU ve RAM, sınırsız (adil kullanım) bant genişliği ve KYC yok, kripto kabul ediliyor, aylık $8.99'dan başlıyor. Sunucu, ödeme onaylandıktan yaklaşık 10 saniye sonra çevrimiçi olur; yani üzerinde çalıştıracağınız ilk ip -br -4 addr komutu bir an ötede.

Sık sorulan sorular

hostname -I neden birden fazla IP adresi gösteriyor?

Her arayüzdeki tüm yapılandırılmış adresleri, sanal köprüler dahil, listeler.
hostname -I, geri döngü ve IPv6 link-local adresleri dışında tüm arayüzlerdeki tüm adresleri yazdırır; bu nedenle Docker, libvirt, bir VPN istemcisi veya ikinci bir ağ kartı bulunan bir makine birkaç adres gösterir. docker0 172.17.0.1 adresini, virbr0 genellikle 192.168.122.1 adresini ekler ve çift yığınlı bir makine global IPv6 adresini de katar. Sıralama garanti değildir. Trafiğinizin gerçekten hangi adresten çıktığını bilmeniz gerektiğinde ip route get 1.1.1.1 komutunu çalıştırın ve onun src alanını okuyun.

Ubuntu'da ifconfig neden command not found diyor?

ifconfig, güncel dağıtımların artık varsayılan olarak kurmadığı net-tools paketine aittir.
ifconfig komutu net-tools paketinin bir parçasıdır; iproute2 lehine kullanımdan kaldırılmıştır ve güncel Ubuntu, Debian ve Fedora/RHEL sürümlerinin varsayılan kurulumunda bulunmaz. Yerine geçen komut, her yerde mevcut olan ip addr komutudur. Bir betik ya da eski bir alışkanlık gerçekten bunu gerektiriyorsa paketi sudo apt install net-tools veya sudo dnf install net-tools ile kurun; ancak ifconfig arayüz başına yalnızca bir IPv4 gösterir ve ip addr add ile eklenen ikincil adresleri gizler.

hostname -i neden 127.0.1.1 döndürüyor?

Küçük harfli -i, ana makine adını /etc/hosts üzerinden çözümler ve Debian tabanlı sistemler bunu 127.0.1.1 adresine eşler.
hostname -i ağı hiç incelemez: sistemin ana makine adını, herhangi bir uygulamanın yapacağı gibi /etc/hosts ve ardından DNS üzerinden çözümler. Debian ve Ubuntu kurulumları, makinenin ağ olmadan kendi adını çözebilmesi için ana makine adını 127.0.1.1 adresine eşleyen bir satır ekler ve geri gelen değer o satırdır. Gerçek arayüz adreslerini okuyan büyük I biçimini, hostname -I, ya da tüm ayrıntı için ip -4 addr komutunu kullanın.

Ağımdaki diğer cihazların IP adreslerini nasıl bulurum?

Komşu tablosunu ip neigh ile okuyun ya da alt ağı nmap -sn ile tarayın.
Makinenizin yakın zamanda paket alışverişi yaptığı cihazlar ARP/komşu önbelleğindedir ve ip neigh show ile (ya da net-tools kuruluysa arp -a ile) görüntülenir. Eksiksiz bir tablo için alt ağa ping taraması yapın: nmap -sn 192.168.1.0/24 yanıt veren her makineyi listeler, ters DNS ad sağlıyorsa adlarıyla birlikte. Kendi ağınızı yazın; bunu ip route çıktısındaki scope link yolundan okuyabilirsiniz. Bir VPS'te bu nadiren işe yarar ve komşu adresleri taramak sağlayıcınızın kullanım koşullarını ihlal edebilir.

Adrien Roche, Altyapı ve Hosting Editörü

Windows Server ve Linux filolarını 10+ yıldır işleten sistem mühendisi. Adrien, rdp.monster altyapı dokümantasyonunu yönetir ve RDP, VPS hosting, sunucu yönetimi, ağ ve gizlilik araçları üzerine rehberlerimizi yazar.

Bayilik programımıza kaydolun

Bilgileriniz

Ad Soyad(Zorunlu)
E-posta adresinizi girin, şu adreste bir hesabınız olmalı: dashboard.rdp.monster !

Şirketiniz

Varsa web sitenizin adresini girin
Hizmetleri müşterilerinize nasıl satacağınızı kısaca anlatın; örneğin forumlarda insanlarla konuşarak.

Canavarlar bile çerezlere bayılır!

Tarama deneyiminizi geliştirmek, kişiselleştirilmiş reklam veya içerik sunmak ve trafiğimizi analiz etmek için çerez kullanıyoruz. «Kabul Et»'e tıklayarak çerez kullanımımızı onaylarsınız.