Temel Linux

13 May, 2010 (09:38) | Linux | By: alper

İş yerimde yapacak olduğumuz Temel linux yapısı ve Tanıtımı  konulu eğitim için hazırladığım dökümanı buradan indirebilirsiniz. Dökümantasyon çok kısa sürede hazırlanması gerektiği için internetten toparlanmıştır. küçük bir kısmı tarafımdan yazılmıştır.

Ozgur Yazilim Gunleri Linux Routing ve QOS sunumu

5 April, 2010 (13:28) | Diğer | By: alper

Özgür yazılım günlerinde İstanbul Bilgi Universitesi Dolapderekampusundeki 03/04/2010 tarihli “Linux routing ve QOS ” sunumuma buradan ulaşabilirsiniz.

Sunuma yardımcı olan FreeNode’taki arkadaşlara , Grafikler için Noyan Selçuk Hancıoğlu’na teşekkürler.

FreeBSD iostat benzeri Disk kullanimini görüntülemek.

21 March, 2010 (17:32) | ipucu | By: alper

Linux sistem yöneticilerin en çok kullandıkları utility lerden birisi “iotop” tur sanırım. FreeBSD bu utility i içermez , benzeri bir çıktıyı bu komutla alabilirsiniz ”  top -m io -o total ” .

Daha basitçe sadece disk kullanımını görmek istiyorsanız BSD ye has gstat komutu hoşunuza gidecektir.

Birden çok hardisk Linux Swap tunning

8 March, 2010 (16:56) | ipucu | By: alper

Özellikle kullandığımız sistem sıksık swap alan kullanmaya ihtiyaç duyuyorsa swap performansı oldukça önemli hale gelir. iki farklı  hardiskimiz olduğunu düşünelim ve ikisinde de birer swap alani oluşturduğumuzu,

[root@linux ~]# fdisk -l | grep swap

/dev/sda1   *           1        1275    10241406   82  Linux swap / Solaris

/dev/sdb5            3851        5125    10241406   82  Linux swap / Solaris

[root@linux ~]#
Yukarıda gördüğümüz gibi sda1 ve sdb5 olmak üzere iki adet diskimiz üzerinde iki farkli swap alanimiz var , /etc/fstab dosyasini açarak içerisinde bulunan swap la ilgili satırlarda “defaults” yazılı kısımları  ”defaults,pri=1″  şeklinde düzeltiyoruz.
[root@linux ~]# cat /etc/fstab | grep swap
LABEL=SWAP-sda1         swap                    swap    defaults,pri=1        0 0
LABEL=SWAP-sdb5         swap                    swap    defaults,pri=1        0 0
[root@linux ~]#
Normal şartlar altında linux 1 nolu swap tamamen dolduktan sonra 2 nolu swap i kullanmaya başlayacaktı. bu ayarlarımızı yaptıktan sonra gelen swap işleri 2 disk arasında dağıtılarak daha fazla performans elde etmenizi sağlayacaktır. elimizde çok fazla hardisk olduğu durumlarda yine aynı işlemi onlara da uygulayarak dağıtabilir. veya daha düşük performans lı hardiskleri “pri=2″ şeklinde belirterek swap grubu tamamen dolduktan sonra kullanılmaya başlaması için işaretleyebilirsiniz.
not : swap kullanılmadığı durumlarda normal olarak bu işlem hiçbir fayda sağlamaz.

Linux ssh login çok yavaş ?

16 February, 2010 (15:29) | ipucu | By: alper

Uzaktaki linux sunucularınıza bağlandığınızda login işlemi sizi oldukça çok bekletiyor ve durumdan rahatsız oluyorsanız aşağıdaki işlemleri kontrol edebilirsiniz.

1. DNS

bağlandığın istemcinin DNS adresinin çözümlenmesi uzun zaman alıyor olabilir. sshd_config dosyası içerisine “UseDNS no”
parametresi ekleyip sshd yeniden başlatarak sorununuzu çözebilirsiniz. Daha önceden var ve değer yes ise no ile değiştirmeniz yeterlidir.

