Yerel ağdaki cihazlara Internet'ten erişme ve Port yönlendirme

ozkarah

Kıdemli Üye
Katılım
4 Ocak 2022
Mesajlar
1,328
Bu konu bir kaç kez sorulmuştu, bir konu açayım dedim.





Önce işin teorisiyle ilgili kısa bir özet yapayım.


Şöyle bir gafik çizdim:

1692184964618.png


Bilmemiz gereken temel terimler:
1- Gerçek IP / sanal IP
2- Statik IP
3- DHCP
4- IP maskeleme (Masquarading)
5- DNS






Modem dediğiniz cihaz aslında bir çok işi birlikte üstlenir. Başlıcaları şunlardır :
1- ISP (İnternet hizmet sağlayıcınız ) ile belli protokollerle konuşup kimlik doğrulama ve bağlantı kurma işini de yapmak.
2- Bir ROUTER görevi yapmak.
3- Kablosuz erişim noktası
4- DHCP sunucusu
5- Firewall


Sistem şöyle çalışır:
1- Modeminizi açtığınızda modem üzerindeki ayarları kullanarak ISP üzerindeki cihaz ile kimlik doğrulama, iletişim hızı ayarlama vb işlemleri yaparak bağlantıyı kurar. Bu esnada ISP cihazı (85.85.1.1) ya da ağı üzerinde bir DHCP sunucu yazılımı modeminize bir dış IP (lacivert olan: 85.85.99.215) atar. Bu IP gerçek bir IP'dir (Gerçek Internet IP'lerinden size tahsis edilmiş ve Internet üzerinden doğrudan erişilebilir). Modeminize Internetin her yerinden artık bu IP ile erişilebilir. https://www.whatsmyip.org/ gibi sitelere gittiğinizde göreceğiniz IP budur. Bu IP modeminizi yeniden başlattığınızda değişebilir. Modeminizi her yeniden başlattığınızda farklı bir dış IP alabilirsiniz. Statik IP is ISPnin sahip olduğu IP adreslerinden birini size tahsis etmesi ve her seferindi DHCP sunucusundan size o IP adrersini vermesidir. Böylece gerçek IP adresiniz (yani İnternetten size ulaşacakların bilmesi gereken IP adresi) hiç değişmez.​
2- Aslında bu IP ve yönlendirme işlerinden sorumlu olam modeminiz üzerindeki ROUTER (yönlendirici) kısmıdır. Bu ROUTER'ın dış IPsi ISP tarafoından atanan gerçek IP (85.85.99.215), iç IP'si modem ayarlarında sizin verdiğiniz (ya da varsayılan) IPdir (192.168.1.1 gibi). Modeminiz (yönlendiriciniz için) ağ kapısı ( default gateway ) ISP üzerindeki ROUTER cihazı (85.85.1.1), yerel ağınızdaki cihazlar için ise ağ kapısı modeminizin iç IPsidir (192.168.1.1). Yani yerel ağınızdaki cihazlar erel ağ dışında kalan bir adrese ulaşmak istediklerinde ağ kapısı ( 192.168.1.1) üzerinden gideceklerdir. Modeminiz (yani yönlendiriciniz) ise 85.85.1.1 adresindeki ağ kapısı üzerinden gidecektir. IP ayarlarınızda gördüğünüz NETMASK (ağ maskesi) ayarı (örn: 255.255.255.0) ise sizin yerel ağınızın sınırlarını, hangi adresin harici bir adres olduğunu ve ağ kapısı üzerinden erişlmesi gerektiğini belirler. Örneğin yerel ağdaki IP adresiniz 192.168.1.103 ve ağ maskeniz 255.255.255.0 ise 192.168.1.1-192.168.1.255 arasındaki adresler yerel ağınızdadır doğrudan erişilebilir. Bu aralık dışındaki dışındaki adreslere ise varsayılan ağ geçidi üzerinden erişmelidir. Ağ maskesi 255.255.0.0 olsaydı yerel ağınız 192.168.0.1-192.168.255.255 aralığını kapsamış olurdu.​
3- Gelelim yerel ağınızdaki IP adreslerine. ISP'nin modeminize bir IP ataması gibi, modeminiz üzerindeki DHCP sunucusu yazılımı da yerel ağınızdaki her cihaza bir IP adresi atar. Ancak bu IP adresleri İnternet üzerinden doğrudan erişilebilir gerçek IP adresleri değildir. 192.168.X.X, 10.0.X.X gibi bu tür amaçlar için yerel ağlara ayrılmış sanal IP adresleridir. Internette herhangi bir makinanın gerçek IP adresi bu aralıklarda olamaz. Yani şemada gördüğünüz 192.168.1.101, 192.168.1.102, 192.168.1.103 gibi adresler modemdeki DHCP sunucusu tarafından yerel cihazlara atanmış adreslerdir ve bunlar da her yeniden başlatmada değişebilirler. Sabit kalmasını istiyorsanız modem üzerindeki DHCP sunucusu ayralarında o cihaz için kural tanımlamalı ya da o ağ cihazın ayarlarında DHCP'den IP almak yerine sizin vereceğiniz IPO adresi ayarını kullanmasını ayarlamalısınız.​
4- Yerel ağınızdaki ya da internete bağlı herhangi bir cihaz bir internet sayfasına (www.abc.com gibi) erişmek istediğinde bu sadece bir isimdir. Halbuki haberleşmenin olabilmesi için IP adresinin bilinmesi gereklidir. Bu noktada DNS sunucusu devreye girer. DNS sunucuları www.abc.com gibi bir makina adının IP adresini sorgulamaya yarayan bir tür adres defteridir. O isimdeki adrese erişmek isteyen bir cihaz önce DNS sunucusuna gidip IP adresini sorar (şeklin sol alt tarafındaki örnekteki gibi) ve sonra o IP adresi ile bağlantıya geçerek devam eder.​
5- Yerel ağınızdaki bir cihaz bir dış cihaza erişmek istediğinde ağ geçidi (modeminiz içindeki yönlendirici) üzerinden dışarıya istek paketini gönderir ve pakete bir cavap geldiğinde yönlendirici otomatik olarak o paketi yerel ağdaki kaynak makinaya yönlendirir. Yerel ağda sanal IP kullanarak yapılan bu işleme IP Masquerading (IP Maskaleme) denir. Yerel ağ içinde is işlemler aslında IP adresleri aslında MAC adresleri ne dönüştürülerek yapılır. Bu kısma girmiyorum.​



