Ağ Ayarları
From OpenBSD Belgeleme Projesi
Başlamadan
Sıkça Sorulan Sorular ( FAQ ) kısmındaki Kernel Configuration and Setup bölümü ile ifconfig(8) vee netstat(1) manual sayfalarını okumuş olmanız, bu dokumani anlamanizda size oldukca yardımcı olacaktır. Eger Network Yöneticisiyseniz ve bir OpenBSD makineyi router olarak kullaniyorsaniz [Understanding IP Addressing] dokumanini gercekten okumaniz gerekmektedir. "Understanding IP Addressing" dokumani özellikle 1 den fazla ağı yöneten uzmanlar icin IP networklerinin temel bilgilerini anlatan bir kaynaktir.
WEB, FTP ve MAIL sunuculari gibi uygulamalar yönetiyorsaniz RFC'leri okumaniz isinizi daha da kolaylastircaktir. RFC dokumanlarinin tamamini ayni anda okumaniz tabiki mumkun degil. RFC'ler Internet icin binlerce standart protocol tanimladiklari icin networkunuzde kullandiginiz veya ilgilendiginiz birkac konuyu basliklardan yakalayip okumaniz cok daha yararli olacaktir.
Başlangıç Network Ayarları
Network Arayuzunun Tanimlanmasi ve Ayarlari
Ethernet Networklerde, networking islemlerinin uygulanmasi icin oncelikle bilgisayarinizda kullandiginiz network arabirimini isletim sisteminize tanitmalisiniz. OpenBSD'de arabirimler baglanti tiplerine gore degil , kullanilan kart tiplerine gore isimlendirilir.
Bilgisayarinizdaki ağ kartininin sistem tarafindan aktif hale getirildigini 2 yolla gorebilirsiniz; ilk yol sisteminiz acilirken ekranda akan yazilari takip ederek network karti icin “initialized” bilgisinin alinmasidir. Bu bilgi, kartinizin sistem tarafindan baslatildigini gosterir. Diger bir yontemi ise acilis sirasinda ekrandaki yazilari kacirdiginizda veya network arabirimi ile ilgili son durumu ogrenmek istediginizde sistem komut satirinda dmesg(8) komutunu kullanmanizdir. Network arabiriminizi sistem komut satirinda ifconfig(8) komutunu kullanarak da gorebilirsiniz. “fxp” olarak isimlendirilmis bir Intel Fast Ethernet network kartinin son durumu ile ilgili dmesg komut çıktısı asagidaki satirlarda yer almaktadir :
fxp0 at pci0 dev 10 function 0 "Intel 82557" rev 0x0c: irq 5, address 00:02:b3:2b:10:f7
inphy0 at fxp0 phy 1: i82555 10/100 media interface, rev. 4
Ethernet kartinizin adini bilmiyorsaniz supported hardware list dokumanindaki listeye bakabilirsiniz. Dokumanda bircok network kartinin genel isimleri ve bu kartlarin OpenBSD de kullanilan isimleri listelenmistir. Netwrok kartinin kisaltilmis alfabetik adi (fxp) ile cekirdek tarafindan atanmis bir sayi ile birlestirerek arayuz isminizi elde edersiniz (fxp0) . ifconfig(8) komutu kullanilarak isletim sistemi uzerinde network arayuzlerinin hangi isim ile tanimlandigi gorulebilir . ifconfig –a komut ile sistem uzerindeki tum network arayuzleri listelenir. Asagidaki ciktida sadece bir adet fiziksel Ethernet arayuzu listelenmistir (fxp0).
$ ifconfig -a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33224
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
lo1: flags=8008<LOOPBACK,MULTICAST> mtu 33224
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
address: 00:04:ac:dd:39:6a
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet 10.0.0.38 netmask 0xffffff00 broadcast 10.0.0.255
inet6 fe80::204:acff:fedd:396a%fxp0 prefixlen 64 scopeid 0x1
pflog0: flags=0<> mtu 33224
pfsync0: flags=0<> mtu 2020
sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 296
sl1: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 296
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
ppp1: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
tun0: flags=10<POINTOPOINT> mtu 3000
tun1: flags=10<POINTOPOINT> mtu 3000
enc0: flags=0<> mtu 1536
bridge0: flags=0<> mtu 1500
bridge1: flags=0<> mtu 1500
vlan0: flags=0<> mtu 1500
address: 00:00:00:00:00:00
vlan1: flags=0<> mtu 1500
address: 00:00:00:00:00:00
gre0: flags=9010<POINTOPOINT,LINK0,MULTICAST> mtu 1450
carp0: flags=0<> mtu 1500
carp1: flags=0<> mtu 1500
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
gif1: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
gif2: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
gif3: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
Yukarida goruldugu uzere ifconfig(8) komutu ihtiyac duyulandan daha fazla bilgi vermektedir. Ekran ciktisindan fxp0 network kartinin IP adresi 10.0.0.38 olacak sekilde ayarlandigi "inet 10.0.0.38 netmask 0xffffff00 broadcast 10.0.0.255" satirinda gorulmektedir. UP ve RUNNING bayraklarindan kartin calisir oldugu anlasilmaktadir.
Sonuc olarak, ifconfig komutu ekran ciktisi ile sistemde farkli farkli arayuzlerin varsayilan olarak aktif hale geldigi gorulebilir. Bu farkli interfacelerin bir kismi sanal interface olup farkli fonksiyonlar icin kullanilirlar. Bu arayuzlerin hangi islevler icin aktif oldugunun detaylari man sayfalarinda aciklanmistir :
- lo - Loopback Arabirimi
- pflog – Paket Filtreleme Log Arabirimi
- sl - SLIP Network Arabirimi
- ppp - Point to Point Protocol
- tun - Tunnel Network Arabirimi
- enc – Enkapsulasyon Arabirimi
- bridge - Ethernet Bridge Arabirimi
- vlan - IEEE 802.1Q Enkapsulasyon Arabirimi
- gre - GRE/MobileIP Enkapsulasyon Arabirimi
- gif - Generic IPv4/IPv6 Tunnel Arabirimi
- carp - Common Address Redundancy Protocol Arabirimi
Sistemdeki network arabiriminiz yapilandirilmamis ise ilk olarak /etc/hostname.xxx seklinde bir dosya yaratin. Dosyanin uzantisi olarak arabiriminizin ismini verin. Ornegin arabirimizin OpenBSD uzerindeki ismi fxp0 ise yarattiginiz dosyanin adi /etc/hostname.fxp0 olacaktir. Bu dosyanin icerigi oldukca basit olacak :
address_family address netmask broadcast [diger opsiyonlar]
Örnek; inet 192.168.0.23 255.255.255.0 NONE
NOT:Dosyanin icerik formati ile ilgili daha fazla detay icin hostname.if(5) man dosyasini inceleyebilirsiniz.)
IPv4 e gore yapilandirilmis basit bir arabirim yapilandirma dosyasinin icerigi asagidaki sekildedir :
$ cat /etc/hostname.fxp0 inet 10.0.0.38 255.255.255.0 NONE
Ethernet arabiriminizi 100baseTX full-dublex modda calirtirmak isterseniz, dosya icerisinde Ethernet icin medya tiplerini belirterek yapilandirmayi gerceklestirebilirsiniz:
inet 10.0.0.38 255.255.255.0 NONE media 100baseTX mediaopt full-duplex
(Medya tipleri icin Ethernet yapilandirmasi yaparken dikkat edilmesi gereken nokta baglantinin digger ucununda full dublex modda calisiyor olmasidir.) Belli bir arabirim icin belirli- spesifik bayraklar kullanmak isteyebilirsiniz.Ayni sekilde dosya isminin formati degismeden yapilandirma gerceklestirilir.
$ cat /etc/hostname.vlan0 inet 172.21.0.31 255.255.255.0 NONE vlan 2 vlandev fxp1
Ethernet arabirimini yapilandirmak icin sonraki asama sistemde varsayilan ag gecitinin(Default Gateway) tanimini yapmaktir. Bunun icin sisteminizin ag gecidi IP adresini /etc/mygate dosyasi icine yazmaniz yeterlidir. Bu sekilde sistem her boot ettiginde ag gecidi bilgisi bu dosyadan alinacak ve sisteme yuklenecektir. Sistemde nameserver tanimlamasi ve /etc/hosts dosyasinin yapilandirilmasi yapilmalidir. Yine sistem her boot ettiginde nameserver tanimlamalarinin silinmemesi ve sistem tarafindan kullanilmasi icin nameserver IP adreslerini yaratacaginiz /etc/resolv.conf dosyasi icerisine yazmaniz yeterlidir. /etc/hosts dosyasinin yapilandirilmasi icin hosts(5) man dosyalarini incelemelisiniz. /etc/resolv.conf dosyasinin yapilandirilmasi icin de resolv.conf(5) man dosyasi incelenebilir.
Sisteminizde IP adres yapilandirmasini el ile yapmiyor, sistemin IP adresi almasi icin DHCP sunucusu kullaniyorsaniz DHCP bolumunu okumalisiniz.
/etc/resolv.conf dosyasinin basit yapilandirmasi icin asagidaki ornek yeterlidir. 125.2.3.4 ve 125.2.3.5 name serverlarinin resolv.conf dosyasi icerisinde nasil sisteme tanitildigi asagisaki ornekte gorulmektedir.Burada goruldugu uzere sisteminizin icinde bulundugu domain in adi “enderunix.org” dur :
$ cat /etc/resolv.conf search enderunix.org nameserver 125.2.3.4 nameserver 125.2.3.5 lookup file bind
Buıraya kadar yapilan degisikliklerin sistem tarafindan kullanilmasi icin ya sistemi yeniden baslatmak veya /etc/netstart scriptini calistirmak gerekmektedir. Sistemi yeniden baslatmadan yapilan degisikliklerin etkin olmasi icin root olarak netstart scripti su sekilde calistirilir :
# sh /etc/netstart writing to routing socket: File exists add net 127: gateway 127.0.0.1: File exists writing to routing socket: File exists add net 224.0.0.0: gateway 127.0.0.1: File exists
Netstart scriptini calistirmakla daha once yapilandirilmasi gerceklesmis bazi ayarlar yeniden yapilandirilir. Mesela sistemdeki mevcut yonlendirme tablosunda var olan satirlar yeniden yazilmak istenir bu nedenle scriptin calistirildiginda bazi hata ciktilari verildigi gorulur. Su asamadan itibaren sisteminiz ayakta ve calisir durumdadir. Tum yapilandirmanizi tamamladiktan sonra network arabiriminizin son yapilandirmasini incelemek icin ifconfig(8) komutunu kullanabilirsiniz.
Yonlendirme tablonuzu ise netstat(1) veya route(8) komutlari ile kontrol edebilirsiniz. Yonlendirme sorunlari yasiyorsaniz yonlendirma tablosunu sayisal olarak incelemek uzere route komutunu “route -n” seklinde kullanmalisiniz. –n parametresi ile yonlendirme tablosunu incelerken direkt IP adresleri ile tablo karsiniza gelecektir. Aksi taktirde tabloda domain isimleri yer alacak ve analiz islemi biraz karisacaktir. Asagida hem netstat hem de route komutlari ile alinan yonlendirme tablosu ciktilari yer almaktadir :
$ netstat -rn Routing tables Internet: Destination Gateway Flags Refs Use Mtu Interface default 10.0.0.1 UGS 0 86 - fxp0 127/8 127.0.0.1 UGRS 0 0 - lo0 127.0.0.1 127.0.0.1 UH 0 0 - lo0 10.0.0/24 link#1 UC 0 0 - fxp0 10.0.0.1 aa:0:4:0:81:d UHL 1 0 - fxp0 10.0.0.38 127.0.0.1 UGHS 0 0 - lo0 224/4 127.0.0.1 URS 0 0 - lo0 Encap: Source Port Destination Port Proto SA(Address/SPI/Proto)
$ route show Routing tables Internet: Destination Gateway Flags default 10.0.0.1 UG 127.0.0.0 LOCALHOST UG localhost LOCALHOST UH 10.0.0.0 link#1 U 10.0.0.1 aa:0:4:0:81:d UH 10.0.0.38 LOCALHOST UGH BASE-ADDRESS.MCA LOCALHOST U
OpenBSD Isletim Sisteminin Ag Gecidi Olarak Kullanimi
Uzerinde OpenBSD isletim sistemi calisan bilgisayarinizi ag gecisi diger adiyla router olarak kullanmak oldukca basittir. OpenBSD'yi Internet uzerinde bir router olarak kullanacaksaniz Packet Filter kurulumunu okumaniz uygun olacaktir. Zira network hizmeti vericilerindeki ve de local girislerdeki IPv4 adreslerinin azligi sebebi ile, Network adres ceviricilerine IP adres alaniniz hakkinda bilgi almak icin bakmak isteyebilirsiniz.
GENERIC cekirdekcigi simdiye kadar IP forwardlamasina izin verme ozelligine sahipti, fakat duzeltilmesi gereklidir.Bunu sysctl(8) hizmetini kullanarak yapmalisiniz.Bunu devamli degistirmek icin /etc/sysctl.conf dosyasini degistirmelisiniz boylece IP forwardlamasina izin vermis olursunuz. Bunu yapmak icin oyleyse bicim dosyasindaki bu satiri ekleyiniz.
net.inet.ip.forwarding=1
Bu degisikligi sistemi yeniden yuklemeden ( bir kez daha boot etmeden ) yapmak icin, sysctl(8) hizmetini kulanmalisiniz. Buna ragmen sistemi yeniden yuklemeden yapilan bu degisikligin uzun sure devam etmiyecegini ve root olarak calisabilmesi icin yeni bir duzenlemeye ihtiyac duydugunu hatirlayin.
# sysctl net.inet.ip.forwarding=1 net.inet.ip.forwarding: 0 -> 1
Simdi iki taraftaki diger hostlardaki routerlari degistirelim. OpenBSD in kendi OpenBGPD, routed(8), mrtd, zebra, and quagga gibi yazilimlarini kullanarak OpenBSD yi roter olarak kullanabilecegimiz bir cok imkan (yol) var ve temel sistemin bir parcasi olarak root edilip yuklenir.
OpenBSD bircok T1, HSSI, ATM, FDDI, Etherneti ve seri (PPP/SLIP) arayuzlerini destekler.
Aliaslarin bir arayüzde kurulumu
OpenBSD nin IP aliaslarin bir arayuzde kurulumu icin kolay bir mekanizmasi var. Bunu yapmak yanlizca /etc/hostname.<if> dosyasini duzeltiniz. Bu dosya açılışta "rc startup hierarchy"nin bir parcasi olan /etc/netstart(8) betiğinde okunur. Örnegin, kullanicini dc0 arayüzü oldugunu ve network ununde 192.168.0.0 oldugunu varsayalim. Bir diger onemli bilgi :
- Dc0 icin IP 192.163.0.2 dir.
- NETMASK 255.255.255.0 dir.
Aliaslar hakkinda bir iki anektod: OpenBSD de yanlizca arayüz ismi kullanilir. Birinci ve ikinci alias arasinda bir fark yoktur. Diger isletim sistemlerinden farkli olarak, OpenBSD onlara dc0:0 ,dc0:1 olarak göndermez. Eger belirli bir ifconfig ile alias olmus IP adresine bakacaksan yada bir alias ekliyecekseniz, komut defterine „ifconfig int“ yerine „ ifconfig int alias“ dediginden emin olun.Aliaslari „ifconfig int delete“ ile silebilirsiniz.
Sizin bircok IP adresini ayni IP altaginda aliaslarla kullandiginizi ve sizin Netmaskinizin her bir alias icin 255.255.255.255 olarak kuruldugunu varsayalim. Bunlar birinci IP nin arayuze baglanmasi icin bunun netmaskini takip etmek zorunda degildir. Bu ornekte , /etc/hostname.dc0, iki alias ayni zamanda 192.168.0.2 , netmask 255.255.255.0 olarak bicimlendirilen dc0 aracina eklenirler.
# cat /etc/hostname.dc0 inet 192.168.0.2 255.255.255.0 media 100baseTX inet alias 192.168.0.3 255.255.255.255 inet alias 192.168.0.4 255.255.255.255
Bir kere bu dosyayi yaptiginizda, sonuca ulasmak icin sistemi yeniden yuklemeniz yeterlidir. Bununla beraber ifconfig(8) tusunu el ile kulanarak aliasin yaklasmasini sagliyabilirsinz. Birinci aliasi getirmek icin bu komutu kullanabilirsiniz:
# ifconfig dc0 inet alias 192.168.0.3 netmask 255.255.255.255
Bu aliaslari gormek icin bu komutu kullanin:
$ ifconfig -A
dc0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST>
media: Ethernet manual
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
inet 192.168.0.3 netmask 0xffffffff broadcast 192.168.0.3
OpenBSD ile Güvenlik Duvarı Kullanımı
Packet Filtresi ( bundan sonra PF olarak kisaltildi ), TCP/IP trafiginin filtrelenmesi ve Network Adres translation icin OpenBSD”in sistemidir. Dolayisi ile PF TCP/IP trafiginin normallestirebilir ve duzenlenleyebilir ve genis bantli kontrolu ve paket oncelemesini sagliyabilir ve guclu ve esnek firewallarin yaratilmasinda kullanilabilir. [PF kullanim rehberinde aciklanmistir.]
Dynamic Host Configuration Protocol (DHCP)
DHCP, network arayüzlerini “otomatik” olarak ayarlayan bir protokoldür. OpenBSD , bir DHCP sunucusu ( diger cihazlarin duzenleme), bir DHCP alicisi ( baska cihazlar tarafindan düzenlenebilir), ve bazi durumlarda her ikisi birden olabilir.
DHCP Alicisi
dhclient(8) DHPC alicisini OpenBSD de dahil olarak kullanmak icin, /etc/hostname.xl0 düzenlemek gerekir (burada sizin ana ethernet arayuzunuzun xl0 oldugu varsayildi sizin ağ arayüzünüz ep0 yada fxp0 yada baska birsey olabilir.) bunun için hostname dosyasinin içerisine “dhpc”koymak yeterlidir :
# echo dhcp > /etc/hostname.xl0
böylece açılış sırasnda OpenBSD otomatik olarak DHCP alıcısı olacaktır. OpenBSD DHCP sunucusundan IP adresini, varsayılan ağ gecidini ve DNS sunucularını alacaktır.
Eğer DHCP alıcısını komut satırından başlatmak isterseniz, tabiki /etc/dhclient.conf dosyasının oldugundan emin olun ve sonra aşagıdaki komutu deneyin
# dhclient fxp0
Buradaki fxp0 arayüzü DHCP alıcısının arabirimidir.
DHCP istemcisini nasıl başlatacağınız sorun değildir. /etc/dhclient.conf dosyasının düzenleyebilirsiniz. Dhcp serverların maksadına göre DNS ilk "request" satırının içersinde olmaması durumunda DNS güncellenmez (Bunlar varsayılan ayarlardır. Buraları değiştirerek dhcp istemcisini geçersiz kılabilirsiniz)
request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name, lpr-servers, ntp-servers;
ve daha sonra domain-name-servers kaldırın. Tabiki hostname ve diğer ayarlarıda kaldırmanız gerekir.
dhclient.conf(5) dosyasını değiştirerek DHCP istemcisine resolv.conf(5) dosyasını nasıl oluşturacağınızı söylersiniz. DHCP istemcisi resolv.conf(5) dosyasına yazdığınız bilgileri geçersiz kılıp DHCP sunucus tarafında bilgileri alacaktır. Bundan dolayı resolv.cof doyasında yaptığınız bütün değişiklikler kaybolacaktır.
Bunu önlemek için iki tane mekanizma vardır:
- OPTION MODIFIERS (default, supersede, prepend, and append) dhclient.conf(5) içerisindeki seçenekleri geçersiz kılmanıza izin verir.
- resolv.conf.tail(5) dhclient(8) tarafında oluşturulan resolv.conf(5) dosyanıza ekleme yapmanıza izin verir.
örnek olarak eğer DHCP kullanıyorsanız fakat dhclient(8) tarafından oluşturulan resolv.conf(5) dosyasına lookup file binde eklemek isterseniz dhcpclient.cong içib hiçbir seçeneğiniz yoktur. bunu önlemek için resolv.conf.tail kullanmalısınız
# echo "lookup file bind" > /etc/resolv.conf.tail
Şimdi resolv.conf(5) dosyanızın en sonunda "lookup file bind" satırı bulunuyor.
nameserver 192.168.1.1 nameserver 192.168.1.2 lookup file bind
DHCP Server
OpenBSD yi DHCP server ,dhcpd(8), olarak kullanmak isterseniz dhcpd_flags="" satırını içerecek şekilde /etc/rc.conf.local dosyasını düzenleyiniz. dhcpd tarafından dinlemek istenen arayüzleri /etc/dhcpd.interfaces dosyasına ekleyin
# echo xl1 xl2 xl3 >/etc/dhcpd.interfaces
Sonra /etc/dhcpd.conf dosyasını düzenleyelim.
option domain-name "example.com";
option domain-name-servers 192.168.1.3, 192.168.1.5;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
range 192.168.1.32 192.168.1.127;
}
bu example.com DNS isteğini domain olarak eklediğini DHCP istemcilere söyler. Eğer kullanıcı “telnet joe” yazarsa bunun joe.example.com'a gönderecektir.
DNS serverleri 192.168.1.3 ve 192.168.1.5 olarak işaret edecektir. Aynı ağ üzerinde OpenBSD makinelerinin ethernet arayüzlerin 192.168.1.0/24 aralığında ve IP adreslerini 192.168.1.32 ile 192.168.1.127 arasında bi adrese atayacaktır. Ve varsayılan ağ geçidini 192.168.1.1 olarak atayacaktır.
Eğer dhcpd(8) servisini komut satırından başlatmak isterseniz /etc/dhcpd.conf dosyasını düzenledikten sonra aşağıdaki komutları sırayla deneyin.
# touch /var/db/dhcpd.leases # dhcpd fxp0
buradaki komutları açıklamak gerekirse dhcpd(8) servisi başlamadan önce touch ile boş bir dhcpd.leases dosyası oluşturulmaktadır. OpenBSD başlangıç betikleri gerekirse bilgisayarın açılışı sırasında oluşturacaktır. Eğer dhcpd(8) servisini elle başlatıyorsanız ilk önce bu dosyayı oluşturmalısınız. fxp0 DHCP servisini çalıştırdığınız arayüz.
Eğer DHCP servisini windows makinelere servis olarak sunacaksanız WINS sunucu adresini istemcilere belirtmeniz gerekebilir. Bunun gerçekleşmesi için aşağıdaki satırları /etc/dhcpd.conf: dosyasına ekleyin:
option netbios-name-servers 192.168.92.55;
192.168.92.55 Windows Ya da samba sunucusunun ip adresidir. Dhcp istemciler için istediğiniz diğer seçenekler için dhcp-options(5) e göz atın.
PPP(Point To Point Protocol)
PPP Nedir?
Point to Point Protocol (PPP) ISP' niz ile çevirmeli modemler arasında bağlantı oluşturmak için kullanılan bir protokoldür. OpenBSD 2 yöntemle bunu yapabilir:
- pppd(8) – çekirdek PPP daemon' ı ile yada
- ppp(8) – kullanıcı PPP daemon ile
ppp ve pppd her ikisinde aynı fonksiyonları gerçekleştirir. Farkları ise pppd çekirdek ppp(4) sürücüsü ile çalışır. ppp ise kullanıcı tarafındaki tun(4) aygıtı ile çalışır. Bu belgede sadece kullanıcı ppp daemonu ile ilgileneceğiz. Böylece daha kolay bi şekilde etkileşime girebiliriz. Başlamadan evvel ISP nizle alakalı bazı bilgiler edinmeniz gerekebilir. Bu liste ihtiyacınız olan bilgileri içerir:
- ISP 'nizin dial-up numarası
- Sizin nameserver'nız
- Kullanıcı adınız ve şirfreniz
- Gateway iniz
bunların bazıları olmaksızın yine yaparsınız fakat daha sağlıklı bir kurulum hepsine ihtiyaç duyacaksınız. Kullanıcı tarafinda PPP daemon u /etc/ppp/ppp.cof dosyasını ayar dosyası olarak kullanır. /etc/ppp altında Birçok farklı durum için farklı kurulumlarla alakalı birçok yardımcı dosya bulunmaktadır. Bu klasörü inceleyerek size en uygun kurulumu yapabilirsiniz.
PPP(8) için başlangıç kurulumu
Kullanıcı tarafinda ki PPP daemonunun başlangıç kurulumu /etc/ppp/ppp.conf dosyasını düzenlemekten ibarettir. Bu varsayılan olarak yoktur fakat /etc/ppp/ppp.conf.sample adındaki dosyayı basitçe düzenleyerek kendi ppp.conf dosyanızı oluşturabilirsiniz. Burada ben basitçe ve muhtemelen kullanılabilecek kurulum başlayacağım. Hızlıca ppp.conf dosyasına bakarsak bazı varsayılan değerler göreceğiz.
default: set log Phase Chat LCP IPCP CCP tun command set device /dev/cua01 set speed 115200 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
default bölümünün altında :etiket her defasında işletilir. Burada bütün kritik bilgilerimizi ayarladık. "set log" ile günlükleme seviyesini ayarlıyoruz. Bu değistirilebilir bir değerdir: ppp(8) basvurarak günlükleme seviyeleri ayarlaması hakkında daha fazla bilgi alabilrsiniz. Aygıtlarımızı "set device" ile ayarlayabiliriz. Burda modemi aktif hale getirdik. Bu örnekte modem com port 2 üzerindedir. bundan dolayı com port 1 /deb/cua00 olacaktır. "set speed" ile dial-up bağlantısının hızını ve "set dial" ile dial-up parametrelerini ayarlayabiliyoruz. Bununla zaman aşımı vb. değerilerini değiştirebiliriz.
Şimdi ise ISP ile alakalı özel bilgilere gidip onları ayarlayalım. Bunu yapmak için default etiketi altına diğer bir etiket ekleyeceğiz. bu etikete istediğiniz bir isim verebilirsiniz. Bunun için ISP' nizin ismini kullanmanız daha kolay olacaktır. Burada ben myisp olarak kullanacağım. Etiketimiz ISP mize atfen kullanılacaktır. Burada kendimiz bağlanmak için gerekenleri birleştiren basit kurulum vardır.
myisp: set phone 1234567 set login "ABORT NO\\sCARRIER TIMEOUT 5 ogin:--ogin: ppp word: ppp" set timeout 120 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0 add default HISADDR enable dns
Burada ISP' e has zaruri bilgiler ayarladık. ilk seçenek "set phone" ISP dial-up numarasını ayarlar. "set login" oturum açma seçeneklerini ayarar. Zaman aşımı 5 olarak ayarladık. Bunun anlamı eğer hiç bir tasıyıcı yoksa oturum açma teşebbüsünü 5 saniye sonra sonlandır. Başka türlü "login" kullanıcı adınızı ve şifrenizi gönderecektir
Bu örnekte kullanıcı adımız=ppp ve şifre = ppp dir.Bu değerleri değiştirmemiz gerekir. "set timeout" satırı altında boştaki zaman aşımı süresini bağlantının geneli için 120 saniye olarak ayarlar."set ifaddr" ise becerikli bir satırdır burada daha genişletilmiş açıklama bulunmaktadır.
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
Yukarıdaki satırda "set ifaddr [myaddr[/nn] [hisaddr[/nn] [netmask [triggeraddr]]]]" formatında ayarlamıs olduk.
Böylece ilk IP miz ne olmasını istiyorsak o şekilde belirlenmiş olduk. Eğer static bir ip ye sahipseniz bu burada örnekte gösterildiği gibi ayarlayın. Örneğimizde /0 yı IP adresinin hicbir bitinin eşleşmemesi gerektiği için kullandık ve bütün nesneler değiştirilebilir.ikinci IP onların sandığımız IP si olarak belirlenmiştir. Eğer biliyorusanız butunu belirtin. Eğer ne atandığını bilmiyorsak onlara bunu sorabilirsiniz. Üçüncü seçenek ağ maskesi ve biz bunu 255.255.255.0 olarak atadık. Eğer triggeraddr belirtilmişse onu IPCP görüşmesi başlangıcında myaddr sin yerine kullanılır. Buna rağmen sadece myaddr sınırları içersindeki adresler kabul edilecektir. Eş istekleri "0.0.0.0" olmadıkça IP numaraları atanmayacak olan görüşme sırasındaki bazı PPP uygulamaları ile beraber kullanışlıdır.
Sıradaki seçenek "add default HISADDR" varsayılan ağgecidini onların Ip si olarak ayarlamak için kullanılır. bu yapışkan bir özelliktir yani onların IP leri değiştiğinde bizim yönlendirmemiz otomatik olarak güncellenecektir. "enable dns " ile alan adi sunucumuzun adresini ISP mize yetkilendirmesini icin söylüyoruz. Eğer yerel alan adı sunucusu kullanıyorsanız bunu yapmayın bazı alan adı sunucu satırlarını /etc/resolv.conf girerek ppp basitce tuzağa düşürecektir.
Klasik oturum açma metodlarına karşın birçok ISP şimdilerde CHAP veya PAP tan birisini kimlik denetimi için kullanmaktadır. Bu durumda ayarlarımız biraz değişecektir.
myisp: set phone 1234567 set authname ppp set authkey ppp set login set timeout 120 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0 add default HISADDR enable dns
Yukarıdaki örnekte kullanıcı adını ve şifresini (ppp) söylenen sıra ile authname ve authkey kullanarak belirttik. CHAP yada PAP kimlik denetiminin hangisinin kullanıldığını belirtmemize gerek yoktur. Otomatik olarak devredilecektir. Sadece "set login" ile daha önce belirtilen kullanıcı adı ve şifresi ile oturum açmak için teşebbüste bulunacaktı
Using PPP(8)
Şimdi ppp.conf dosyamız kurulup ISP ile bağlantıya geçmeği denemeye başlamayabiliriz. ppp ile genel olarak kullanılan bazı seçenekleri açıklayacağım:
- ppp -auto myisp - Bu ppp'i çalıştırır, ağ kartını ayarlayarak ISP ile bağlantıya geçer ve arkaplanda çalışır.
- ppp -ddial myisp - Bu da -auto seçeneği gibidir. fakat bağlantınız kesilirse yeniden bağlanmayı dener
Eğer yukarıdakiler çalışmaz ise /usr/sbin/ppp herhangi bi seçenek girmeden çalıştırın böylece ppp etkileşimli modda çalışacaktır. Seçenekler hataları kontrol için ve diğer problemler için teker teker belirlenir. yukarıda belirtilen kurulumu kullanarak ppp /var/log/ppp.log dosyasına günlüyü yazacaktır. günlük sayfası aynı manuel sayfası gibi bütün yararlı bilgileri barındıracaktır.
ppp(8) extras
Bazı durumlarda komut kullanarak bağlantınızı kesmek yada oluşturmak isterseniz. Bu gibi durumlarda iki dosya oluşturabilirsiniz: /etc/ppp/ppp.linkup ve /etc/ppp/ppp.linkdown. Örnek ayarlar buradan görülebilir:
ppp(8) variations
Bugünlerde birçok ISP xDSL servis sunmaktaddır ki bu servisler geleneksel çevirmeli bağlantı metodunda cok daha hızlıdır. örnek olarak ADSL ve SDSL gibi farklı servisleri içerir. Fiziksel bir aramanın meydana gelmemesine karşın bağlantı Point on the point protokol'ü tabanlıdır. Örnekleri
- PPPoE
- PPPoA
- PPTP
PPPoE/PPPoA
Point to Point Protocol over Ethernet (PPPoE) ppp paketlerini ethernet frameleri içersinden gönderilmesini sağlayan metoda verilen isimdir. Aynı şekilde Point to Point Protocol over ATM (PPPoA) ATM ağları üzerinde çalışmaktadır, genellikle bu ağlar Birleşik kırallık ve Belçika' da bulunur Tipik olarak bunun anlamı ISP ile standart ethernet kartı ve ethernet tabanlı DSL modem ile bağlantı gerçekleştirebilrsiniz.
Eğer PPPoE/PPPoA ile konuşabilen bir modeminiz varsa bağlantı için modeminiz ayarlayabilirsiniz. Alternatif olarak modem "köprü" modunda ise ve aktifleştirerek ve modem içersinde paketlerin geçmesine izin vererek PPPoE yazılımını çalıştırabilirsiniz. Ana yazılım pppoe(8) OpenBSD üzerinde PPPoE/PPPoA arayüzü oluşturur ki bu kullanıcı taraflı uyguladır. Yukarıda belirtilen ppp(8) ile aynı yolla yapılır. Çekirdek PPPoE uygulaması pppoe(4) OpenBSD içersine gömülmüştür
PPTP
The Point to Point Tunneling Protocol (PPTP) (Noktadan noktaya tünelleme protokolü) özel bir Microsoft protokoldür. Pptp istemcisi pppd(8) arayüzü ile erişilebilir ve biraz kablo ve xDSL sağlayıcılarıyla PPTP tabanlı Sanal özel ağlara (Virtual Private Networks (VPN)) bağlanabilir. PPTP paketlerden ya da portlardan kurulmalıdır. Kurulum ve kullanım için daha fazla bilgiyi pptp paketiyle beraber kurulan man sayfalarından öğrenebilirsiniz
Network parametrelerini ayarlamak.
TCP oturumları için yeniden deneme sayısını yüksek tutmak ve daha uzun zaman aşımı için çekirdekte nasıl ince ayar yaparım
Bunu yönlendirmeye izin verirken veya bağlantı problemleri olduğunda kullanabilirsiniz. Tabi ki yaptığınız ayarların daha çok etkin olması icin bağlantının her iki tarafında da aynı değerleri kullanmanız gerekir.
İnce ayar yapmak icin sysctl yi kullanın ve değerleri yükseltin.
net.inet.tcp.keepinittime net.inet.tcp.keepidle net.inet.tcp.keepintvl
sysctl -a kullanarak, parametrelerin şimdiki değerini görebilirsiniz. Birisini değiştirmek için bunu gibi bişey yapın:
#sysctl net.inet.tcp.keepidle=28800.
Yöneltilmiş boradcast'i nasıl açarım
Normalde bunu yapmak istemezsiniz. Eğer OpenBSD yi yönlendirici olarak kullanıyorsanız Bu birisinin baglandıgınız ağ(lar)ın boradcast adresine trafik göndermesine izin verir.
Kapalı ağlarda birkaç örneği vardır. NETBIOS protokolunun eski bir uygulamasını kullandıgınız zaman kullanışlı olablir. Burada yine sysctl kullacagız.
#sysctl net.inet.ip.directed-broadcast=1 .
Bunun varsayılan olarak neden kapalı oldugunu öğrenmek istiyorsanız smurf attacks okuyabilirsiniz.
Çekirdeğin dinamik olarak port atamasını istemiyorum
Bunun için de sysctl yi kullanabilirsiniz. sysctl(8) de:
Çekirdek tarafından dinamik olarak atanmayan ayrılmış TCP portlarının listesi ayarlama için kullanılır. Bu daemonları başka programların ihtiyaç duydugu fonksiyonlar tarafından belirlenmiş portları çalmaktan saklamak için kullanılır. Liste elemanları virgül ve/veya boslukla ayrılmıs olabilir.
# sysctl net.inet.tcp.baddynamic=749,750,751,760,761,871
Tabiki listedeki portlara yenisini ekleyip oncekileri cıkartmanızda mümkündür
# sysctl net.inet.tcp.baddynamic=+748 # sysctl net.inet.tcp.baddynamic=-871
OpenBSD’de ağ köprüsü kurulumu
Bir veya daha fazla ağı birleştiren bağlantı noktasına köprü denir. Yönlendiricinin (router) aksine, üzerinden iletilen paketler açısından köprü “görünmez”dir; yani mantıksal olarak, köprünün her iki tarafındaki ayrı ağ bölümlerinde (segment) bulunan noktalar için, bu ağ tek bir bölümden oluşuyormuş gibi görünür. Bir köprü, sadece bir ağ bölümünden bir diğerine geçmesi gereken paketleri gerekli bölüme iletir; bu şekilde hem ağdaki trafiği azaltma işini kolaylaştıran bir yöntem sağlar hem de gerekli durumlarda bir noktanın bir diğerine ulaşmasına izin verir.
Bu “görünmez” doğasından ötürü, köprünün üzerindeki bir ağ arayüzü IP adresine sahip olabilir ya da olmayabilir. Eğer bir adrese sahipse, arayüzün hazır olduğu iki çalışma modu var demektir; bir tanesi köprünün bir parçası olarak çalıştığı köprü modu, diğeri normal ağ arayüzü modu. Eğer hiçbir arayüzünde IP adresi yoksa köprü ağ verisini iletecek, ancak dışarıdan bakım vs. amaçlı olarak yönetilmesi mümkün olmayacaktır ( ki bu iyi bir özellik olabilir ).
Örnek bir köprü uygulaması
Bilgisayar raflarımdan birinde, yerleşik (built-in) 10BASE-TX ağ arayüz kartına sahip olmayan birkaç tane eski sistem var. Hepsinde AUI veya AAUI tipinde bağlayıcı (connector) bulunduğu için taşıma ortamım koaksiyel kablo. Bu rafta bulunan sistemlerden bir tanesi yüksek hızlı ağa bağlı ve kesintisiz çalışan OpenBSD tabanlı bir terminal sunucusudur. Bu sisteme koaksiyel portu bulunan bir ağ arayüz kartı eklemek, sistemi koaksiyel tabanlı ağıma ulaşmamı sağlayacak bir köprü olarak kullanmama izin verir.
Şimdi bu sistem üzerinde iki tane ağ kartı var: bir tane Intel EtherExpress/100 (fxp0) ve koaksiyel port için de bir 3c590-Combo kartı (ep0). fxp0 ağımın geri kalan kısmına ulaşacağım bağlantı noktasıdır ve bir IP adresine sahip olması gerekir; ep0 ise sadece köprülemede (bridging) kullanılacağı için IP adresi olmayacak. Köprüleme ile koaksiyel tabanlı ağ bölümünde bulunan sistemlerim sanki diğer taraftalarmış gibi iletişim kurabilecekler. Peki bunu nasıl yapacağız?
fxp0 kartının konfigürasyonu hostname.fxp0 dosyasında bulunur. Bu arayüzde DHCP ayarlaması yapıldığı için dosya aşağıdaki gibidir:
$ cat /etc/hostname.fxp0 dhcp NONE NONE NONE NONE
Buraya kadar şaşılacak bir şey yok.
Tahmin edeceğiniz üzere, ep0 kartı için durum biraz farklı:
$ cat /etc/hostname.ep0 up media 10base2
Burada sisteme, arayüzü ifconfig(8) yardımıyla aktif etmesini ve 10BASE-2 (yani koaks) olarak kurmasını söylüyoruz. Bu arayüz için herhangi bir IP adresi falan belirlemeye gerek yok. ep kartına ait geçerli seçenekler hakkında detaylı bilgiyi kartın man sayfasından öğrenebilirsiniz. Şimdi köprüyü kurmamız gerekiyor. Köprüler, bridgename.bridge0 ‘a benzer isimli bir dosya yardımıyla ilklendirilirler (initialize). Buradaki duruma uyan bir örnek aşağıdadır:
$ cat /etc/bridgename.bridge0 add fxp0 add ep0 up
Bu şekilde sisteme, iki arayüzden – fxp0 ve ep0 – oluşan bir köprü kurmasını ve aktif hale getirmesini söylüyoruz. Kartların yazılış sırası önemli mi? Hayır, unutmayın ki köprü gayet simetrik bir yapıdır – paketler her iki yönde de içeri ve dışarı akabilir.
İşte bu kadar! Sistemi yeniden başlattıktan sonra çalışan bir köprüye sahip olacaksınız
Köprü üzerinde paket süzme
Bunun gibi basit bir köprü kurmanın yanında, muthemelen üzerindeki trafiği de kontrol edebilmek istersiniz. Tahmin ettiğiniz üzere, Paket Filtresi (PF) köprü üzeriden geçen trafiği sınırlamak için kullanılabilir.
Unutmayın ki, köprünün doğası gereği her iki ağ arayüzünden de aynı trafik geçer; öyleyse sadece bir arayüz üzerinde süzme yapmak yeterlidir. Varsayılan “hepsine izin ver” pf kurallarınız aşağıdaki gibidir:
pass in on ep0 all pass out on ep0 all pass in on fxp0 all pass out on fxp0 all
Şimdi diyelim ki, eski makinelerime giden trafiği sınırlamak ve sadece Web ve SSH trafiğinin onlara erişimine izin vermek istiyorum. Böyle bir durumda, ilk olarak ep0 arayüzünden içeri ve dışarı gidecek tüm trafiğe izin veriyoruz; ama fxp0 arayüzünde süzme işlemi yapıyoruz. Yanıt verisini algılaması için de “durum bilgisini sakla” (“keep state”) özelliğini kullanıyoruz.
# Pass all traffic through ep0
pass in quick on ep0 all
pass out quick on ep0 all
# Block fxp0 traffic
block in on fxp0 all
block out on fxp0 all
pass in quick on fxp0 proto tcp from any to any port {22, 80} \
flags S/SA keep state
Oluşturduğumuz bu kurallar kümesi, gelen HTTP ve SSH istekleri haricindeki her türlü trafiğin hem köprünün kurulu olduğu sisteme hem de köprünün “arkasında” bulunan sistemlere ulaşmasını engeller. Diğer arayüzde süzme yapılarak istenilen başka sonuçlar elde edilebilirdi.
Yarattığınız köprüyü kontrol etmek ve durumunu izlemek için brconfig(8) komutunu kullanabilirsiniz. Ayrıca bu komutu sistemi tekrar başlatmadan köprü kurmak için de kullanabilirsiniz.
Köprüleme ipuçları
- Sadece bir arayüzde trafik süzme işlemini gerçekleştirmeniz KESİNLİKLE tavsiye edilir. Her iki arayüzde aynı anda süzme yapmak mümkün olsa da, ne yaptığınızı gerçekten biliyor olmanız gerekir.
- blocknoip seçeneğini brconfig(8) komutuna parametre olarak veya bridgename.bridge0 dosyasında kullanarak IP protokolü haricindeki (örneğin IPX veya NETBEUI) trafiğin filtrenizden kaçmasını engelleyebilirsiniz.
- Köprüleme yapılan ağ arayüz kartları “promiscuous mod” da çalışırlar – yani yalnız kendilerine gelen trafiği değil BÜTÜN ağ trafiğini dinlerler. Bu durum hem işlemcide hem de ortak yolda (bus) yük yaratır. Bazı ağ arayüz kartları bu modda düzgün şekilde çalışamazlar; TI ThunderLAN çipi (tl(4)) köprünün parçası olarak çalışamayacak çiplere bir örnektir.
PXE ile nasıl açılış yapabilirim? (i386 ve amd64 için)
PXE ile açılış nasıl çalışır?
Herşeyden önce OpenBSD açılış sürecini anlamak akıllıca olur. Başlatma sürecinde ilk olarak, PXE yeteğine sahip ağ kartı bulunduğu ağa DHCP isteği yayınlar. DHCP sunucusu bağdaştırıcıya (adapter) bir IP atar ve ona bir tftp(1) sunucusundan indirilip çalıştırılacak bir dosyanın ismini verir. Geri kalan bütün başlatma süreci bu dosya üstünde döner. OpenBSD’de standard boot(8) dosyasının yerini alacak olan bu dosya pxeboottur. pxeboot(8) aynı tftp(1) sunucusundan bir çekirdek (bsd veya bsd.rd gibi) yükleyip çalıştırır.
Nasıl yaparım?
Herşeyden önce PXE açılışı yapabilen bir bilgisayar veya ağ bağdaştırıcısına ihtiyacınız var. Bazı dökümanlarda tüm modern ağ kartlarının ve bilgisayarların PXE desteğine sahip olduğu söylense de, bu tam olarak doğru sayılmaz – çünkü bir çok ucuz sistem PXE ROM’u içermez veya eski ağ açılış protokollerinden (network boot protocol) birini kullanır. Ayrıca doğru şekilde ayarlanmış bir DHCP ve bir de TFTP sunucusuna ihtiyacınız olacak.
Açılış dosyalarını sağlayan makinenin bir OpenBSD olduğunu varsayalım (ki böyle bir zorunluluk yoktur); DHCP sunucunuzun konfigürasyon dosyası dhcp.conf ‘ta aşağıdaki satır bulunmalıdır:
filename “pxeboot”;
Böylece DHCP sunucumuz açılış yapacak iş istasyonuna bu dosyanın bilgisini vermiş olur. Örneğin:
shared-network LOCAL-NET {
option domain-name "example.com";
option domain-name-servers 192.168.1.3, 192.168.1.5;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
filename "pxeboot";
range 192.168.1.32 192.168.1.127;
default-lease-time 86400;
max-lease-time 90000;
}
}
Bir sonraki adımda tftp(8) servisini çalıştırmanız gerekli. Bunu inetd(8) yoluyla yapabilirsiniz. Standard OpenBSD yüklemesi ile gelen inetd.conf dosyasındaki aşağıdaki satır işinizi görecektir:
#tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot
Yapmanız gereken satırın başındaki ‘#’ karakterini silmek ve inetd(8) ye /etc/inetd.conf dosyasındaki yeni konfigürasyonu yüklemesi için –HUP sinyali göndermek. tfptd(8) belli bir dizin altındaki dosyaları sunar; bu örnekte kullanacağımız dizin yukarıdaki satırdan görüleceği üzere /tftpboot dizinidir. Elbette bu dizinin yaratılmış olması gerekir. İçerisinde PXE açılışında kullanılacak dosyalar bulunacaktır:
- pxeboot, sabit diskteki boot bölümü ile aynı işi görecek PXE önyükleyicisi (boot loader)
- bsd.rd, yükleme çekirdeği veya isteğe göre derlenmiş bir bsd çekirdeği
- /etc/boot.conf, açılış konfigürasyon dosyası
Açılışta kullanacağınız çekirdeğin adı bsd değilse veya varsayılan pxe açılış konfigürasyonu ihtiyacınıza uymuyorsa (örneğin seri konsol kullanmak istiyorsunuz) /etc/boot.conf dosyasını ihtiyacınıza göre düzenlemek işinizi görür. Bir tftp(1) istemci kullanarak tftpd(8) sunucunuzdan gerekli dosyaları indirebildiğinizden emin olun.
DHCP ve TFTP sunucularınız çalışıyorsa artık başlamaya hazırsınız. Sisteminizdeki veya ağ kartınızdaki PXE açılış özelliğini aktif edin, bunun için sisteminize ait dökümantasyondan yararlanabilirsiniz. PXE açılışını aktif ettiğinizde aşağıdakine benzer birşeyler görmeniz gerekiyor:
Intel UNDI, PXE-2.0 (build 067)
Copyright (C) 1997,1998 Intel Corporation
For Realtek RTL 8139(X) PCI Fast Ethernet Controller v1.00 (990420)
DHCP MAC ADDR: 00 E0 C5 C8 CF E1
CLIENT IP: 192.168.1.76 MASK: 255.255.255.0 DHCP IP: 192.168.1.252
GATEWAY IP: 192.168.1.1
probing: pc0 com0 com1 apm pxe![2.1] mem[540k 28m a20=on]
disk: hd0*
net: mac 00:e0:c5:c8:cf:e1, ip 192.168.1.76, server 192.168.1.252
>> OpenBSD/i386 PXEBOOT 1.00
boot>
Bu noktada karşınızda standard OpenBSD açılış satırını (boot prompt) görüyorsunuz. Açılış satırında “bsd.rd” yazdığınızda, TFTP sunucunuzdan “bsd.rd” dosyası indirilir.
>> OpenBSD/i386 PXEBOOT 1.00
boot> bsd.rd
booting tftp:bsd.rd: 4375152+733120 [58+122112+105468]=0x516d04
entry point at 0x100120
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
Copyright (c) 1995-2005 OpenBSD. All rights reserved. http://www.OpenBSD.org
OpenBSD 3.8 (RAMDISK_CD) #794: Sat Sep 10 15:58:32 MDT 2005
...
Artık bsd.rd yükleme çekirdeği belleğe yüklenip başlatılıyor.
PXE kullanarak bsd.rd ‘den başka çekirdekleri yükleyip çalıştırabilir miyim?
Evet, OpenBSD araçları şu an için buna izin vermese de, PXE’nin geliştirilme amacı işletim sisteminin yüklenmesidir.
Ortak Adres Artıklık Protokolü (Common Address Redundancy Protocol - CARP)
CARP birçok bilgisayarı bir tek sanal ağ arayüzünde birleştirmek yoluyla sistem artıklığı elde etmeye yardımcı olan bir araçtır; böylece makinelerden biri bozulursa çalışan bir diğeri onun yerine isteklere cevap verebilir ve/veya belli bir dereceye kadar yük dengelemeye izin verebilir.
CARP, standard Sanal Yönlendirici Artıklık Protokolü (Virtual Router Redundacy Protocol - VRRP) ‘nün geliştirilmesi sonucu ortaya çıkmıştır. Geliştirilme sebebi ise Cisco patenti altındaki VRRP protokolünün yeterince özgür olmadığının düşünülmeye başlanmasıdır. CARP’ın kökleri ve VRRP hakkındaki yasal konular ile ilgili daha fazla bilgi için, bu sayfaya bakınız.
Yasal uyuşmazlıkları ortadan kaldırmak için, Ryan McBride (Michael Shalayeff, Marco Pfatschbacher ve Markus Friedl’ın yardımlarıyla) CARP’ı temelde farklı olacak şekilde tasarladı. En önemli değişiklik kriptografinin tasarıma dahil edilmesidir; ancak bu bile çok sayıda değişiklikten yanlızca biridir.
Nasıl çalışıra gelince: CARP bir çoğa gönderim (multicast) protokolüdür. Bir çok bilgisayarı bir veya daha fazla sanal adreste biraraya getirir. Bunların arasında bir tanesi ana sistem (master) olup gruba gönderilen tüm paketlere cevap verirken diğerleri hot spare (bir sorun halinde ana sistemin yerini alacak yedek sistemler) olarak çalışır. Yerel fiziksel arayüzün IP’si ve MAC adresi ne olursa olsun, bir CARP adresine gönderilen paketler, CARP bilgisi ile geri dönerler.
Ana sistem belirli aralıklarla (bu süre ayarlanabilir) IP protokol no 112’de çalıştığını yayınlar. Eğer ana sistem çevrimdışı kalırsa, CARP grubundaki diğer sistemler bu yayını yapmaya başlarlar. En sık yayın yapabilen sistem yeni ana sistem olur. Eski ana sistem geri geldiğinde, bir öntanımlı özellik olarak yedek host konumunu alır. Ancak mümkün olan her durumda belirli bir hostun ana sistem olması isteniyorsa (düşünün ki bir host, hızlı bir Sun Fire V120 ve diğerleri göreli olarak daha yavaş SPARCstation IPC’leri), bu durumu sağlayacak konfigürasyon yapılabilir.
Bugün yüksek artıklık özelliği bulunan hata-toleranslı donanımlar CARP’a olan ihtiyacı azaltsa da, tamamen ortadan kaldırmıyor. Biri sisteminizin güç kablosuna kullanılamayacak hale getirecek şekilde zarar verirse veya sistem yöneticiniz yanlış pencerede “reboot” yazarsa bu durumları önleyecek bir donanımsal hata-tolerans sistemi bulunmuyor. Ayrıca CARP, hem yama yapma ve yeniden başlatma döngüsünün son kullanıcıya görünmesini engeller hem de yazılım veya donanım yükseltilmesi işleminde test yapma fırsatı verir—eğer çalışmazsa, sistem düzelene kadar yedeklerle idare edebilirsiniz.
Ancak CARP’ın yardım edemeyeceği durumlar da var. CARP’ın tasarımı gereği bir grubun üyeleri aynı fiziksel alt ağda bulunmak zorundadır. Ayrıca her arayüz statik CARP IP’sine ek olarak kendine ait bir gerçek ve statik IP’ye sahip olmalıdır. Benzer şekilde, sunucuya sürekli bağlantı gerektiren servisler (örneğin, SSH ve IRC gibi) kullanıcıya görünmez bir şekilde diğer sistemlere aktarılamazlar--ancak bu durumda bile CARP servis dışı kalma zamanını azaltır. CARP protokolünün kendisi uygulamalar arasındaki veriyi senkronize etmez. Bunu yapabilmek için pfsync(4) (artıklı filtreleme (redundant filtering) için ) gibi araçlar kullanmanız veya elle rsync aracını kullanarak sistemler arasındaki veriyi kopyalamanız veya sisteminizin ihtiyacına göre başka bir çözüm bulmanız gerekir.
Konfigürasyon
CARP kontrolleri iki yerde bulunur: sysctl(8) ve ifconfig(8). İlk olarak sysctl kontrollerine bakalım.
Birinci sysctl, net.inet.carp.allow hostun CARP paketlerini algılayıp algılamayacağını belirler. Bu kontrolün CARP’ı kullanabilmek için gerektiği açıktır; öntanımlı olarak aktif edilmiştir.
İkinci, net.inet.carp.arpbalance yük dengeleme için kullanılır. Bu özellik aktif edilmişse CARP gelen paketleri isteğin geldiği kaynak IP’lerine göre hashler. Bu hash’i de uygun host havuzundan isteği cevaplayacak sanal hostu seçmek için kullanılır. Öntanımlı olarak çalışamaz (disabled) seçilmiştir.
Üçüncü, net.inet.carp.log, CARP hatalarını kaydeder. Öntanımlı olarak çalışamaz seçilmiştir.
Dördüncü, net.inet.carp.preempt CARP hostları arasında doğal seçim yapılmasını sağlar. En sağlıklı (yani en sık yayın yapabilen) sistem ana sistem olarak seçilir. Öntanımlı olarak çalışamaz seçilmiştir; bunun anlamı ana olmayan bir sistemin –tekrar- ana sistem olmaya çalışmayacağıdır.
Tüm bu sysctl kontrolleri sysctl(3) te dökümante edilmiştir.
Geri kalan CARP konfigürasyonu için ifconfig(8) ‘i kullanacağız. CARP’a özel komutlar advbase ve advskew yayınlar arası sürenin ayarlanmasında iş görür. Saniye cinsinden formül şöyledir: advskew 256 ya bölünür ve advbase’e eklenir. advbase düşerse ağ trafiği azalmış olur ancak yedek hostun ana sistemin görevini devralma süresi artar; advskew ise hangi yedek hostun çok fazla bekleme yapılmadan ana sistemin yerini alacağını belirlemenizi sağlar (bunu gerektiren durumlar olabilir).
pass komutu parola oluşturur ve vhid komutu ise CARP grubunun sanal host kimlik numarasını belirler. Yük dengeleme amacıyla aynı IP adresini paylaşıyor olsalar bile, her CARP grubuna bir ayırt edici sayı atamanız gerekir. CARP’da 255 grup üst sınırı vardır.
Son olarak, carpdev sistemdeki hangi fiziksel arayüzün CARP grubuna dahil olduğunu belirler. Öntanımlı olarak CARP grubuna atanmış bir alt ağda tanımlı IP adresine sahip olan arayüz kullanılır.
Gelin bütün bu anlattıklarımızı basit bir konfigürasyonda biraraya getirelim. Diyelim ki 192.168.0.7 IP’li eski sisteminizin yerini almak üzere iki tane tıpatıp aynı şekilde konfigüre edilmiş Web sunucusuna, rachael(192.168.0.5) ve pris (192.168.0.6), sahipsiniz. Komutlar:
rachael# ifconfig carp0 create rachael# ifconfig carp0 vhid 1 pass tyrell carpdev fxp0 \ 192.168.0.7 255.255.255.0
vhid’si 1 , parolası tyrell, IP adresi 192.168.0.7 ve alt ağ maskesi 255.255.255.0 olan carp0 arayüzünü yaratır ve fxp0’yi üye arayüz olarak atar. Kurulumun yeniden başlatma sırasında tekrar ayağa kalkabilmesi için içeriği aşağıdaki gibi olan bir /etc/hostname.carp0 dosyası oluşturabilirsiniz:
inet 192.168.0.7 255.255.255.0 192.168.0.255 vhid 1 pass tyrell carpdev fxp0
vhid ve parola değeri ile beraber arayüzün yayın (broadcast) adresi 192.168.0.255’in de aynı satırda belirtilmiş olduğuna dikkat edelim. Yapılan hataların çoğunluğunun sebebi yayın adresinin ilgili yere yazılmamış olmasıdır.
pris makinesi için de aynı adımları gerçekleştirelim. CARP arayüzünü ilk ayağa kaldıran sistem ana sistem olacaktır (preempt özelliğinin aktif olmadığını varsayarsak durum böyle; ancak preempt aktif ise buradakinin tam tersi).
Peki bu sistemi sıfırdan oluşturmadığınızı varsayalım. Rachael sistemi zaten 192.168.0.7 adresindeydi. Bunu nasıl halledebiliriz? Şanslıyız ki CARP bu durumla ilgileniyor. Sadece CARP arayüzüne bahsi geçen IP adresini atayın ve ‘carpdev’ anahtar sözcüğüyle belirttiğimiz arayüzü (burada fxp0) IP atamadan öylece bırakın. Yine de her sisteme önceden bir IP atamak sonra yapılacak izleme işlemlerinizi ve erişiminizi kolaylaştıracaktır.
Olayı bir seviye daha ileri götürelim; mümkün olan her durumda rachael’in ana sistem olarak kalmasını istiyoruz. Bunu istemek için birçok sebebimiz olabilir: donanım değişiklikleri, basit bir önyargı “ana sistem değilse bir sorun var demektir” veya varsayılan ana sistemi ifconfig çıktısını tarayıp bulacak ve sonucu email olarak atacak bir script yazmak istemiyorsunuz.
rachael üzerinde yukarıda bahsi geçen sysctl’yi kullanıyoruz ve devamlılığı sağlamak için bunu /etc/sysctl.conf dosyasına yazıyoruz:
rachael# sysctl net.inet.carp.preempt=1
pris’te de ayarlama yapmalıyız:
pris# ifconfig carp0 advskew 100
Bu pris’in yapacağı yayının biraz gecikmesine ve dolayısıyla rachael’in ana makine olmasını sağlar.
Eğer CARP kurulu sistemlerde PF kullanıyorsanız, dahil olan tüm arayüzlerde “proto carp” paketlerinin akışına izin vermeniz gerektiğini hatırlatalım. Örneğin aşağıdaki gibi:
pass on fxp0 proto carp keep state
Yük Dengeleme
Birkaç ay ilerisini düşünelim; önceki örnekteki şirketimiz büyüdü ve bir tek Web sunucusu ile gelen istekleri neredeyse karşılayamaz duruma geldik. Ne yapabiliriz? CARP ile kurtuluş mümkün. Şimdi yük dengelemeyi denemenin zamanı. rachael üzerinde yeni bir CARP arayüzü ve grubu yaratın:
rachael# ifconfig carp1 create rachael# ifconfig carp1 vhid 2 advskew 100 pass bryant carpdev fxp0 192.168.0.7 255.255.255.0
pris üzerinde de aynı işi yapmamız gerekiyor; bir de “preempt” sysctl kontrolünü aktive etmeliyiz:
pris# ifconfig create carp1 pris# ifconfig carp1 vhid 2 pass bryant carpdev fxp0 192.168.0.7 255.255.255.0 pris# sysctl net.inet.carp.preempt=1
Son durumda aynı IP adresinde iki tane CARP grubumuz bulunuyor. Her grup farklı bir hosta eğilmiş durumda, şöyle ki orijinal grupta rachael ana sistem olarak kalmaya devam edecek, ancak yeni grupta pris görevi devralacak.
En son yapmamız gereken ise her iki makinede de önceden bahsini ettiğimiz yük dengeleme sysctl kontrolünü aktive etmek:
# sysctl net.inet.carp.arpbalance=1
Verdiğimiz örnek bir ikili küme (cluster) için olsa da aynı prensipler daha çoklu kümeler için de aynen geçerlidir. Ancak iki makine arasında kusursuz 50/50 paylaşımını elde etmeniz beklenmemektedir – çünkü CARP cevabı verecek olan sistemi seçerken yük yerine kaynak IP’sinden elde ettiği hashi gözönüne alır.
CARP hakkında daha ayrıntılı bilgi
- carp(4)
- ifconfig(8)
- sysctl(8)
- sysctl(3)
- Firewall Failover with pfsync and CARP by Ryan McBride
OpenNTPD Kullanımı
Tam doğru zaman bilgisine sahip olmak bir çok bilgisayar uygulaması için çok önemlidir. Ancak pek çok insan 5 dolarlık kol saatinin 2000 dolarlık bilgisayardan daha iyi zaman tutabildiğini fark etmekte geç kalmamıştır. Zamanın bilgisine sahip olmanın yanısıra, tüm bilgisayarların zaman konusunda mutabık olabilmesi için senkronize olmaları da çok önemlidir. Bir vakit, ntp.org bilgisayar saatlerinin internet üzerinden senkronizasyonunu sağlamaya yarayan bir Ağ Zaman Protokolü (Network Time Protocol RFC1305, RFC2030) uygulaması ortaya attı; bu uygulamayı port ağacından kurabilirsiniz. Ancak kurması ve kaynak kodunu denetlemesi hiç de kolay değil, ayrıca büyük miktarda bellek gerektiriyor. Kısaca, kimileri için önemli bir boşluğu doldurmasına rağmen herkese hitab eden bir çözüm olmaktan çok uzak.
OpenNTPD , bilgisayarınızda doğru zamanı elde edebilmeniz için yönetimi kolay, güvenli, basit ve NTP uyumlu bir çözüm getirmeye çalışan ve yukarıda bahsi geçen sorunların bazılarının üstesinden gelmek amacını taşıyan bir girişimdir. OpenBSD ntpd(8) kolaylıkla anlaşılabilen /etc/ntpd.conf dosyası tarafından kontrol edilir.
ntpd(8) servisini rc.conf.local dosyası yoluyla aktif ettiğinizde bilgisayarınız herkesin kullanımına açık pool.ntp.org sunucuları ile senkronize olur. Saatiniz doğru zamanı gösteriyorsa ntpd servisi saatinizi yüksek hassasiyetli olarak doğru zamanda tutabilir; ancak saatiniz birkaç dakika yanlış gösteriyorsa ilk önce elle doğru zamana yakın bir değere ayarlamanız *kesinlikle* tavsiye edilir. Çünkü gayet yanlış gösteren bir saati senkronize etmek günler hatta haftalar alabilir. Bunu date(1) komutunu kullanarak elle veya rdate(8) komutunu kullanarak yarı otomatik şekilde veya bilgisayarınızın donanım saatini elle ayarlayarak yapabilirsiniz.
Ama OpenNTPD ntp.org servisi kadar doğru değil ki
Evet bu doğru olabilir. Çünkü OpenNTPD’nin tasarlanış amacı bu değildi; sadece özgür, basit ve güvenli olması amaçlanmıştı. Mikro saniye hassasiyetine gerçekten OpenNTPD’nin getirilerinden daha çok ihtiyacınız varsa port ağacından ve paketlerden kurulum yapıp ntp.org’un ntpd’sini kullanabilirsiniz. OpenNTPD’nin her hayal edilen özelliği desteklemesi yönünde bir plan yok hatta böyle bir istek de yok.
"Kimileri OpenNTPD’nin 'zararlı' olduğunu idda ediyor!"
Bazı insanlar OpenNTPD’nin tasarım amaçlarını anlamıyor -- bilgisayarınızın doğru zaman göstermesini sağlayacak basit, güvenilir ve kolay yönetilebilir bir yöntem. Eğer doğru zamanın tutulması önemli ise OpenNTPD’nin bu konuda ntp.org’un ntpd’sine göre daha iyi olduğu yönünde bazı kullanıcılardan geri bildirimler gelmiştir. Eğer güvenlik önemli ise, OpenNTPD kodu daha okunabilirdir (ve denetlenebilir) ve strcpy gibi taşınabilir fakat güvenli olmayan çağrılar yerine, strlcpy gibi doğal OpenBSD fonksiyon çağrıları kullanılarak baştan itibaren güvenli olacak şekilde yazılmıştır, “sonradan güvenli yapılmış” değildir. Eğer daha çok insanın zaman senkronizasyonu servisini kullanmasını sağlamak önemli ise, OpenNTPD kullanımı kolaylaştırarak zaten daha çok insanın bu servisi kullanmasına önayak olmaktadır. Eğer bu “zararlı” ise, hepimiz arkasındayız.
ntp.org’un ntpd’sinin daha uygun olacağı uygulamalar var; ancak kullanıcıların geriye kalan %95’lik kısmı için OpenNTPD’nin yeterli olduğu inancındayız.
Bir OpenNTPD geliştiricisinin bu iddaya verdiği yanıtın tam metnini buradan okuyabilirsiniz.
Kablosuz ağ seçeneklerim nelerdir?
OpenBSD, aşağıdaki kablosuz çipsetleri desteklemektedir:
- awi(4) AMD 802.11 PCnet Mobile
- an(4) Aironet Communications 4500/4800
- wi(4) Prism2/2.5/3
- atw(4) ADMtek ADM8211
- ath(4) driver for Atheros IEEE 802.11a/b/g.
- iwi(4) Intel PRO/Wireless 2200BG/2225BG/2915ABG IEEE 802.11a/b/g.
- ipw(4) Intel PRO/Wireless 2100 IEEE 802.11b.
- atu(4) Atmel AT76C50x USB IEEE 802.11b.
- ral(4) and ural(4) [USB] Ralink Technology RT25x0 IEEE 802.11a/b/g.
- rtw(4) Realtek 8180 IEEE 802.11b.
Bu çipleri kullanan bağdaştırıcılar bir OpenBSD sistemi diğer ağ bağdaştırıcılarında olduğu gibi varolan bir kablosuz ağa bağlamak için kullanılabilir (ayrıntılar için elkitabı sayfalarına bakınız). İçlerinden bazılarını “Host Temelli Erişim Noktası” (Host-Based Access Point) modunda çalıştırıp ateştenduvarınızın bir parçası olarak kendi ağınız için bir kablosuz erişim noktası oluşturabilirsiniz.
OpenBSD temelli ateştenduvarınızı kablosuz erişime açmanın bir diğer yolu da, geleneksel bir ağ arayüz kartı ile beraber harici ve köprüleme yapan bir kablosuz Erişim Noktası kullanmaktır. Böylece sinyali en iyi şekilde dağıtabilmek için anteninizi kolayca ayarlama imkanınız olur, ki çoğu zaman bu en iyi nokta ateştenduvarınızın yüklü olduğu makinenin arkası değildir.
Önemle belirtmemiz gerekir ki Intel temelli kartları kullanabilmek için ilgili firmware’ı indirmeniz gerekir; OpenBSD bu yazılımları içermiyor çünkü Intel bu yazılımların özgür dağıtımına izin vermiyor. Bu konudaki düşüncenizi veya onun yerine satın aldığınız diğer bir ürünü Intel’e bildirebilirsiniz.
Broadcom, Texas Instruments ve Connexant gibi diğer üreticiler de kendi ürünlerine ait özgür sürücüler geliştirmemize karşı savaşım içindeler. Sizden isteğimiz bu üreticilerin ürünlerini satın almayarak çabalarına saygı göstermenizdir. Realtek, Ralink, Atmel ve ADMtek firmaları iyi ürünler geliştiriyorlar ve açık kaynak dünyasının özgür sürücü geliştirme isteğini destekliyorlar; bu duruş da onlara bizim desteğimizi ve bizden ötürü doğan iş fırsatlarını kazandırıyor.