Trafiği Statik ve Dinamik Olarak Yönetmek için Linux Sunucusunu Yönlendiriciye Dönüştürme - Bölüm 10


Bu LFCE (Linux Foundation Sertifikalı Mühendis) serisinin önceki eğitimlerinde öngördüğümüz gibi, bu makalede IP trafiğinin belirli uygulamalarla statik ve dinamik olarak yönlendirilmesini tartışacağız.

Linux Vakfı Sertifikasyon Programına Giriş

Öncelikle bazı tanımları netleştirelim:

  1. Basit bir ifadeyle paket, bir ağ içinde bilgi iletmek için kullanılan temel birimdir. Ağ protokolü olarak TCP/IP'yi kullanan ağlar, veri iletimi için aynı kuralları izler: gerçek bilgi, hem verilerden hem de gönderilmesi gereken adresten oluşan paketlere bölünür.
  2. Yönlendirme, bir ağ içinde verileri kaynaktan hedefe "yönlendirme" işlemidir.
  3. Statik yönlendirme, bir yönlendirme tablosunda tanımlanan, manuel olarak yapılandırılmış bir kurallar kümesi gerektirir. Bu kurallar sabittir ve bir paketin bir makineden diğerine giderken geçmesi gereken yolu tanımlamak için kullanılır.
  4. Dinamik yönlendirme veya akıllı yönlendirme (dilerseniz), sistemin gerektiğinde bir paketin izlediği yolu otomatik olarak değiştirebileceği anlamına gelir.

Gelişmiş IP ve Ağ Cihazı Yapılandırması

iproute paketi, ifconfig ve route gibi eski araçların yerini aldığı için bu makale boyunca kullanacağımız ağ iletişimini ve trafik kontrolünü yönetmeye yönelik bir dizi araç sağlar.

iproute paketindeki merkezi yardımcı programa basitçe ip denir. Temel sözdizimi aşağıdaki gibidir:

ip object command