Bütün bu sistem sayesinde;
1- Internet üzerinde sınırlı sayıda bulunan IP adresi (yaklaşık 4 milyar tane) sınırsız sayıda cihaz tarafından kullanılabilir hale gelir. Her yerel ağ için bir tane gerçek IP yeterli olur.
2- Yerel ağdaki cihazların güvenliğini sağlamak daha kolay hale gelir.

Ancak bu su sistem yerel ağdaki istemcilerin dışarıdaki sunuculara kolay erişmesi için tasarlanmış ve optimize edilmiştir. Buna göre Internetten erişilecek bir sunucu gerçek ve statik bir IP'ye sahip olmalıdır. Yani yerel ağınızda bir sunucu barındıracaksanız bu sistem varsayılan haliyle yeterli olmaz.



Bu durumun çözümü de bir sonraki mesajda.
 
Yerel ağdaki bir cihazı sunucu gibi dışarıdan erişlilebilir yapmanın temelde 2 yolu var:

1- Bulutta bir sunucu üzerinde tüm durumu yönetebilecek bir yazılım çalıştırmak ve cihazınızla belli aralıklarla bu sunucuya bağlanıp yeni bir talep (komut vb.) olup olmadığına bakmak. Blynk vb sistemler böyle çalışır. Faydası cihazın bulunduğu yerel ağda bir ayar gerkmemesidir. Dezavantajı ise geliştirilmesinin ve barındırılmasının maliyetli olmasıdır.