2.  GSSAPI Authentication

yavaş bağlantısı olan server e ” ssh -o GSSAPIAuthentication=no user@10.0.0.1″ öreneğinde olduğu gibi bağlanmaya çalışın, sorunun çözümlendiğini gözlemlerseniz. bağlandığınız server’de “sshd_config” dosyası içerisinde  “GSSAPIAuthentication no” değerini “yes” olarak değiştirin. Birden fazla server’iniz var ve tek client den bağlanıyorsanız “ssh_config”  dosyasında aynı değeri “no” olarak değiştirin.

3. Bunların dışında hala bir ” networksel olmayan ! ” yavaşlık mevcut ise “ssh -v -o GSSAPIAuthentication=no user@10.0.0.1″ örneğindeki gibi ssh istemciyi debug modda bağlanarak test edin.

Linux konsol otomatik logout

16 February, 2010 (15:12) | ipucu | By: alper

Özellikle kolay ulaşılabilen serverler’de konsol admin tarafından login olarak unutulduğunda güvenlik açığı meydana getirebilir. En kolay alınabiliecek önlem belirli bir süre konsol pasif kaldığında ( Idle ) otomatik logof olmasını sağlamaktır. işlem oldukça basit.

export TMOUT=120 diyerek 120 Saniye iddle olan konsolun otomatik log of olmasını sağlayabilirisiniz. gerektiğinde sadece belirli userler için bunun geçerli olması için kişilerin profile dosyalarına sistem genelinde tüm kullanıcılara geçerli olması için ” /etc/profile” dosyasına yazabilirsiniz.

Linux TEQL

25 January, 2010 (15:30) | Loadbalancing, iproute2 | By: alper

Linux outgoing loadbalancing , yazımda anlattığım gibi bir yapı hemen hemen heryerde, ihtyaçlarınızı karşılayabilsede, kullanabileceğiniz tek yöntem bu değildir. Linux TEQL ( True link Equalizer ) kullanabileceğimiz diğer seçeneklerden birisidir. Özellikle LACP ( 802.3ad ) desteklemeyen bir  switch’iniz varsa hatta local network de iki linux server in birbirleri arası haberleşmelerinde ethernet performansını paylaştırabilemek için oldukça uygun bir yöntem olabilir. örnek network yapısı verecek olursak :

şimdi TEQL nasıl çalışır bir göz atalım.

Yandaki resimde görüldüğü üzere 2 adet ethernet interface’imizi TEQL kullanarak birleştirmek mümkündür. Eth1 ve Eth2 interface’lerini kapsayan teql0 adlı yeni bir interface oluşturulur ve yeni bir ip adresi tanımlanır. tanımlanan ip adresi local network den ulaşılabildiği gibi dışarıya erişim içinde kullanılabilir. Her bir bağlantı isteğini eth1 ve eth2 arasında sırasıyla dağıtarak toplam bant genişliğini kullanma imkanı sağlar. TEQL sadece linux kerneline özel bir uygulamadır. Diğer işletim sistemlerinde bulunmaz.TEQL iproute2 paketi ile birlikte gelir.

1. Teql module’ünü yükleyelim. Interface’imizin oluştuğunu doğrulayalım.

root@linux:~# modprobe sch_teql

root@linux:~# ifconfig teql0

teql0     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

NOARP  MTU:1500  Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@linux:~#

2. Eth1 ve Eth2 Interface’lerini teql’e dahil edelim.

root@linux:~#  tc qdisc add dev eth1 root teql0

root@linux:~#  tc qdisc add dev eth2 root teql0

root@linux:~#

3. Eth1 ve Eth2 Interface’lerinin teql interface’ine dahil olduğundan emin olalım.

root@linux:~# tc qdisc show
qdisc teql0 8001: dev eth1 root
qdisc teql0 8002: dev eth2 root
qdisc pfifo_fast 0: dev eth3 root bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
root@linux:~#
4. Teql0'e ip adresimizi atayalım.
root@linux:~# ifconfig teql0 192.168.1.1 netmask 255.255.255.0
root@linux:~#

