(Yeni sayfa: <font style="font-size:300%"> Bridge - Köprü </font> Bir köprü iki eternet parçasını bağımsız bir protokol aracılığı ile bağlamaktır. Paketler IP adresleri yerine(rout...) |
|||
364. satır: | 364. satır: | ||
==Kurulum== | ==Kurulum== | ||
synaptic'teki paket adı '''bridge-utils''' | synaptic'teki paket adı '''bridge-utils''' | ||
− | |||
− | |||
==İlgili bağlantılar== | ==İlgili bağlantılar== | ||
'''Kaynak:''' http://linux-net.osdl.org/index.php/Bridge | '''Kaynak:''' http://linux-net.osdl.org/index.php/Bridge |
Bridge - Köprü
Bir köprü iki eternet parçasını bağımsız bir protokol aracılığı ile bağlamaktır. Paketler IP adresleri yerine(router gibi) Katman 2 deki sevk bittiğinden beridir, bütün protokoller açıkça köprüden geçebilirler.
Linux bridge kodları ANSI/IEEE 802.1d standardının alt kümesini tamamlar [1]. Orijinal linux köprüleme ilk Linux 2.2de yapıldı, sonra tekrar Lennert Buytenhek tarafından yazıldı. köprülemek için kodlar kenel 2.4 ve 2.6 serilerinde kernel ile bütünleşti.
Bir Linux köprüsü saf donanımsal köprülemeden daha iyidir, çünkü ayrıca filtreleme ve trafiği şekillendirme imkanınızda var. Köprüleme ve güvenlik duvarı kombinasyonu arkadaşlık projesi ebtables ile sağlanmıştır.
Çekirdek 2.4 ve 2.6'nın parçası olarak kod güncellendi, kernel.org 'da bulunabilir.
Olası gelecek geliştirmeleri:
Köprüleme şuan ki tüm büyük dağıtımlarda 2.4 (ve 2.6) çekirdeklerde desteklenmektedir. Gerekli yönetici araçları çoğu dağıtımda bridge-utils paketinde yer alır. Paket sürümlerinin bakımı indirme sayfasında yapılmaktadır.
kernel.org 'dan çekirdeğin son sürümünü indirip kendi güncel sürümünüzüde yapabilirsiniz ve bridge-utils GIT deposundaki kaynak koddan araçları yenden yapabilirsiniz.
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/bridge-utils.git $ cd bridge-utils $ autoconf $ ./configure
Çekirdekte köprülemeyi etkin hale getirmelisiniz. Ağ -> 802.1d Ethernet köprüleme'yi evet yada module şeklinde ayarlayın.
Başlamadan önce ağ kartlarının ayarlarının yapılmış olduğundan ve düzgün çalıştığından emin olun. IP adresini ayarlamayın, ve başlangıç betiklerinin eternet bağdaştırıcılarında da DHCP'yi çalıştırmasına izin vermeyin. IP adresi köprü yapılandırıldıktan sonra ayarlanmalıdır.
ifconfig komutu her iki ağ kartınıda göstermelidir, onlar Aşağı(DOWN) olmalıdır.
Çoğu durumda, köprü kodları modül olarak yapılmıştır. Eğer modül doğru yapılandırılıp, kurulmuşsa, ilk brctl komutu ile otomatikman yüklenecektir.
Eğer köprü araçları doğru yapılmış ve çekirdek ve köprü modülleri TAMAM (OK) ise, bir brctl sonucu bir küçük komut özeti gösterir.
# brctl # commands: addbr <bridge> köprü ekle delbr <bridge> köprü sil addif <bridge> <device> köprüye bağdaştırıcı ekle delif <bridge> <device> köprüden bağdaştırıcı sil setageing <bridge>
komut
brctl addbr "bridgename"
bridgename isimli mantıksal bir köprü örneği oluşturur. Köprü yapmak için en azından bir mantıksal örneğe ihtiyacınız var. Mantıksal köprüyü köprülemede yer tutan bağdaştırıcıların içeriğini taşır. Her köprü örneği yeni bir ağ bağdaştırıcısını temsil eder.
ilgili kapatma komutu ise:
brctl delbr bridgename
Komut
brctl addif bridgename device
"bridgename" köprüsünün parçası olarak ağ aygıtı ekler. Bütün aygıtlar büyük bir ağ gibi köprü eyleminde içerilir. Bir aygıtı bir çok köprüye eklemek veya bir köprü aygıtına köprü eklemek mümkün değildir , çünkü hiç bir etki yaratmayacaktır! Köprüye bir aygıt eklendiğinde iletmeye başlamadan önce parçanın eternet adreslerini öğrenmek kısa bir süre alır.
Köprüden bir bağdaştırıcıyı ayırmak için gerekli komut:
brctl delif bridgename device
brctl show komutu tüm köprü durumu hakkında özet verir, çalışma örneği aşağıdaki gibidir:
# brctl addbr br549 # brctl addif br549 eth0 # brctl addif br549 eth1 # brctl show bridge name bridge id STP enabled interfaces br549 8000.00004c9f0bd2 no eth0 eth1
Bir köprü bir kere brctl showmacsçalıştırdığında iletilen trafik ağ adresleri hakkında bilgi gösterecektir (ve köprünün kendi hakkında)
# brctl showmacs br549 port no mac addr is local? ageing timer 1 00:00:4c:9f:0b:ae no 17.84 1 00:00:4c:9f:0b:d2 yes 0.00 2 00:00:4c:9f:0b:d3 yes 0.00 1 00:02:55:1a:35:09 no 53.84 1 00:02:55:1a:82:87 no 11.53 ...
Eskime süresi saniye sayısıdır Bir MAC adresinden bir paket aldığınızda bu MAC adresi iletme veri tabanında tutulacaktır. İLletme veri tabanındaki girişler sonsuzadek çevremizde kalmaması için düzenli olarak zaman aşımına uğrar. Normal olarak bu parametreyi değiştirmeye gerek yoktur, fakat bununla değiştirilebilir ( zaman saniye birimindedir).
# brctl setageing bridgename time
Eskime süresini sıfır yapmak bütün girişleri kalıcı yapar.
Eğer çoklu veya gereğinden fazla köprü varsa, ele alırken çoklu hops(anlamını bulamadım)'dan ve cyclic routes'dan kaçınmak için kapsayan Ağaç kontrolünü etkinleştirmelisiniz (STP).
# brctl stp br549 on
STP parameterelerini şöyle görebilirsiniz:
# brctl showstp br549 br549 bridge id 8000.00004c9f0bd2 designated root 0000.000480295a00 root port 1 path cost 104 max age 20.00 bridge max age 200.00 hello time 2.00 bridge hello time 20.00 forward delay 150.00 bridge forward delay 15.00 ageing time 300.00 gc interval 0.00 hello timer 0.00 tcn timer 0.00 topology change timer 0.00 gc timer 0.33 flags eth0 (1) port id 8001 state forwarding designated root 0000.000480295a00 path cost 100 designated bridge 001e.00048026b901 message age timer 17.84 designated port 80c1 forward delay timer 0.00 designated cost 4 hold timer 0.00 flags eth1 (2) port id 8002 state disabled designated root 8000.00004c9f0bd2 path cost 100 designated bridge 8000.00004c9f0bd2 message age timer 0.00 designated port 8002 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags
STP hakkında ayarlanabilir bir miktar parametre vardır. Kod bağlantının hızını ve diğer parametreleri otomatik olarak belirler, yani değiştirmeye ihtiyaç yoktur.
Her köprünün göreceli önceliği ve maliyeti vardır. STP kodunda her bağdaştırıcı bir bağlantı kapısı (sayı) ile ilişkilendirilmiştir. Her birinin önceliği ve maliyeti vardır, bu hangisinin paketi iletmek için en kısa yol olduğuna karar vermek için kullanılır. diğer yol kapalı olduğunda en düşük maliyetli yol kullanılır. Eğer çoklu köprüleriniz ve bağdaştırıcılarınız varsa en iyi performansı elde etmek için öncelikleri belirlemelisiniz.
# brctl setbridgeprio bridgename priority
Kök köprü olarak en düşük maliyetli köprü seçilecektir. kapsayan ağaçta kök köprü merkezi köprüdür.
Bir köprüde her bağdaştırıcının hızı farklıdır ve bu değer hangi bağlantının kullannılacağına karar verilirken kullanılır. Hızlı bağdaştırıcıların düşük maliyeti olmalı.
# brctl setpathcost bridge port cost
Aynı maliyetle çoklu kapı(port)sı olanlar önceliğe sahiptirpriority
iletme gecikme zamanı iletme durumuna girmeden dinleme ve öğrenme durumunda harcanan zamandır. Bu gecikmenin anlamı yeni bir köprü katılmadan önce meşgulmüş gibi görünür, meşgul ağ olur.
# brctl setfd bridgename time
Düzenli olarak, bir selamlama paketi kök köprüsüne ve belirlenen köprülere yollanır. Selamlaşma paketleri bütün köprülenmiş yerel ağ hakkındaki topoloji hakkında iletişim için kullanılır.
# brctl sethello bridgename time
Eğer kapsayan ağaçtaki farklı bir köprü uzun süre selamlama paketi yollamazsa, ölü olarak kabul edilir. Bu sürenin dolması şöyle ayarlanır:
# brctl maxage bridgename time
Bir köprünün örnek ayarlaması şöyle yapılır:
# ifconfig eth0 0.0.0.0 # ifconfig eth1 0.0.0.0 # brctl addbr mybridge # brctl addif mybridge eth0 # brctl addif mybridge eth1 # ifconfig mybridge up
Bu ayarlar saf bir köprü olarak ev sahipliği yapar, kendisinin ip adresi bulunmaz, böylece TCP/IP yolu ile uzaktan erişilemez (veya hacklenemez).
Alternatif olarak, ağınızda yer tutması için sanal bağdaştırıcı mybridge yapılandırabilirsiniz. Bir bağdaştırıcı gibi davranır (normal ağ kartı gibi). Tam olarak sizin yapılandrdığınız biçimde, önce kmutu şu şekildeyapılır:
# ifconfig mybridge 192.168.100.5 netmask 255.255.255.0
Eğer köprünüzün otomatik olarak IP adresini ADSL modemden DHCP(veya benzer bir yapılandırma) yolu ile yapılandırmasını istiyorsanız, şunu yapın:
# ifconfig eth0 0.0.0.0 # ifconfig eth1 0.0.0.0 # brctl addbr mybridge # brctl addif mybridge eth0 # brctl addif mybridge eth1 # dhclient mybridge
Eğer bunu defalarca yaparsanız, bir çok dhclient işlemi ile bitirebilirsiniz. zorla bunları bitirebilirsinizin veya bunun hakkında omshell(1) den bilgi alabilirsiniz
[Etcnet|/etc/net]] 'de biz ilk 2 eternet aygıtını port0 ve port1 'e ayarladık:
# cat >> /etc/net/iftab port0 mac 00:13:46:66:01:5e port1 mac 00:13:46:66:01:5f ^D # mkdir /etc/net/ifaces/port0 # cat > /etc/net/ifaces/port0/options TYPE=eth MODULE=via-rhine # mkdir /etc/net/ifaces/port1 # cat > /etc/net/ifaces/port1/options TYPE=eth MODULE=via-rhine ^D
Sonra köprüyü tasvir ettik:
# mkdir /etc/net/ifaces/mybridge # cat > /etc/net/ifaces/mybridge/options TYPE=bri HOST='port0 port1' ^D # cat > /etc/net/ifaces/mybridge/brctl stp AUTO on ^D
Şimdi "ifup mybridge" 'i kullanıp bırakabiliriz. port0 ve port1 otomatik olarak bırakacaktır.
Bir köprü farklı ağ bağdaşçıları arasında saydam olarak trafiği geçirir. Bunun düz İnglizcedeki (burda Tütkçe yazsammı) anlamı bir köprü iki veya daha fazla eternet karrtını bağlar ve büyük bir yerel ağ oluşturur.
Evet. Köprü protokoller hakkında hiç bir şey bilmez, sadece eternet çerçevelerini görür. Şunun gibi, köprüleme işlevi protokolden bağımsızdır, kesinlikle A IPX, NetBEUI, IP, IPv6, vb. gönderirken sorun olmamalı.
Lütfen şunu aklınızdan çıkarmayın, bu kod linux kutularını dikkate alan adanmış donanım ile yazılmamıştır. Linux köprüleme kodunun switch'lerin yerini alabileceğini düşünmeyin, ama Linux ağ yeteneklerini genişlettiğinden tercih edin. Bazı durumlarda Linux router adanmış routerdan daha iyidir bazı durumlarda ise bunun tersidir. bazende linux köprü adanmış köprüden daha iyidir, bazende bunun tersidir.
Linux köprüleme kodunun gücü esnekliğinden gelmektedir. Most of the power of the Linux bridging code lies in its flexibility. Linux ile zaten bir sürü acayip şey yapabiliyoruz ( Linux uman routing ve trafik kontrol belgesini okuyup olasılıkları ögrenin), karıştırma içine köprüleme kodu daha fazla filitre uygulayabilir.
Adanmış çözüm yerine, Linux çözümünün en önemli avantajı geniş firewll yetenekleridir. tam işlevsel net filitresini (iptabloları) köprüleme ile birlikte kullanmak mümkündür, bunu çoğu patentliler sunamıyor.
Bir köprü olarak davranmak için ağ aygıtının ayrımsız modda çalışmasını gerektirir, bu ağdaki bütün trafiği alması anlamına gelir. Gerçekden yoğun bir ağda, bu işlemciden önemli miktarda bant genişliği yiyebilir, hafıza yavaşlaması ve sistem çökmesi olabilir. cevap ayrılmış bir adanmış linux kutusunu köprü olarak kullanın, yada ayrı bir donanımsal switch kullanın.
Performans ağ kartı ve işlemci tarafından sınırlandırılmıştır. Depaul Universitesinden James Yu Linux köprüleme ve bir Catalyst switch'in karşılaştırma araştırma belgesini yayınlamıştır. Yu-Linux-TSM2004.pdf
Bunun yapılması doğru bulunmuyor. Köprünün işlevi (olması gereken) ağ için tam saydam olmalıdır, Köprünün birleştirdiği ağlar bir büyük ağ gibi görünmelidir. Bu köprünün traceroute'da görünmememsinin nedenidir; paketler alt ağ sınırlarını aşıyormuş gibi hissedilmiyor.
Bunun hakkında daha fazla bilgi için, TCP/IP ağlar hakkında bir kitap okuyun.
Köprü eklemeye çalıştığımda şunu söylüyor!: "br_add_bridge: bad address"
Kerneliniz eski (2.2 veya daha eski), yada kernelinizin içine Ethernet köprülemeyi yapılandırmayı unuttunuz.
kernel'inizin ethernet filtresi etkin olabilir(ebtables, bridge-nf, arptables) , ve trafik filtreye takılmakta olabilir. Bunu kapalı konuma getirmenin en kolay yolu go to /proc/sys/net/bridge adresine gidin. bridge-nf-* girişlerinin 1'e ayarlı olup olmadığına bakkın; bu durumda, bunları sıfıra ayarlayın ve tekrar deneyin.
# cd /proc/sys/net/bridge # ls bridge-nf-call-arptables bridge-nf-call-iptables bridge-nf-call-ip6tables bridge-nf-filter-vlan-tagged # for f in bridge-nf-*; do echo 0 > $f; done
2.2 için temel kernel kodu, şuanki köprüleme kodunu desteklemez. orijinal geliştirilmesi 2.2 üzerindeydi, ve onun için kullanılmış yamalar bulunmaktadır. ama bu yamalar artık daha fazla bakım görmüyor.
Evet, gelecekteki 2.6 dağıtımında RSTP desteği bütünleşik olacak. Kod 2.4 sürümü için yapılmıştı ve temizlenmesi gerekli.
Linux köprüleme çok esnektir; LAN'lar, geleneksel eternet aygıtları, veya PPP gibi yalancı aygıtlar, VPN'ler veya VLAN'lar. Aygıtlar hakkındaki tek kısıtlama :
Evet. Bunun için çoğu çekirdekte kodlar bulunmaktadır. ebtables projesine bakın.
Hayır, adreslemesi ve kare boyutları farklı.
Bunun anlamı Linux köprünüz tekrar Topoloji Değişimi Uyarısı Köprü Protokolü Veri Birimi ( şimdi harflerin ne olduğunu alıyorsunuz :-). Cidden belki yakınında spanning tree protocol (kapsayan ağaç protokolü) (köpsüler bunu konuşur) kurallarını derlemeyen farklı bir switch (veya Linux köprüsü) var .
Her köprülenen yerel ağda, bir 'Ana köprü (master bridge)', ayrıca kök köprü (root bridge) olarakda adlandırılır. Hangi köprünün brctl kanllanmakta olduğunuda bulabilirsiniz.
Köprülenmiş bir yerel ağın topolojisi değiştiğinde (örneğin birisi iki köprü arasında kablo çıkarırsa), bunu belirleyen köprü, kök köprüye topoloji değişimi mesajı yollar. Kök köprü ise selamlama paketinde topoloji değişti bit'i X (X genelde 30 kadardır). Bu yolla, bütün köprüle topoloji değişimini ögrenir, böylece ölçümler alırlar örneğin MAC girişlerinde daha hızlıdır.
Topoloji değişti uyarısını yolladıktan sonra, eğer köprü alınan selamlama paketlerinde topoloji değişti bit'i bulamazsa, (var olması durumunda tpoloji değişti uyarısının onayı olarak görev yapar), topoloji değişti uyarısı kayboldu diye sonlanır. Bundan onu dolayı tekrar iletir.Ancak, bazı köprüler, topoloji değişim bildirimlerini dikkate almamalarına yol açan Kapsayıcı Ağaç Protokollerinin kendinden özerk uygulamalarını yürütürler. Kök köprü olarak bu köprülerden birine sahip seniz, bütün diğer köprüler topoloji değişti uyarısını vermeye devam edecektir. bu türde syslog mesajlarına neden olacaktır.
Yapabileceğiniz bir kaç şey var:
ve eğer kapsayan ağaç protokolünde köprü yoksa, önünüze kargaşa çıkacaktır, paketler sonsuzadek ötelenektir. Bunu kesinlikle tapmayın(TM).
Ne yazık ki, bazı ağ kartlarının sürücüleri hatalı yüklerken çöküyor. durum geliştiriliyor, güncel çekirdeğe ve ağ sürücüsüne sahip olmak yardımcı olabilir. Ayrıca başka bir marka ile değiş tokuşu deneyebilirsiniz.
Lütfen tüm problemleri Köprü posta listesine rapor edin bridge@osdl.org . Eğer network kartınız çalışmıyor ise (hatta köprü olmadan bile) o zaman linux ağ posta listesini deneyin linux-net@vger.kernel.org .
Bu bilinen bir sorun, ve bu köprü kodundan kaynaklanmıyor. çoğu kablosuz kart kaynak adresin spoof(taklit edilmesi)ne izin vermiyor. bu bazı çip takımlarında olan donanım yazlımından olan bir kısıtlama sorunu. köprü posta listelerinde biraz bilgi bulabilirsiniz.
Herhangi biri hiç bir şey için izin vermemesine ragmen MAC adresi için Wavelan çevresinden dolaşmanın bir yolunu buldumu? ( Has anyone found a way to get around Wavelan not allowing anything but its own MAC address?) (Michael Renzmann için cevaplayın (mrenzmann at compulan.de))
Bilgisayar kullanıcılarının %99'u bundan kurtulmanın bir yolunu asla bulamayacak. Bu işlev için özel bir donanımsal yazılım gerekmekte. Bu donanım yazılımı her hangi bir WaveLAN kartının RAM'ine yüklenebilmeli, böylece köprüleme işlevini yapabilmeli. bağdaştıcı için halka açık bir belge bulunmuyor. bunun tek yolu kartın tüm işlevlerini kontrol eden ve kartın RAM'ine ulaşımı olan tam sürüm hcf kütüphanesine sahip olmaktır. bu tam sürüm Lucent için onlar finansal bir kazanç olduğunu bilmeleri gerekli, ve NDA üzerinde imzaları olacak. Lucent bu klonudaki fikrini değiştirmeden, bu yazılım parçasına ulaşamayacağız. (Hiç şüphem yok bu asla olmayacak).
Eğer acilen köprüleme yapabilen bir kablosuz ağ kartına ihtiyacınız varsa, kartında prism çipsetini taşıyanları tercih edin ( Harris Intersil tarafından üretilmiştir). bu kartlar için gerekli sürücüler şu adrestedir www.linux-wlan.com (Absoval 'dan bir sitedir), ve linux için halka açık bir yükleme aracı ve donanım yazılımı bulunduğu hakkında bir posta aldım. Eğer bir ulaşım noktası (access point) ek özelliklerine ihtiyacınız varsa, Absoval ile görüşün.
kablosuz (802.11)'e tam köprüleme yapmak için WDS desteği gerekli. Şu anki yürütme bunu yerine getirmiyor.
Bazı kablosuz sürücüleri ile sınırlı kablosuz Eternet işlevleri yapmak mümkün. Farklı yollayıcı adresi ve kaynak adrelerini destekleyen aygıt gerekli. Bu WDS 'nin yaptığı şeydir.
Bunun çalışmasının çeşitli yolları var ancak, onun kipleri, çerçeve başlıları tam açık değil ve 802.11 anlaşılmadan doğru alınamayacaktı.
Bunun neden ağ kartı çok fazla paket alıyor. deneyebileceğizniz bir kaç şey var. Birinci olarak, sürücüyü NAPI desteği ile yapın ( eğer bu öntanımlı değil ise). NAPI anlamı sürücü, alma işlemini düşük seviye kesintiden değil, IRQ yazılımından yapacaktır.
Eğer sürücünüz NAPI'yi detseklemiyorsa, sürücünün kesintide yapacağı iş sayısını artırabilirsiniz. 3c59x için bu max_interrupt_work seçeneği ile yapılmıştır (yani /etc/modules.conf dosyasına şunun gibi bir şey ekleyin 'options 3c59x max_interrupt_work=10000' ), diğer kartların benzer seçenekleri vardır.
Köprü DHCP trafiğini (yayınları) iletecek ve cevaplayacaktır. Yarıca siz DHCP'yi köprünün yalancı bağdaştırıcısı ile yerel IP adresine ayarlayabilirsiniz.
Ortak bir hata ise köprü iletme gecikmesi ayarını 30 saniye yapmak. Bir bağdaştırıcı köprüye katıldıktan ilk 30 saniye sonra, hiç bir şey yollamayacaktır. Bunun nedeni eğer köprü karmaşık bir topoloji kullanıyorsa, döngüler yapmamak için , yeni köprüleri keşfetmeli. bu anında kapsayan ağaç protokolünün(Rapid Spanning Tree Protocol) (RSTP) oluşturulma nedenidir.
Eğer köprü yalnız kullanılıyorsa ( yanında hiç bir köprü yoksa) köprüye bir bağdaştırıcı eklemeden önce, iletim gecikmesini kapatmak ( sıfıra ayarlamak) güvenlidir. Sonra DHCP alıcısını çalıştırabilirsiniz.
# brctl setfd br0 0 # brctl addif br0 eth0 # dhclient eth0
synaptic'teki paket adı bridge-utils