2- Port yönlendirme ve gerekiyorsa DNS yönlendirme kullanmak. Avantajı makliyetsiz ve esnek olmasıdır. Dezavantajı her cihaz için ağ üzerinde bir takım ayarlar yapmak gerekir.


Biz ikinci yöntem üzerinde duracağız.

Şemamızı tekrar hatırlayalım

1692185535126.png



Bu sefer internet üzerindeki bir cihaz (şemada sol alt köşedeki) evimizdeki yerel ağda çalıştırdığımız ESP8266 (192.168.1.103) üzerindeki bir servise erişmek istiyor olsun. Kendisi için ESP8266 cihazımızın IP adresi olan 192.168.1.103 adresi hiçbirşey ifade etmez. Bu yerel IPleri binadaki daire numarası gibi düşünelim ve her binanın da kendisine özel bir tekil numarası olsun. Kapı numarasından milyonlarca binada olabilir. Bizim önce binanın numarasına (gerçek IP: 85.85.99.215) sonra da daire numarasına (yerel IP: 192.168.1.103) ihtiyacımız olacaktır.

İlk problemimiz bina numarasını yani gerçek IPyi bilmekte. Çünkü eğer statik IP hizmeti almıyorsak bu IP sürekli değişecektir. Bu durumun çözümü için bir Dinamik DNS (sanal DNS de deniyor) kullanabiliriz. Bu hizmet için NoIP, DynDNS, ChangeIp gibi sitelere bakabilirsiniz.
Bu hizmeti şöyle düşünebilirsiniz. IP yerine artık bir makina adınız var (benimadim.noip.com gibi). Bu ad aslında sürekli sizin o sıradaki gerçek IP adresinizi tutuyor. Bu sayede Ip adresi değişse bile değişmeyen bir adresiniz oluyor. Ancak bu hizmetin doğru çalışması için yerel ağınızda gerçek Ip adresinizi bu hizmete düzenli olarak bildirecek bir uygulama ya da servise ihtiyacınız olacak. Çoğu modemde meşhur Dinamik DNS hizmet sağlayıcıları için ayar yapma imkanı bulunuyor. Alternatif oalrak bu sitelerin sunduğu güncelleme uygulamalarını sürekli açık bir PCde çalıştırmak, cep telefonunuza uygulama kurmak vb çözümler de var. Statik IP hizmeti alıyorsanız bunlara ihtiyacınız yok.

Göndereceğimiz isteğin bir HTTP isteği olduğunu varsayalım. İstek şöyle birşey olsun:

Bu aslında şuna eşdeğer:

Artık gerçek IPyi (85.85.99.215) bildiğimize göre binaya ulaşabiliyoruz. Ancak elimizde daire numarası yok. Bu paketin ulaşabileceği yer binanın kapısı yani modemimizdeki ROUTERın dış bacağı. Bir şekilde ROUTERın bu paketi 192.168.1.103 adresindeki cihazımıza göndermesini sağlamamız gerekiyor. İşte bunun için Port Yönlendirme denilen özelliği kullanıyoruz.

Port Yönlendirme aslında dış bacaktaki X portuna gelen bir paketi Y adresinin Z portuna gönder demek. Bizim paketimiz dış bacağın 80 numaralı (HTTP olduğu için) portuna geldi. Bu durumda tanımlamamız gereken kural 80 numaralı portu, 192.168.103 adresinin 80 (aslında ESP8266 üzerindeki web sunucusunun portu neyse o) numaralı portuna göndermek olmalı.

Böylece http://benimadim.noip.com/do?cmd=1 önce DNS sunucusundan gerçek IP adresimizi öğrenip şuna dönüşecek:

