Merhabalar,

Yazı olaylarına bayağı ara verdim ama dönüş yaparken de sitemi yenilemiş oldum.

Neyse özür faslını fazla uzatmadan bugün sizlere Vmware'de geçen yaşadığım bir sıkıntının çözümünü anlatacağım.

Olayımız Satın alınmış olan bir dedicated'ta oluşturmuş olduğunuz sanal bilgisayara istekleri göndermek.


Öncelikle işin derinine girip port nedir, nat nedir diye kısa kısa açıklamaya çalışayım.

Port Nedir ?


Port'un ne olduğunu bu makaleyi okumaya gerek duyduğunuza göre az çok biliyorsunuzdur yine de özetleyecek olursak: Bilgisayarda fiziksel olarak bulunan Seri (COM) ve Paralel (LPT) portlar dışında ağ üzerinde iletişim yapılmasına olanak sağlayan portlar bulunmaktadır.

Örneğin 80 portu internet üzerinden web sitelerini gezmemize, 21 port'u ftp'lere bağlanmamıza, 25 portu (eskiden) mail alıp, göndermemize yarayan portlardır.

Elimizde bir dedicated yani server bulunduğunu düşünelim. Üzerinde Centos, ubuntu vs.. herhangi bir linux dağıtımı kurulu olduğunu, buna da vmware yardımıyla sanal bir bilgisayar kurduğumuzu farz edelim.

Yani: Linux bir dedicated'ımız var, altına ise Sanal olarak Windows xp kurmuş olalım.

Dedicated hizmeti satın aldığımızı düşünürsek bağlı bulunduğunuz datacenter yeni kurulmuş olan sanal bilgisayara farklı bir IP tanımlamanıza izin vermeyecektir. Bildiğiniz gibi IP'ler bağlı bulunan datacenter'ın ücretlendirmesine tabii olmak ile birlikte yaklaşık aylık 2, 3$ fark etmektedir.

Durum bu olduğundan dolayı sanal bilgisayar kurup, bunu internete çıkartmanın ücretsiz tek yolu Vmware'de Nat ile mümkün.

Yeri gelmişken nat'ı da açıklayalım.

Nat Nedir ?


Nat (Network Address Translation) kısaca ana makina üzerinden internete çıkarken IP çakışması yaşamamanıza olanak sağlayan protokol olarak adlandırabiliriz.

Şimdi asıl senaryomuza geri dönecek olursak.

Port'u tanımladık, Nat'ı tanımladık geriye bir tek iptables kaldı.

Iptables Nedir ?


Iptables ise linux üzerindeki router, firewall vs.. şekillerde adlandırabiliriz. Çeşitli komutlar yardımıyla sunucuya gelen istekleri yönlendirebilir, izin verebilir veya engelleyebiliriz.

Bu kadar tanımdan sonra asıl mevzuya girebiliriz diye düşünüyorum.

Yapmak istediğimiz olay ana bilgisayara (linux) belirli portlardan gelen paketleri, sanal bilgisayardaki belirli portlara yönlendirmek.

Sanal bilgisayarın network ayarını vmware'de nat ile gerçekleştirdikten sonra geriye yapmamız gereken tek şey kalıyor o da linux tarafında iptables ile linux'a gelen istekleri sanal bilgisayara yönlendirmek.

Bunun için öncelikle aşağıdaki şekilde kontroller yapmamız gerekmekte.
Kullandığımız ağ protokolünde ethernet, wireless vs.. port yönlendirmenin aktif olup olmadığını;

cat /proc/sys/net/ipv4/conf/eth0/forwarding
//ve(ya)
cat /proc/sys/net/ipv6/conf/eth0/forwarding


komutları ile kontrol edebiliriz linux terminalde bu komutları yazdığınızda karşılığında 1 cevabını almanız gerekmekte. ifconfig ile kullanmış olduğunuz network protokolünü görüp, eth0 yerine ppp0 veya eth1 gibi değerler yazabilirsiniz.

Yukarıdaki komutları yazdığınızda eğer 0 değeri alıyorsanız;

echo '1' > /proc/sys/net/ipv4/conf/eth0/forwarding
//ve(ya)
echo '1' > /proc/sys/net/ipv6/conf/eth0/forwarding


yardımıyla değerleri 1 yapabilirsiniz.

Daha sonra vmware'de nat ayarlarını kontrol etmeniz gerekmekte.

Genelde /etc/vmware/vmnet8/nat/ yolunda bulunan nat.conf dosyasını düzenleyip


[incomingtcp]
80 = 192.168.x.x:80


Kısmında 80 yerine kullanacağınız portu yazmanız gerekmekte. 192.168.x.x yerine ise sanal bilgisayarınızın IP adresini yazmanız gerekmekte.

Tüm bu işlemleri gerçekleştirdiyseniz;

//UDP için
IPTABLES -A PREROUTING -i eth0 -p udp -m tcp --dport 80 -j DNAT --to-destination 192.168.x.x:80
IPTABLES -t nat -A POSTROUTING -o vmnet8 -p udp --dport 80 -j SNAT --to-source 192.168.x.1
//TCP için
IPTABLES -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.x.x:80
IPTABLES -t nat -A POSTROUTING -o vmnet8 -p tcp --dport 80 -j SNAT --to-source 192.168.x.1

Yukarıdaki komutları terminale girmeniz gerekmekte.

Bu komutlardan -i eth0 değeri kullandığınız network protokolünü,
--dport 80 ana makinada hangi porta gelen değerler olduğunu
--to-destination 192.168.x.x:80 ise sanal makinada hangi bilgisayarın, hangi portuna gideceğini belirtiyor.
--to-source 192.168.x.1 ise vmware'de sanal makinanızın ağ geçidini belirtiyor.

Yukarıdaki yazdığım komutları yazmanız durumunda linux bilgisayarın 80 portuna gelen değerleri, sanal bilgisayarın 80 portuna aktarmış oluyorsunuz.

Farklı portlardan yönlendirme yapmak için yani 90 portuna gelenleri 100 portuna yönlendirmek için komuttaki --dport alanına 90 --to-destination alanına ise 192.168.x.x:100 yazmanız yeterli.

Tüm bu işlemleri yaptıktan sonra

iptables save
iptables restart


Diyerek yeni tanımlamış olduğunuz kuralların aktifleşmesini sağlayabilirsiniz. Bazı linux sürümlerinde bu kurallar iptables yeniden başlatılsa dahi mevcut oturumda geçerli olmayabiliyor. Bu tür durumlarda server'ı reboot etmeniz yeterli olur. Bilgisayar yeniden açıldığında yeni kurallar geçerli olmuş olacaktır.

Peki bu tam olarak ne işinize yarar ?
Çeşitli projelerinizi farklı bilgisayarlardan yönetebileceğiniz gibi web serverı ayrı, database serverı ayrı şekilde tutabilirsiniz.

Hatta ülkemizde vpn, vps işlerine dahi girebilirsiniz.