object aşağıdakilerden yalnızca biri olabilir (yalnızca en sık görülen nesneler gösterilir; tam liste için man ip'e başvurabilirsiniz):

  1. bağlantı: ağ cihazı.
  2. addr: bir cihazdaki protokol (IP veya IPv6) adresi.
  3. rota: yönlendirme tablosu girişi.
  4. kural: yönlendirme politikası veritabanındaki kural.

komut ise nesne üzerinde gerçekleştirilebilecek belirli bir eylemi temsil eder. Belirli bir nesneye uygulanabilecek komutların tam listesini görüntülemek için aşağıdaki komutu çalıştırabilirsiniz:

ip object help

Örneğin,

ip link help

Yukarıdaki resimde örneğin bir ağ arayüzünün durumunu aşağıdaki komutla değiştirebileceğiniz gösterilmektedir:

ip link set interface {up | down}

'ip' komutunun daha fazla örneği için IP Adresini Yapılandırmak için 10 Faydalı 'ip' Komutunu okuyun

Örnek 1: Bir ağ arayüzünü devre dışı bırakma ve etkinleştirme

Bu örnekte eth1'i devre dışı bırakıp etkinleştireceğiz:

ip link show
ip link set eth1 down
ip link show

Eth1'i yeniden etkinleştirmek istiyorsanız,

ip link set eth1 up

Tüm ağ arayüzlerini görüntülemek yerine bunlardan birini belirtebiliriz:

ip link show eth1

Bu, eth1 için tüm bilgileri döndürecektir.

Örnek 2: Ana yönlendirme tablosunun görüntülenmesi

Mevcut ana yönlendirme tablonuzu aşağıdaki 3 komuttan biriyle görüntüleyebilirsiniz:

ip route show
route -n
netstat -rn

Üç komutun çıktısındaki ilk sütun hedef ağı gösterir. ip Route show çıktısı (dev anahtar sözcüğünden sonra) aynı zamanda bu ağlara fiziksel ağ geçidi olarak hizmet veren ağ cihazlarını da sunar.

Günümüzde rota yerine ip komutu tercih edilse de, geri kalanının ayrıntılı bir açıklaması için hala man ip-route ve man Route komutlarına başvurabilirsiniz. sütunlardan.

Örnek 3: Paketleri iki özel ağ arasında yönlendirmek için bir Linux sunucusu kullanma

icmp (ping) paketlerini dev2'den dev4'e ve tersi yönde de yönlendirmek istiyoruz (her iki istemci makinesinin de farklı ağlarda olduğunu unutmayın). Her NIC'in adı, karşılık gelen IPv4 adresiyle birlikte köşeli parantez içinde verilmiştir.

Test ortamımız aşağıdaki gibidir:

Client 1: CentOS 7 [enp0s3: 192.168.0.17/24] - dev1
Router: Debian Wheezy 7.7 [eth0: 192.168.0.15/24, eth1: 10.0.0.15/24] - dev2
Client 2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

Dev1'deki (CentOS kutusu) yönlendirme tablosunu görüntüleyelim:

ip route show

ve ardından 10.0.0.0/24 ağındaki ana bilgisayarlara erişmek için enp0s3 NIC'sini ve 192.168.0.15 bağlantısını kullanmak üzere değiştirin:

ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

Esasen şu şekildedir: "192.168.0.15'i ağ geçidi olarak kullanarak enp0s3 ağ arayüzü aracılığıyla 10.0.0.0/24 ağına bir rota ekleyin".

Aynı şekilde dev4'te (openSUSE kutusu) 192.168.0.0/24 ağındaki ana bilgisayarlara ping atmak için:

ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

Son olarak Debian yönlendiricimizde yönlendirmeyi etkinleştirmemiz gerekiyor:

echo 1 > /proc/sys/net/ipv4/ip_forward

Şimdi ping atalım:

Ve,

Bu ayarların tüm önyüklemelerde kalıcı olmasını sağlamak için yönlendiricideki /etc/sysctl.conf dosyasını düzenleyin ve net.ipv4.ip_forward değişkeninin aşağıdaki gibi true olarak ayarlandığından emin olun:

net.ipv4.ip_forward = 1

Ek olarak, her iki istemcide de NIC'leri yapılandırın (openSUSE'de /etc/sysconfig/network ve CentOS'ta /etc/sysconfig/network-scripts içinde yapılandırma dosyasını arayın – her iki durumda da ifcfg-enp0s3 olarak adlandırılır.

İşte openSUSE kutusundaki yapılandırma dosyası:

BOOTPROTO=static
BROADCAST=10.0.0.255
IPADDR=10.0.0.18
NETMASK=255.255.255.0
GATEWAY=10.0.0.15
NAME=enp0s3
NETWORK=10.0.0.0
ONBOOT=yes
Örnek 4: Paketleri özel ağlar ile İnternet arasında yönlendirmek için bir Linux sunucusu kullanma

Linux makinesinin yönlendirici olarak kullanılabileceği başka bir senaryo, İnternet bağlantınızı özel bir LAN ile paylaşmanız gerektiği durumdur.

Router: Debian Wheezy 7.7 [eth0: Public IP, eth1: 10.0.0.15/24] - dev2
Client: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

Önceki örnekte olduğu gibi istemcide paket iletmeyi ve statik yönlendirme tablosunu ayarlamaya ek olarak, yönlendiriciye birkaç iptables kuralı eklememiz gerekir:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

İlk komut, nat (Ağ Adresi Çevirisi) tablosundaki POSTROUTING zincirine, giden paketler için eth0 NIC'nin kullanılması gerektiğini belirten bir kural ekler.

MASQUERADE, bu NIC'nin dinamik bir IP'ye sahip olduğunu ve paketi İnternet'in "vahşi vahşi dünyasına" göndermeden önce paketin özel kaynak adresinin olması gerektiğini belirtir. yönlendiricinin genel IP'sine değiştirildi.

Çok sayıda ana bilgisayarın bulunduğu bir LAN'da, yönlendirici /proc/net/ip_conntrack dosyasında kurulan bağlantıları takip eder, böylece İnternet'ten gelen yanıtın nereye döndürüleceğini bilir.

Çıktının yalnızca bir kısmı:

cat /proc/net/ip_conntrack

aşağıdaki ekran görüntüsünde gösterilmektedir.

Paketlerin kaynağının (openSUSE kutusunun özel IP'si) ve hedefinin (Google DNS) vurgulandığı yer. Bu, çalıştırmanın sonucuydu:

curl linux-console.net

openSUSE kutusunda.

Zaten tahmin edebileceğinizden eminim, yönlendirici ad sunucusu olarak Google'ın 8.8.8.8'ini kullanıyor, bu da giden paketlerin hedefinin neden bu adresi gösterdiğini açıklıyor.

Not: İnternetten gelen paketler yalnızca önceden kurulmuş bir bağlantının parçası olmaları durumunda kabul edilir (komut #2), giden paketlere ise izin verilir: "serbest çıkış ” (komut #3).

Bu serinin Bölüm 8 – Iptables Güvenlik Duvarını Yapılandırma bölümünde özetlenen adımları izleyerek iptables kurallarınızı kalıcı hale getirmeyi unutmayın.

Quagga ile Dinamik Yönlendirme

Günümüzde Linux'ta dinamik yönlendirme için en çok kullanılan araç quagga'dır. Sistem yöneticilerinin, nispeten düşük maliyetli bir Linux sunucusuyla, güçlü (ve maliyetli) Cisco yönlendiricileri tarafından sağlanan işlevselliğin aynısını uygulamasına olanak tanır.

Aracın kendisi yönlendirmeyi işlemez, bunun yerine paketleri işlemek için yeni en iyi yolları öğrendikçe çekirdek yönlendirme tablosunu değiştirir.

Gelişimi bir süre önce durdurulan bir program olan zebranın bir çatalı olduğundan, tarihsel nedenlerden dolayı zebra ile aynı komutları ve yapıyı korur. Bu nedenle bu noktadan sonra zebraya çokça atıfta bulunulduğunu göreceksiniz.

Dinamik yönlendirmeyi ve ilgili tüm protokolleri tek bir makalede ele almanın mümkün olmadığını lütfen unutmayın; ancak burada sunulan içeriğin, üzerine geliştirmeler yapmanız için bir başlangıç noktası görevi göreceğinden eminim.

Quagga'yı Linux'a Kurmak

Quagga'yı seçtiğiniz dağıtıma yüklemek için:

aptitude update && aptitude install quagga 				[On Ubuntu]
yum update && yum install quagga 					[CentOS/RHEL]
zypper refresh && zypper install quagga 				[openSUSE]

Örnek #3 ile aynı ortamı kullanacağız, tek fark eth0'ın IP 192.168.0.1 ile bir ana ağ geçidi yönlendiricisine bağlı olmasıdır.

Daha sonra /etc/quagga/daemons dosyasını şununla düzenleyin:

zebra=1
ripd=1

Şimdi aşağıdaki konfigürasyon dosyalarını oluşturun.

/etc/quagga/zebra.conf
/etc/quagga/ripd.conf

ve şu satırları ekleyin (seçtiğiniz bir ana bilgisayar adı ve şifreyle değiştirin):

service quagga restart
hostname    	dev2
password    	quagga
service quagga restart

Not: ripd.conf, Yönlendirme Bilgi Protokolü'nün yapılandırma dosyasıdır ve yönlendiriciye hangi ağların bağlanabileceği bilgisini sağlar. ulaşıldığını ve ne kadar uzakta olduklarını (atlama miktarı açısından).

Bunun, quagga ile birlikte kullanılabilecek protokollerden yalnızca biri olduğunu ve kimlik bilgilerinin düz metin olarak iletilmesi dezavantajına sahip olmasına rağmen, kullanım kolaylığı ve çoğu ağ cihazının bunu desteklemesi nedeniyle bu eğitim için bunu seçtim. Bu nedenle yapılandırma dosyasına uygun izinleri atamanız gerekir:

chown quagga:quaggavty /etc/quagga/*.conf
chmod 640 /etc/quagga/*.conf 
Örnek 5: IP trafiğini dinamik olarak yönlendirmek için quagga'yı ayarlama

Bu örnekte, iki yönlendiriciyle aşağıdaki kurulumu kullanacağız (daha önce açıklandığı gibi yönlendirici #2 için yapılandırma dosyalarını oluşturduğunuzdan emin olun):

Önemli: Her iki yönlendirici için de aşağıdaki kurulumu tekrarlamayı unutmayın.

Yönlendirici ile çekirdek arasındaki mantıksal aracı olan zebraya bağlanın (2601 bağlantı noktasını dinliyor):

telnet localhost 2601

/etc/quagga/zebra.conf dosyasında belirlenen şifreyi girin ve ardından yapılandırmayı etkinleştirin:

enable
configure terminal

Her NIC'in IP adresini ve ağ maskesini girin:

inter eth0
ip addr 192.168.0.15
inter eth1
ip addr 10.0.0.15
exit
exit
write

Şimdi RIP arka plan programı terminaline (bağlantı noktası 2602) bağlanmamız gerekiyor:

telnet localhost 2602

Kullanıcı adını ve şifreyi /etc/quagga/ripd.conf dosyasında yapılandırıldığı şekilde girin ve ardından aşağıdaki komutları kalın harflerle yazın (yorumlar, açıklama amacıyla eklenmiştir):

enable turns on privileged mode command.
configure terminal changes to configuration mode. This command is the first step to configuration
router rip enables RIP.
network 10.0.0.0/24 sets the RIP enable interface for the 10.0.0.0/24 network. 
exit
exit
write writes current configuration to configuration file.

Not: Her iki durumda da konfigürasyon daha önce eklediğimiz satırlara eklenir (/etc/quagga/zebra.conf ve < b>/etc/quagga/ripd.conf).

Son olarak, her iki yönlendiricideki zebra hizmetine tekrar bağlanın ve her birinin diğerinin arkasındaki ağa giden rotayı ve buna ulaşmak için bir sonraki atlama noktasının hangisi olduğunu nasıl "öğrendiğini" not edin. ağda ip rotasını göster komutunu çalıştırarak:

show ip route

Farklı protokoller veya kurulumlar denemek istiyorsanız daha fazla belge için Quagga proje sitesine başvurabilirsiniz.

Çözüm

Bu makalede Linux kutu yönlendirici(ler)i kullanarak statik ve dinamik yönlendirmenin nasıl kurulacağını açıkladık. İstediğiniz kadar yönlendirici eklemekten ve istediğiniz kadar deneme yapmaktan çekinmeyin. Herhangi bir yorumunuz veya sorunuz varsa aşağıdaki iletişim formunu kullanarak bize geri dönmekten çekinmeyin.