Sonra da ROUTERımıza ulaşacak ve ROUTER üzerindki port yönlendirme (80-> 192.168.1.103 : 80) kuralı gereğince doğruca cihazımızın 80 numaralı portuna ulaşacak.

Burada kritik noktalardan bir tanesi de kuraldaki 192.168.1.103 adresi. Bunun her zaman sabit olacağını garanti altına almamız gerekiyor. Daha önce bahsettiğim gibi bunun da iki yolu var. Modemdeki DHCP sunucusuna kural tanımlamak ya da kodumuzda statik IP yapılandırmak. (statik IP yapılandırırken de verdiğiniz IP adresinin DHCP suucusunun adres verme aralığının dışında kalmasına dikkat etmelisiniz. Yoksa aynı IPde iki cihaz olabilir ve ikiside düzgün çalışmaz.)

Peki bu cihazdan birden fazla varsa ne yapmamız gerekiyor?
Kuralımızı hatırlayalım : 80 -> 192.168.1.103 : 80

Sol taraftaki 80 aslında herhangi bir port olabilir. Önemli olan sağ taraftaki portun doğru olması.
Yani kuralımız şöyle olsaydı: 10380 -> 192.168.1.103 : 80
Dışarıdan gelecek URL de şöyle olması yeterli olacaktı: http://benimadim.noip.com:10380/do?cmd=1
Paketimiz yine 192.168.1.103 adresindeki 80 numaralı porta ulaşacak ve cevabı istemciye geri dönebilecekti.

Bu durumda farklı cihazlar için kaynak (soldaki) portu farklı ayarlayarak kurallar oluşturabiliriz.

1. 10380 -> 192.168.1.103 : 80
2. 10480 -> 192.168.1.104 : 80
3. 10580 -> 192.168.1.105 : 80
....

Bir de çoğu modemde kural tanımlarken protokol ve TCP/UDP gibi seçimler var.

TCP/UDP iki farklı haberleşme metodu. Gönderceğimiz paketin hangisini kullanacağına göre uygun olanı seçmemiz gerekiyor, ancak genelde karşınıza çıkacak TCP olacaktır. UDP daha çok broadcast, streaming gibi işler için kullanılır. Biliyorsanız uygun olanı seçin, bilmiyorsanız herikisi seçeneği varsa onu, yoksa TCP seçip deneyin. Çalışmazsa UDP seçersiniz.

Modeminizde port yönlendirme kuralı tanımlarken protokol seçeneği çıkıyorsa aslında bu farklı birşey değil. Belli başlı protokollerin (HTTP, HTTPS, POP3, IMAP, FTP... gibi) kullandıkları standart portların kısayolları gibi düşünebilirsiniz. Günün sonunda her protokol tanımı aslında Port ve TCP/UDP seçeneği tanımlıyor.

Ancak istemcimiz bazen yerel ağdan bazen de dış ağdan talep gönderecekse o zaman işler biraz daha karışıyor. Kaynak ve hedef portları aynı tutmak (ESP8266 üzerindeki port ile kuraldaki kaynak port aynı) daha mantıklı olabilir.

Bu durumda yerel ağdaki bir istemcinin göndereceği http://benimadim.noip.com/do?cmd=1 isteğinin yerel ağdaki cihazımıza ulaşması da ayrı bir konu. Modemdeki Router yazılımına göre davranışlar farklılık gösterebiliyor. Ona şimdilik girmiyorum.
 
Son düzenleme:
hocam sitemde kaç adet port vardır?
sistemden sisteme değişirmi ?

bir kodda kullanmak için soruyorum
Internet Assigned Numbers Authority (IANA) son değer 65305
kodda da bu şekilde kullanıcağım

start_port = 0
end_port = 65305
 
Windows ve Linux işletim sistemlerinde 65535 port var. 1024 ve altındaki portlar genellikle işletim sistemi ya da yaygın hizmetler için atanmış denirdi eskiden; ancak artık yaygın hizmetler 1024 üstündeki portları da sık kullanmaya başladılar.

