Bilgisayarınızın ev ağındaki adresi 192.168.1.20 olabilir, ama bir siteye girdiğinizde o site sizi tamamen başka bir adresle görür. Mobil bir hatta ise aynı genel adresi aynı anda birden çok abone kullanıyor olabilir. Bu durumların kaynağı, IPv4 adres uzayının bir bölümünün özel amaçlara ayrılması ve adres kıtlığının getirdiği NAT katmanlarıdır.
Bu yazıda özel (RFC 1918), paylaşımlı (CGNAT, RFC 6598), loopback, link-local, dokümantasyon, çoklu yayın ve ayrılmış aralıkları tek tabloda topluyoruz. Ardından bir proxy'nin çıkış IP'sinin neden genel (public) olması gerektiğini açıklıyor, kendi adresinizi dört adımda sınıflandırmayı gösteriyoruz.
Özel (private) IP adresi nedir?
Özel IP adresleri, RFC 1918 ile kurum ve ev ağlarının iç kullanımına ayrılan üç bloktur: 10.0.0.0/8, 172.16.0.0/12 ve 192.168.0.0/16. Bu adresleri bir kayıt kuruluşuna başvurmadan, istediğiniz sayıda ayrı ağda aynı anda kullanabilirsiniz.
Bunun bir bedeli vardır: Bu adresler internette benzersiz değildir. Çok sayıda ev ağında aynı 192.168.1.1 yönlendirici adresi bulunur ve genel internetteki yönlendiriciler bu aralıklara giden paketleri iletmeyecek biçimde yapılandırılır. Cihazınız internete çıkarken yönlendiriciniz kaynak adresi kendi genel adresiyle değiştirir; bu işleme NAT denir.
Aynı aralığı kullanan iki ofis ağını bir VPN ile birleştirirseniz adresler çakışır. Bu yüzden iç ağ aralığını rastgele değil, bilinçli seçmek gerekir.
Özel amaçlı IPv4 aralıkları tablosu
Aşağıdaki tablo, günlük işlerde en sık karşınıza çıkan özel amaçlı blokları toplar. IANA'nın özel amaçlı adres kayıt defterinde (RFC 6890) daha fazlası vardır; örneğin 198.18.0.0/15 ağ cihazlarının performans ölçümleri için ayrılmıştır.
| Aralık | Ad | Başvuru | Ne için kullanılır |
|---|---|---|---|
0.0.0.0/8 | Bu ağ | RFC 1122 | 0.0.0.0 belirsiz adrestir; bir sunucuyu “tüm arayüzlerde dinle” diye ayarlarken kullanılır |
10.0.0.0/8 | Özel | RFC 1918 | Büyük kurum ve bulut iç ağları, 16.777.216 adres |
100.64.0.0/10 | Paylaşımlı adres alanı | RFC 6598 | Operatörlerin CGNAT için kullandığı iç adresler, 4.194.304 adres |
127.0.0.0/8 | Loopback | RFC 1122 | Cihazın kendisi; 127.0.0.1 “localhost” adresidir |
169.254.0.0/16 | Link-local | RFC 3927 | DHCP yanıt vermediğinde cihazın kendi seçtiği adres; yalnızca aynı bağlantıda geçerlidir |
172.16.0.0/12 | Özel | RFC 1918 | 172.16.0.0 ile 172.31.255.255 arası, 1.048.576 adres |
192.0.2.0/24 | Dokümantasyon (TEST-NET-1) | RFC 5737 | Örneklerde ve belgelerde kullanılır |
192.168.0.0/16 | Özel | RFC 1918 | Ev ve küçük ofis ağları, 65.536 adres |
198.51.100.0/24 | Dokümantasyon (TEST-NET-2) | RFC 5737 | Örneklerde ve belgelerde kullanılır |
203.0.113.0/24 | Dokümantasyon (TEST-NET-3) | RFC 5737 | Örneklerde ve belgelerde kullanılır |
224.0.0.0/4 | Çoklu yayın | RFC 5771 | Bir gruba gönderim; tek bir makinenin adresi değildir |
240.0.0.0/4 | Ayrılmış | RFC 1112 | İleride kullanılmak üzere ayrılmıştır; 255.255.255.255 sınırlı yayın adresidir |
Pratikte üç işaret işinize yarar. Windows'ta ipconfig çıktısında 169.254.x.x görüyorsanız cihaz DHCP sunucusundan adres alamamıştır. Yönlendiricinin WAN adresi 100.64.x.x ise sağlayıcı CGNAT kullanıyordur. Günlük kayıtlarda 127.0.0.1 görüyorsanız istek aynı makineden gelmiştir.
Bir bloğun kaç adres içerdiğini görmek için CIDR ↔ IP Aralığı aracını, /8 ve /12 gibi ön eklerin mantığı için CIDR ve alt ağ maskesi yazısını kullanabilirsiniz.
CGNAT nedir ve 100.64.0.0/10 neden ayrı bir aralık?
IPv4 adresi 32 bittir; bu yaklaşık 4,3 milyar adres eder ve serbest adres havuzu yıllar önce tükendi. İnternet sağlayıcıları, özellikle mobil operatörler, her aboneye ayrı bir genel adres vermek yerine birçok aboneyi aynı genel adresin arkasına yerleştirir. Operatör katmanındaki bu NAT'a CGNAT (Carrier-Grade NAT) denir. Adres yapısı için IPv4 nedir yazısına bakabilirsiniz.
Operatörün, abonenin yönlendiricisi ile CGNAT cihazı arasında hangi adresleri kullanacağı ayrı bir sorundu. RFC 1918 aralığı seçilirse abonenin kendi ev ağıyla çakışma riski doğar; başkasına ait genel adresler kullanılırsa o adreslere erişim bozulur. RFC 6598 bu nedenle 2012'de yalnızca bu iş için 100.64.0.0/10 bloğunu ayırdı.
CGNAT kullanan bir hatta günlük hayatta şu sonuçlarla karşılaşırsınız:
- Gelen bağlantı yok. Port yönlendirme çalışmaz; evdeki bir sunucuya, kameraya ya da kendi kurduğunuz proxy sunucusuna internetten doğrudan ulaşamazsınız.
- Paylaşılan adres. Aynı genel adresi aynı anda birden çok abone kullanır. Bir sitenin o adrese uyguladığı hız sınırı ya da engel, adresi paylaşan diğer aboneleri de etkileyebilir.
- İki katmanlı NAT. Evdeki yönlendirici ile operatördeki CGNAT art arda çalışır; bu durum bazı oyun, görüntülü görüşme ve eşler arası uygulamalarda bağlantı sorunlarına yol açabilir.
Bir proxy'nin çıkış IP'si neden genel olmalı?
Bir siteye proxy üzerinden bağlandığınızda hedef sunucu cihazınızı değil, bağlantıyı kendisine ulaştıran adresi görür. Buna çıkış IP'si denir. Hedefin yanıt paketlerini geri gönderebilmesi için bu adresin internette yönlendirilebilir, yani genel (public) olması gerekir. Özel, CGNAT, link-local veya dokümantasyon aralığındaki bir adrese yanıt dönemez.
Zincirde üç ayrı adres vardır ve genel olması şart olan yalnızca sonuncusudur. Örnekte, genel bir adresin yerine dokümantasyon aralığından bir adres kullanılmıştır.
| Adres | Örnek | Genel olmak zorunda mı? |
|---|---|---|
| Cihazınızın adresi | 192.168.1.20 | Hayır. Ev ağınızda özel olması normaldir. |
| Proxy giriş adresi (ana makine) | proxy.example.com ve PORT | İnternetten bağlanıyorsanız evet. Yalnızca bir iç ağdan kullanılan proxy özel adreste olabilir. |
| Çıkış IP'si | 203.0.113.45 | Evet. Hedefin gördüğü adres genel olmalıdır. |
Giriş ve çıkış adreslerinin aynı olması gerekmez. Bir proxy sunucusu kendi ağında özel bir adrese sahip olup dışarıya genel bir adresle çıkabilir; hedefi ilgilendiren yalnızca çıkıştır.
Mobil hatlarda tablo biraz farklıdır. Birçok mobil operatör IPv4 için CGNAT kullandığından hedefin gördüğü genel adres operatörün NAT havuzundan gelir ve başka abonelerle paylaşılıyor olabilir. Bu ağların işleyişi için mobil proxy nasıl çalışır yazısına bakabilirsiniz. Mobil proxy teslim aldığınızda çıkış adresini ve sürümünü (IPv4 ya da IPv6) IP Adresim aracıyla doğrulayın.
Mağazanın ürün sayfasında belirtildiği üzere ISP proxy paketleri ise bir internet sağlayıcısının ağına kayıtlı statik IPv4 adresleri sunar.
IP adresinizi nasıl sınıflandırırsınız?
Üç soruya yanıt bulmanız yeterlidir: Cihazınız hangi adresi kullanıyor, yönlendiriciniz internete hangi adresle bağlı, dünya sizi hangi adresle görüyor?
- 01Cihazınızın yerel adresine bakınWindows'ta komut istemine
ipconfig, Linux'taip -4 addryazın. Görünen adres10.x.x.x,192.168.x.xya da172.16.x.xile172.31.x.xarasındaysa özeldir; bu normaldir. - 02Yönlendiricinin WAN adresini okuyunModem veya yönlendirici yönetim sayfasındaki WAN ya da İnternet IP alanına bakın. Genel bir adres tek katmanlı NAT demektir.
100.64.0.0/10içindeyse sağlayıcınız CGNAT kullanıyordur; başka bir özel aralıksa araya ikinci bir NAT girmiştir. - 03Dışarıdan görünen adresi doğrulayınIP Adresim aracı, sunucumuzun bağlantınızda gördüğü adresi ve sınıfını gösterir. Bu adres WAN adresinizle aynı değilse arada bir NAT daha vardır.
- 04Adresin kime ait olduğuna bakınIP Bilgisi aracı genel bir adres için kayıt (RDAP) bilgisini, ASN ve ön eki ile ters DNS adını verir; adresin bir sağlayıcıya mı yoksa bir barındırma ağına mı ait göründüğünü buradan okursunuz.
Aynı mantığı kodla da uygulayabilirsiniz. Aşağıdaki betik, tablodaki blokları sırayla dener; eşleşme yoksa adresin genel göründüğünü söyler. Liste IANA kayıt defterinin tamamı değildir.
import ipaddress
ARALIKLAR = [
("0.0.0.0/8", "bu ağ"),
("10.0.0.0/8", "özel (RFC 1918)"),
("100.64.0.0/10", "paylaşımlı, CGNAT (RFC 6598)"),
("127.0.0.0/8", "loopback"),
("169.254.0.0/16", "link-local"),
("172.16.0.0/12", "özel (RFC 1918)"),
("192.0.2.0/24", "dokümantasyon (RFC 5737)"),
("192.168.0.0/16", "özel (RFC 1918)"),
("198.51.100.0/24", "dokümantasyon (RFC 5737)"),
("203.0.113.0/24", "dokümantasyon (RFC 5737)"),
("224.0.0.0/4", "çoklu yayın"),
("240.0.0.0/4", "ayrılmış"),
]
def siniflandir(metin):
adres = ipaddress.ip_address(metin)
for blok, ad in ARALIKLAR:
if adres in ipaddress.ip_network(blok):
return ad
return "genel (public) görünüyor"
for ornek in ["192.168.1.20", "100.72.14.9", "169.254.10.5", "127.0.0.1"]:
print(ornek, "->", siniflandir(ornek))
# 192.168.1.20 -> özel (RFC 1918)
# 100.72.14.9 -> paylaşımlı, CGNAT (RFC 6598)
# 169.254.10.5 -> link-local
# 127.0.0.1 -> loopback