5. IP Adreslerinin doğru olduğunu kontrol edelim.

root@linux:~# ifconfig -a
eth1      Link encap:Ethernet  HWaddr 08:00:27:1f:0a:b7
inet addr:192.169.1.2  Bcast:192.169.1.255  Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe1f:ab7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B)  TX bytes:468 (468.0 B)
eth2      Link encap:Ethernet  HWaddr 08:00:27:ad:66:d0
inet addr:192.169.1.3  Bcast:192.169.1.255  Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fead:66d0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B)  TX bytes:238 (238.0 B)
eth3      Link encap:Ethernet  HWaddr 08:00:27:d8:6a:d3
inet addr:10.1.30.86  Bcast:10.1.30.255  Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fed8:6ad3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:710 errors:0 dropped:0 overruns:0 frame:0
TX packets:267 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:84210 (84.2 KB)  TX bytes:34303 (34.3 KB)
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
teql0     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
root@linux:~#

6. Ağ geçidimiz Local network’de bir makina ise teql0 interface’i için ağ geçidini girelim . ( daha önceden girilmiş ağ geçidi varsa siliniz.

root@linux:~# ip route add default via  192.168.1.254 dev teql0
root@linux:~#

7. “ tc -s qdisc ” komutu ile yapmış olduğumuz işlemi kontrol edebilirsiniz.

Notlar :

  1. İki interface bir birine eşit olmadığı durumlarda gerçekten büyük performans sorunu yaşayabilirsiniz.
  2. Teql’e dahil ettiğiniz interface’lerden birisi fail olursa çok büyük performans sıkıntısı yaşandığı konusunda şikayetler var. Mümkün olduğunca local network içerisinde kullanın.
  3. Başıma gelmedi ama bağlı olduğunuz switchde STP’ile ilgili sorun yaşayabilirsiniz.
  4. eth1 ve eth2 gibi teql’e eklediğiniz interface’ler cevap vermezse aşağıdaki işlemi uygulayınız.
  5. Tek bir socket bağlantısı için TEQL ektra bir performans avantajı sağlayamaz.
root@linux:~# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
root@linux:~# echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter
root@linux:~#
Veya Sysctl ile
sysctl net.ipv4.conf.eth1.rp_filter=0
Açılışta aktif olması için “/etc/sysctl.conf”‘a ekleyiniz.

Ubuntu server konsol ayarlarını değiştirmek.

12 January, 2010 (21:52) | ipucu | By: alper

Kurmuş olduğunuz ubuntu server in konsol ayarlarını ( klavye, font vb ) değiştirmek için ;

root@linux:~# apt-get install console-data

Diyerek console-data yi kuruyoruz. ( root değilseniz sudo kullanmayı unutmayınız )
dpkg size kurulum esnasında soracaktır. daha sonra ayarlara yeniden ulaşmak için.

root@linux:~# dpkg-reconfigure console-data

Index

7 January, 2010 (10:15) | - Index | By: alper

Linux ile outgoing loadbalancing

31 December, 2009 (15:29) | Loadbalancing | By: alper

Linux ile Birden fazla internet çıkışını aynı anda kullanmak için outgoing loadbalancing temel olarak iproute2 ve iptables yardımı ile yapılır. Burada anlattığım yöntem ECMP ( Equel Cost multipath Routing )’ olarakta bilinir.

Şekildeki örnek 5 adet çeşitli modemlerle yapılandırılmış olsada bu bağlantı türleri herhangi bir bağlantı olabilir ( PPPOE , Kablonet , MetroEth , GHDSL vs vs ). Ağ geçitleri istenildiği kadar artırılıp azaltılabilir. Ben burada farklı interface ler üzerinden nasıl yapılacağını anlatıyorum fakat daha önce uyguladığım 2 farklı noktada hem giriş hem çıkış için tek interface’i olan ( sadece eth0 ) linux sorunsuz olarak  çalışıyor.

  • 1. ipforwarding düzgün olarak yapılandırılmalıdır.

sysctl net.ipv4.ip_forward=1

veya

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

Kalıcı olması için kullanmış olduğunuz linux sürümünde  gerekli ayarları yapmayı unutmayınız örneğin /etc/sysctl.conf içerisinde.

  • 2. rt_tables

Multiple Routing table için gerekli tabloları oluşturalım :

root@linux:~# echo “10 gw1″ >> /etc/iproute2/rt_tables

root@linux:~# echo “20 gw2″ >> /etc/iproute2/rt_tables

root@linux:~# echo “30 gw3″ >> /etc/iproute2/rt_tables

root@linux:~# echo “40 gw4″ >> /etc/iproute2/rt_tables

root@linux:~# echo “50 gw5″ >> /etc/iproute2/rt_tables

Yapmış olduğumuz işlemi kontrol ediyoruz.  ”cat /etc/iproute2/rt_tables”  girmiş olduğumuz bilgiler kalıcıdır her açılışta yeniden eklemenize gerek yoktur. Kaç ağ geçidimiz varsa okadar adet oluşturuyoruz.
  • 3. Konfigurasyon alias’larını oluşturalım
# local interface’imiz
lint=”eth0″
#  Linux’un internete ulaşmak için kullandığı 1. nolu ağ geçidinin ip adresi
gw1ip=”192.168.0.1″
# Linux’un bu ağ geçidine ulaşmak için kullandığı interface
gw1int=”eth1″
# Policie routing için şu an kullanmasakta lazım olabileceği için kullanacağımız
# fwmark değeri istediğiniz rakamı kullanmakta özgürsünüz.
gw1mark=”1″
#  Linux’un 1 nolu ağ geçidine ulaşmak için kullandığı kendine ait eth1 interface’ine ait ip adresi
gw1src=”192.168.0.2″

# Diğer ağ geçitleri için gerekli ayarları tek tek açıklamadan yazıyorum gw1 için

#yaptığımız örneğin hepsi için yeterli açıklamayı yapacağına inanıyorum.

gw2ip=”192.168.1.1″
gw2int=”eth2″
gw2mark=”2″
gw2src=”192.168.1.2″
# 3 Nolu ağ geçidi
gw3ip=”192.168.2.1″
gw3int=”eth3″
gw3mark=”3″
gw3src=”192.168.2.2″
# 4 Nolu ağ geçidi
gw4ip=”192.168.3.1″
gw4int=”eth4″
gw4mark=”4″
gw4src=”192.168.3.2″
# 5 Nolu ağ geçidi
gw5ip=”192.168.4.1″
gw5int=”eth5″
gw5mark=”5″
gw5src=”192.168.4.2″
  • 4. Routing tablolarına ağ geçitlerimizi girelim.
# iproute2 ağ geçidi x.x.x.x dir. ulaşmak için kullandığı interface YY dir. bu kural table ZZ içine yazılacaktır.
ip route add default via $gw1ip dev $gw1int table gw1
ip route add default via $gw2ip dev $gw2int table gw2
ip route add default via $gw3ip dev $gw3int table gw3
ip route add default via $gw4ip dev $gw4int table gw4
ip route add default via $gw5ip dev $gw5int table gw5

Note : 5 Adet ağ geçidini multiple routing table içerisine girdik ama hala sistemin kendine ait defaultgateway yani ağ geçidi yok, buradaki örnekte iproute2 ile roundrobbin yapacağımızdan gerekte olmayacak, roundrobbin devre dışı bıraktığınızda internete çıkamayacağınızı ve internetten de bu makinaya ulaşamayacağınızı unutmayın, olası ihtimal için devamlı ulaşabileceğiniz bir ağ geçidinizi default olarak tanımlamanızı öneririm. DHCP veya Elle yapılandırma yaptığınız interface lere ağ geçidi girmeyin. Virden fazla ağ geçidi ne yaptığınızı bilmiyorsanız size sorun yaratabilir.
örnek olarak 1 nolu internet çıkışımızı default tanımlıyoruz.
ip route add default via $gw1ip dev $gw1int

  • 5. FWMARK ile işaretlenmiş paketleri ilgili tablolara gönderelim.
# gw1 için marklanmış paketler tablo gw1 e gönder.
ip rule add from all fwmark $gw1mark table gw1
# diğer ağ geçitleri için kurallar.
ip rule add from all fwmark $gw2mark table gw2
ip rule add from all fwmark $gw3mark table gw3
ip rule add from all fwmark $gw4mark table gw4
ip rule add from all fwmark $gw5mark table gw5

Basit bir internet paylaşımı için bu basamaklara gerek yoktur. Policie routing için gerekli olacak.
  • 6.  Paketleri ait oldukları routing tablolarına gönderebilmek için gerekli rule’ları girelim.
Bu işlemi doğru olarak yaptğınızda internetten bu ip  adreslerine  ( aynı subnetmask deki ipler için değil )  ulaşabilmeniz gerekiyor.
# gw1 in ip adresine giden paketleri tablo gw1 e gönder.
ip rule add from $gw1src table gw1
# gw1′in ip adresinden gelen pkaetleri tablo gw1′e ata ( buna pek gerek yok ekleme sebebim tamamen piskolojik
# teknik bir sebep içermiyor )

ip rule add to $gw1src table gw1

# diğer ağ geçitleri için kurallar :
ip rule add from $gw2src table gw2
ip rule add to $gw2src table gw2
ip rule add from $gw3src table gw3
ip rule add to $gw3src table gw3
ip rule add from $gw4src table gw4
ip rule add to $gw4src table gw4
ip rule add from $gw5src table gw5
ip rule add to $gw5src table gw5

Kotrolü :

Tüm interface lerden sırasıyla ping atarak kontrol edebilirsiniz.
ping -I gw1int www.google.com.tr # veya aynı subnetmask de olmayan bir ip adresi

  • 7. Routing cache de daha önce kalan girdileri temizleyelim.
ip route flush cache

  • 8. RoundRobbin ile gelen paketleri ağ geçitlerine dağıtalım.


ip route add equalize default scope global \
nexthop via $gw1ip dev $gw1int weight 1 \
nexthop via $gw2ip dev $gw2int weight 1 \
nexthop via $gw3ip dev $gw3int weight 1 \
nexthop via $gw4ip dev $gw4int weight 1 \
nexthop via $gw5ip dev $gw5int weight 1

  • 9 .  NAT ( Masquerade )
İnternet bağlantılarımız için çıkışlarımız NATD istiyorsa isteyen interface ler için iptables a aşağıdaki kuralları girmeliyiz. istemediğniz interface’e girmeyiniz.
iptables -t nat -A POSTROUTING -o $gw1int -j MASQUERADE
iptables -t nat -A POSTROUTING -o $gw2int -j MASQUERADE
iptables -t nat -A POSTROUTING -o $gw3int -j MASQUERADE
iptables -t nat -A POSTROUTING -o $gw4int -j MASQUERADE
iptables -t nat -A POSTROUTING -o $gw5int -j MASQUERADE

  • 10. Policy Routing
a) iptables ile

iptables Matches kullanarak istediğimiz paketi istediğimiz ağ geçidinden gitmesi için işaretleyebiliriz.
örneğin local interfaceimiz ( eth0 ) a gelen https isteklerinin sadece 1 nolu ağ geçidinden gitmesini istiyoruz.

iptables -A PREROUTING -t mangle -i $lint  -p tcp –dport 443 -j MARK –set-mark $gw1mark

b) ip rule ile

Örneğin 1.1.1.1 ip adresinden gelen isteklerin 1 nolu ağ geçidi üzerinden sabit çıkmasını istiyoruz.
ip rule add from 1.1.1.1 to any table gw1

Bu kadar Roundrobbin ile çalışan Outgoing Linux loadbalancer router’imiz oldu :)