Temel Düzeyde Linux Yönlendirici ve Sanal IP Adresi Çevirilmesi (NAT) Uygulaması

Jun 27th, 2007

 

 

Evimizde, ofisimizde veya dizimizde duran bir bilgisayarı, ihtiyaç duyduğumuzda nasıl bir yönlendirici haline getirebiliriz? Örneğin, odanızda tek bir kablo girişi var, ama siz ağa iki bilgisayar bağlamak istiyorsunuz. Veya, bulunduğunuz yerde kablosuz ağ mevcut ama bir bilgisayarda kablosuz ağ arayüzü var, diğerinde yok. İşte bu gibi durumlarda bilgisayarınıza gireceğiniz toplam dört komut ile çözüme ulaşabilirsiniz. Bu yazıda, herhangi iki ağ arayüzüne sahip bir Linux işletim sistemi yüklü bilgisayar ile PC yönlendiricinin nasıl yapılabildiği anlatılmaktadır. Yazıda belirtilen ayarlar, işletim sisteminin varsayılan ayarları değiştirilmeden yapılmakta olup, küçük ağlar için de yeterli gelecektir. 100 ve üzeri istemci barındıran daha büyük ağlar için, pc yönlendiricinizin çekirdek ayarlarında bazı değişikliklerin yapılması da gerekecektir (gelişmiş pc yönlendiriciler, ileriki yazılarda anlatılacaktır).

1. Arayüzlerin Yapılandırılması

Bilgisayarımız, yönlendirici olacağı için, en az iki arayüze sahip olmalıdır. Bu arayüzler, fiziksel olabileceği gibi, sanal olarak da kullanılabilinir. Bu dökümanda basit örnekleme adına, bilgisayara ikinci kart takılarak işlemler yapılmıştır.
Bilgisayarın arayüzleri, ifconfig -a komutu ile gözlenir. İki arayüzden, bir tanesi dış ağa diğeri ise iç ağa bağlanmak üzere plan yapıldıktan sonra, ilgili ip adresleri arayüzlere atanmalıdır.

krep:~# ifconfig eth0 inet 10.10.10.236 netmask 255.255.255.0 broadcast 10.10.10.255 up

krep:~# ifconfig eth1 inet 10.5.5.5 netmask 255.255.255.0 broadcast 10.5.5.255 up

Örnekte, eth0 arayüzüne atanmış olan 10.10.10.0/24 networkü, dış ağa bağlantıyı sağlamakta olup, eth1 arayüzüne bağlanan 10.5.5.0/24 networkü ise iç ağ olarak tanımladığımız, yönlendirilmesi gereken ve istemcilerin bulunduğu ağ olarak tasarlanmıştır.

Ağ arayüzlerinde yaptığınız değişikliklerin her açılışta yüklenmesi için, /etc/network/interfaces dosyasında gerekli düzenlemeleri yapmanız gerekmektedir. Örnekte girmiş olduğumuz değerler için hazırlanmış konfigürasyon dosyası aşağıdaki gibidir. /etc/network/interfaces yapılandırma dosyasında, iface başlayan satırlar, ilgili ağ arayüzünün yapılandırma bölüm başlangıcıdır. ifconfig komutundan farklı olarak bu alanda girilebilen network değeri, ip adresleme kuralları gereği kullanmakta olduğunuz ip bloğunun başlangıç adresidir. İkinci farklı girdi olan gateway değeri ise, komut satırından route add default gw 10.10.10.1 komutu ile girebileceğiniz varsayılan ağ geçidi ayarıdır (Yazının amacı kalıcı olarak bir pc yönlendirici yapmaktan ziyade bir yerde ihtiyacınız olduğunda kullanabileceğiniz durumu anlatmak olduğundan, halihazırda ağa bağlı olduğunu varsaydığımız örnekte bu yapılandırmalara değinilmemiştir).

 

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 10.10.10.236
netmask 255.255.255.0
network 10.10.10.0
broadcast 10.10.10.255
gateway 10.10.10.1
# The secondary network interface
allow-hotplug eth1
iface eth1 inet static
address 10.5.5.5
netmask 255.255.255.0
network 10.5.5.0
broadcast 10.5.5.255