Portların hangilerinde servis olduğunu taramak için kullancaksanız sorun değil, ancak çok sayıda port açıp aynı anda iletişim için kullanacaksanız performans açısından bu çok iyi bir fikir olmayabilir.


Yerel makinada hangi portların açık olduğunu bulmak için

Windows:
netstat /n /a

LINUX:
netstat -antu
 
portland.py portingen.py portlander.py diye üç ayrı kod yazdım ilk yerel ağdaki portlamı tarayıp acık olanları soyluyor ikincisi bu portların ınterete erişimi olup olmadıgını kontrol ediyor sonuncusu portlander üzerinde hala çalısıyorum teşekürederim
 
numaraları değiştirerek yazıyorum

portland.py

Açık olan portlar: [654531, 545328457, 75399380, 465653851, 4545455247, 42425762, 539594308]

portingen.py
IP adresi 110.0.0.1 üzerinde açık olan portlar: [65354651, 5465324857, 4565632481, 4552527]

(numaraları random hashledim)
sanırım bu şekilde net tools kullanmadan yapabildim doğrumu hocam acık olanların baştaki yazıcıymış diğerlerini bulamadım
sistem hacklenir korkum yok hocam sistemde yazdıgım kodlar var sadece ben bu stlinkler ile ugrasırken bunlar ıcın port actımmı onu kontrol etmek ıstıyorum

cunku bir ara kendimi kaybettim bütün önerileri süzgeçten geçirmeden uyguladım
 
Son düzenleme:
Ben amacı tam anlayamadım.

Tahminim şu: yerel ağda bir makina üzerindeki açık olan portları tespit edeceksiniz, sonra da o makinanın o portlarına İnternet üzerinden de erişilebiliyor mu diye kontrol edeceksiniz ve listeleyeceksiniz.

Öyle ise İnternet üzerinden erişimi olması için bir port yönlendirme olması ya da bir tür tünelleme lazım. Bunlar router üzerinde gerçekleşiyor var giriş ve hedef port numaraları farklı olabilir ya da o port nuymarası ile yerel ağdaki sizin test ettiğiniz makinaya değil başka bir makinaya gidiyor olabilir. Bu şekilde tespit etmek yanlış olur. Onun yerine dış ağdan ulaşıldığında hangi portlara erişiliyor ayrıca taramakta fayda var bence.
 
  • Sevgi
Reactions: nt
hocam vaktiniz olursa ıpv4 ve ıpv6 işlermisiniz
temel farklarını, avantajlarını ve güvenlik önlemlerini öğrenmek istiyorum.
yt'da abone kasmak veya web sitetesinin trafiğini artırmak için link atanlardan alacağım fake bilgi değilde
gerçek bilgiye aç olan birisi olarak istiyorum
 
Aslında fonksiyon olarak çok büyük farklar yok. IPV6 Internetin yaygınlaşması nedeniyle IPV4 de oluşan "Gerçek IP" sayısı kısıtı sebebiyle geliştirildi.

IPV4 32 bit (4 byte: x.x.x.x) adresleme ile yaklaşık 4.3 Milyar IP adresi sunabiliyor.

IPV6 ise 128 bit adresleme ile pratikte sınırsız sayıda adres sunabiliyor.

Bir de adreslerin yazılış formatında fark var. Biri her bir baytın onluk düzendeki değerleri ile gösterirken (192.168.0.15 gibi) diğeri onaltılıkl düzende (her byte 2 alfanümerik karakter) olacak şekilde (fe80::2ce3:46e0:ba9c:1975) gösteriyor.

Bunun dışındaki farklar paket büyüklüğü, paket formatı gibi çok daha teknik detaylar.
 
  • Beğen
Reactions: nt

Forum istatistikleri

Konular
7,020
Mesajlar
119,913
Üyeler
2,845
Son üye
toyer

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top