2. Yönlendirici özellikleri
Linux kurulu bilgisayarın yönlendirici özelliğini açmak için, sysctl -a ile görüntülenebilen çekirdek değerlerinden, net.ipv4.ip_forward = 0 değeri, 1 olarak değiştirilmelidir.
Komut satırından

krep:~# sysctl net.ipv4.ip_forward

Başlangıçta da aynı değeri alması için, /etc/sysctl.conf dosyasında, aşağıdaki satır bulunarak değiştirilir, veya eklenir.
net.ipv4.conf.default.forwarding=1
Gerekiyor ise, içerideki ve dışarıdaki networkler yönlendirme tablosuna eklenmelidir. route add komutu, statik olarak ilgili yönlendirme komutlarının girilmesini sağlar. Dinamik yönlendirme için, quagga (zebra) kurulumu yeterlidir. Bu kısımlar, ileriki yazılarda detaylandırılarak anlatılacaktır.
3. NAT
İç ağda kullanılan ip adreslerinin, dışarıya tek bir ip adresi olarak çıkması ve yönlendirilmesi için, iptables ile tanım girilmelidir. Yeni sürüm Linux dağıtımlarının hepsi, iptables yüklü olarak geldiği için, ek bir kurulum veya derleme yapılmasına gerek yoktur.

krep:~# iptables -t nat -A POSTROUTING -s 10.5.5.0/24 -j SNAT -o eth0 –to-source 10.10.10.23

Bilgisayarınızın her açılışında bu komutun yüklenmesi için, /etc/rc.d/rc.local içerisine komutun yazılması yeterlidir.

Tags:
  1. Yavuz Selim KÖMÜR
    Jun 28th, 2007 at 08:52
    Reply | Quote | #1

    -j SNAT uygulamasi eth0 interface’in sabit ip olmasi durumunda gecerlidir.

    Olaki eth0 DHCP ile ip adresi ogreniyorsa:
    -j MASQUARADE

    demek gerekir.

  2. Yavuz Selim KÖMÜR
    Jun 28th, 2007 at 11:23
    Reply | Quote | #2

    Birde ornek yazarken komut satirina yazilarak yapilacak sekilde degilde konfig dosyasi edit edilecek sekilde yazmak gerekir.

    Kullanici:

    - Ee. Ben bunu her acilista yapacakmiyim :(

  3. Gökhan ERYOL
    Jun 28th, 2007 at 14:27
    Reply | Quote | #3

    Yorum 1: Doğrudur, dökümanda ilk adımda statik ip adresi alarak başladığım için belirtmemiştim, teşekkürler.

    Yorum 2: Dökümanda, komutların yazılması gereken satırlar ve yazılacağı dosyalar mevcut aslında (”her açılışta yüklenmesi için”, “başlangıçta da aynı değeri alması için” ifadeleriyle başlayan cümleler). Bir daha ki yazıya daha da açıklayıcı yazarız artık :)

  4. murat yagiz
    Aug 18th, 2007 at 12:52
    Reply | Quote | #4

    şu interfaces içindeki configurationuda bu ethernet adreslerine göre düzenlenmesini açıkca yazmış olsaydınız daha faydalı olacaktı.

    —————–
    Yazarın Notu: Murat Bey, yazıya /etc/network/interfaces dosyası içeriğini ve açıklamaları ekledim. Eleştiriniz için teşekkürler.
    Gökhan ERYOL

  5. haber
    Dec 8th, 2008 at 01:46
    Reply | Quote | #5

    Bilgisayarınızın her açılışında bu komutun yüklenmesi için, /etc/rc.d/rc.local içerisine komutun yazılması yeterlidir.

    shoutcast serverda çalışmıyor bu komut nasıl yapabilirim