OpenStack Ansible Network Configuration, Bonding, Mtu, Vlan, Br-vlan, Br-vxlan With NETPLAN On Ubuntu 18

İlk önce aşağıdaki komutla apt reposunu güncelleyin.

> apt update

Ardından “bridge-utils” paketini sisteme kurun.

> apt install bridge-utils

Daha sonra “/etc/netplan/50-cloud-init.yaml” dosyasını aşağıdaki gibi yapılandırabilirsiniz. Tabi siz kullanacağınız şekilde yapılandırabilirsiniz. Ben aşağıdaki örnekte hem bonding, hem vlan, hem bridge vlan, hem bridge vxlan, hem de mtu size olarak jumbo frame kullandım. Ayrıca nfs ve iscsi yide ayrı vlan larla yapılandırdım. Siz ortamınızda gerekli olan yapılandırmaya göre şekillendirebilirsiniz.

#This file is generated from information provided by
#the datasource.  Changes to it will not persist across an instance.
#To disable cloud-init’s network configuration capabilities, write a file
#/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
#network: {config: disabled}
network:
    bonds:
        bond0:
            interfaces:
            – enp6s0f0
            – enp7s0f0
            mtu: 9000
            parameters:
                lacp-rate: fast
                mode: 802.3ad
                transmit-hash-policy: layer2
        bond1:
            interfaces:
            – enp6s0f1
            – enp7s0f1
            parameters:
                lacp-rate: fast
                mode: 802.3ad
                transmit-hash-policy: layer2
    ethernets:
        eno1: {}
        eno2: {}
        enp0s20f0u1u6: {}
        enp6s0f0:
            mtu: 9000
        enp6s0f1: {}
        enp7s0f0:
            mtu: 9000
        enp7s0f1: {}
    version: 2
    vlans:
        bond0.10:
            id: 10
            link: bond0
            mtu: 9000
        bond0.20:
            id: 20
            link: bond0
            mtu: 9000
        bond0.21:
            id: 21
            link: bond0
            mtu: 9000
        bond1.30:
            id: 30
            link: bond1
        bond0.32:
            id: 32
            link: bond0
            mtu: 9000
    bridges:
        br-ext:
            interfaces: [bond0.32]
            addresses:
                – 10.1.10.34/24
            gateway4: 10.1.10.1
            nameservers:
                addresses:
                    – 10.10.10.5
            parameters:
                stp: false
                forward-delay: 0
            mtu: 9000
        br-mgmt:
            interfaces: [bond0.10]
            addresses:
                – 172.29.236.180/22
            parameters:
                stp: false
                forward-delay: 0
            mtu: 9000
        br-iscsi:
            interfaces: [bond0.20]
            addresses:
                – 172.29.244.180/22
            parameters:
                stp: false
                forward-delay: 0
            mtu: 9000
        br-nfs:
            interfaces: [bond0.21]
            addresses:
                – 172.29.248.180/22
            parameters:
                stp: false
                forward-delay: 0
            mtu: 9000
        br-vxlan:
            interfaces: [bond1.30]
            addresses:
                – 172.29.240.180/24
            parameters:
                stp: false
                forward-delay: 0
        br-vlan:
            interfaces: [bond1]

Son olarak aşağıdaki komutu çalıştırın fakat mtu değerlerinin geçerli olması için “reboot” olmalıdır.

> netplan apply

oVirt Debian/Ubuntu Guest Agent Kurulumu ve Yapılandırması – Sorun Çözüldü

oVirt ortamına kurduğunuz Debian/Ubuntu makineler için aşağıdaki komutu çalıştırarak ovirt-guest-agent servisini kurabilirsiniz.

> sudo apt install ovirt-guest-agent -y

Fakat servis durumunu kontrol ettiğinizde aşağıdaki gibi hata aldığınızı göreceksiniz.

Aşağıdaki yönergeleri izleyerek hataları giderip, servisi sağlıklı bir şekilde çalıştırabilirsiniz.

İlk önce “ovirt-guest-agent.service” servis dosyasını edit edip, “User=root” olarak değiştirelim(servisin root haklarında çalışmasının, güvenlik tarafındaki oluşturabileceği sıkıntılara şimdilik değinmiyorum).

> sudo vi /lib/systemd/system/ovirt-guest-agent.service

User=root

Ardından aşağıdaki komutu çalıştırın.

> systemctl daemon-reload

Akabinde aşağıdaki komutla device’leri listeleyebilirsiniz. Çünkü “ovirt-guest.agent.0” aygıtını kullanacağız.

> ll /dev/virtio-ports/

Şimdi “ovirt-guest-agent.conf” dosyasını aşağıdaki gibi yapılandıralım.

> sudo vi /etc/ovirt-guest-agent.conf

[virtio]
# device = /dev/virtio-ports/com.redhat.rhevm.vdsm
device = /dev/virtio-ports/ovirt-guest-agent.0

Son olarak aşağıdaki komutları sırasıyla çalıştırın. İşlem bu kadar.

> sudo systemctl enable ovirt-guest-agent.service

> sudo systemctl start ovirt-guest-agent.service

> sudo systemctl status ovirt-guest-agent.service

Fiziksel HP Gen9 Sunucuda OS Boot Ekleme – Kaybolan OS GRUB Ekleme on Linux

HP sunucularda genelde fiziksel board değişiminden sonra işletim sistemi disk üzerinden açılmaz. Bunun nedeni sunucu başlangıç diski olarak MBR’ı görmemesidir. Bu işlemi göstereceğimi şekilde işletim sisteminin kurulu olduğu diski manuel olarak göstererek grub’ın boot olmasını sağlayacağız.

1. Sunucu başladıktan sonra F9’a basılarak System Utilities gidilir.

2. System Configuration seçilir.

3. BIOS/Platform Configuration seçilir.

 Boot Options seçilir.

5. Advanced UEFI Boot Maintenance seçilir.

6. Add Boot Option seçilir.

7. Bu kısında işletim sisteminin yüklü olduğu disk otomatik olarak gelecektir, seçip devam edelim.

8. EFI seçilir.

9. Bizde Linux Ubuntu yüklüydü geldi, seçilip devam edilir.

10. grub64.efi seçip devam ediyoruz.

11. Burda yüklü işletim sistminin adını yazmak mantıklı,

12. Enter ile menüye girilir.

13. Bizde ubuntu yüklü olduğu için ubuntu yazıp devam ediyoruz.

14. F10 ile işlem kaydedilir.

15. Boot Options seçeneğine tekrar gidilir ve en altta geldiği görülür.

16. Burda + ve – ile listenin en üstüne ubuntu sekmesi getirilir ki işletim sistemi direk açılsın.

17. F10’a basarak yapılandırmalar kaydedilir ve sunucu yeniden başlatılarak, sunucunun diskteki OS’den başlaması sağlanmış olur.

Linux Sistemlerde Açık Portların Kontrolü – netstat – lsof

İşletim sisteminde hizmet veren her servis bir port üzerinden hizmet verir. Bu nedenle sistem yöneticisinin sistem üzerinde bu portlara hakim olması gerekiyor. Farkında olunmadığı ya da gizli kalmış açık bir port bulunmamalıdır. Çünkü bu portlar aracılığı ile dış dünyaya yani internete servis sunulmaktadır. Bu nedenle internete açık bağlantıların belirlenmesi kritik bir görevdir ve öneme sahiptir. İşletim sisteminizde tcp ve udp olarak açık olan port ve servisler “netstat” ve “lsof” yardımıyla tespit edilebilir.

> netstat -plntua

> lsof -i -n | egrep -i listen

HAProxy ve Nginx x-forwarded-for (Client ip lerin loglanmasını sağlamak)

HAProxy için herbir backend yapılandırmanızda aşağıdaki satır bulunmalıdır.

option forwardfor

Nginx için “/etc/nginx/nginx.conf” yapılandırma dosyasını aşağıdaki gibi yapılandırmalısınız.

log_format main ‘$http_x_forwarded_for ($remote_addr) – $remote_user [$time_local] ‘
‘”$request” $status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent”‘ ;

access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;

Ardından servisi yeniden başlatın.

> systemctl restart nginx.service (service nginx restart ya da /etc/init.d/nginx restart)

Daha sonra aşağıdaki komut ile son durumu gözden geçirebilirsiniz.

> tail -f /var/log/nginx/access.log

UFW – Uncomplicated Firewall

UFW(Uncomplicated Firewall) Ubuntu Linux’lar için varsayılan olarak gelen güvenlik duvarı aracıdır.

Ufw (Uncomplicated Firewall)’nun iptables’a alternatif olmasında ki en büyük etken güvenlik duvarı olarak kullanıcıya kolay kullanım sağlamasıdır. Bu yüzden Linux topluluğu tarafından kısa zamanda desteklenip, popüler hale gelmiştir ve birçok dağıtımda gömülü bir şekilde gelmektedir.

Ufw sistemde inactive olarak gelmektedir. Çalışır vaziyete getirmek için active hale getirilmelidir. Bunun için aşağıdaki komutu kullanılabilir.

Ufw’yu active hale getirmek için,

> sudo ufw enable

Tekrar inactive mode’ye getirmek için,

> sudo ufw disable

Aslında her güvenlik duvarı yönetiminde işleri kolaylaştıracak ve güvenliği sağlayacak ilk hareket içerden dışarı çıkışları serbest hale getirmek, dışardan içeri girişleri ise engellemektir.

NoT : Hatta içerden dışarı ağ akışını daha sıkı hale getirebilirsiniz, yani lokaldeki kullanıcıları içerden dışarı çıkışta da sınırlandırılabilir. Yalnızca ve gerekmedikçe varsayılan olarak 80 ve 443 portlarını açık bırakıbilir. Bunun için “sudo ufw default deny outgoing” komutunu çalıştırdıktan sonra 80 ve 443’e izin vermek için kural girilmelidir (ilgili kuralları aşağıda gösterilecektir). Tabi bu durum beraberinde yönetim zorluğuyla beraber kural sıklığını da getirecektir.

Dışardan içeri gelen paketleri engellemek için,

> sudo ufw default deny incoming

İçerden dışarı çıkan paketlere izin vermek için,

> sudo ufw default allow outgoing

Servis bazında; ssh servisine izin vermek için,

> sudo ufw allow ssh

 

Servis bazında; ssh servisine engellemek için,

> sudo ufw deny ssh

 

Port bazında izin vermek için,

> sudo ufw alllow 22/tcp

> sudo ufw allow 53/udp

 

Port bazında engellemek için,

> sudo ufw deny 22/tcp

 

Port aralığına izin vermek için,

> sudo ufw allow 1500:2500/tcp

> sudo ufw allow 1500:2500/udp

 

Port aralığını engellemek için,

> sudo ufw deny 1500:2500/tcp

> sudo ufw deny 1500:2500/udp

 

İp’ye izin vermek için,

> sudo ufw allow from 192.168.0.25

 

İp’yi engellemek için,

> sudo ufw deny from 192.168.0.25

 

Var olan, izin verilmiş kuralı silmek için,

> sudo ufw delete allow ssh

> sudo ufw delete allow 80/tcp

> sudo ufw delete allow 1500:2500/tcp

 

Var olan, engellenmiş kuralı silmek için,

> sudo ufw delete deny ssh

> sudo ufw delete deny 80/tcp

> sudo ufw delete deny 1500:2500/tcp

 

Şimdi “sudo ufw status numbered” komutu ile yapılan kurallar listelenecektir.

Yukarıda numbered parametresi ile görüntülenen kurallar aşağıdaki gibi sıra numarasına göre de silinebilir.

> sudo ufw delete [number]

Tüm kuralları “sudo ufw status” ile beraber verbose parametresini ekleyerek de her ayrıntı görüntülenebilir.

> sudo ufw status verbose

Tüm kuralları sıfırlamak yani ufw’yu varsayılana, default(fabrika çıkışına)’a çekmek için aşağıdaki komutu kullanılabilir.

> sudo ufw reset

Ayrıca ufw güvenlik duvarı için log‘lamayı aktif/pasif etmek için aşağıdaki komutu kullanabilirsiniz. Log takibini ise “/var/log/syslog” dosyası üzerinden yapabilirsiniz.

> sudo ufw logging ON/OFF

IP Tables

IPTables netfilter takımı ve birçok destekleyici tarafından geliştirilen güvenlik duvarı yazılımıdır.

Komutlar için kullanılan kavramlar,

            ACCEPT : Gelen paketleri kabul eder.

            DROP : Gelen paketleri düşürür. Kullanıcıya bilgi vermez.

            REJECT : Gelen paketleri reddeder ve kullanıcıya bilgi verir.

            FORWARD : Gelen paketleri yönlendirir.

            INPUT : Gelen paketleri temsil eder.

            OUTPUT : Giden paketleri temsil eder.

Aşağıdaki komut ile iptables detaylarını görüntüleyebilirsiniz. Henüz yapılandırılmamış iptables görüntüsü aşağıdaki gibidir.

> iptables -L

Fakat komutu “iptables -L –line-numbers” olarak kullanmanız önerilir çünkü kurallar satır numarasıyla görülür. Bu komut kuralları silmek için gerekecektir.

Aşağıdaki komut ile yerel makineden 192.168.1.25 ip’sine çıkışı engelleyen kural girilebilir. “Iinput kural girmek manasına gelmektedir, “OUTPUT” dışarı çıkarken, “ddestination hedef, “jjump kurala uyan paketler manasındadır.

> iptables -I OUTPUT -d 192.168.1.25 -j DROP

Ya da domaine,

> iptables -I OUTPUT -d fatlan.com -j DROP

Ddelete, silme manasındadır ama öncesinde “iptables -L –line-numbers” komutunu çalıştırılır ki oluşturulan kurallarının satır numarası görüntülenir ve o satır numarasına göre silme işlemi yapılır. İp’li kural 2.satırda, domainli kural 1.satırda.

> iptables -D OUTPUT 1

Ya da

> iptables -D OUTPUT 2

Şimdi dışardan bize doğru gelen istekleri engelleyen bir kural yazılacaktır. Şöyle 192.168.1.25 ip’sinden gelen paketler engellenir.

> iptables -I INPUT -s 192.168.1.25 -j REJECT

Tüm istekleri değil de sadece 80 portundan çıkan istekler engellenir. “–dport” yerine “sport” da kullanabilirsiniz.

> iptables -I OUTPUT -p tcp –dport 80 -j DROP

Sadece dışardan gelen isteklerde 80 portu açılacaktır.

> iptables -I INPUT -p tcp –dport 80 -j ACCEPT

Şimdi bize doğru gelen ping paketleri engellenecektir.

> iptables -I INPUT -p icmp –icmp-type echo-reply -j DROP

Local makinenin ping atmasını engellenecektir.

> iptables -I OUTPUT -p icmp –icmp-type echo-request -j DROP

Şimdi bütün kurallar girildikten sonra tekrar listelenecektir.

> iptables -L –line-numbers

INPUT ya da OUTPUT girdilerini komple temizlemek için aşağıdaki komut.

> iptables -F INPUT ya da OUTPUT

Tüm kuralları temizlemek için de aşağıdaki komut kullanılır ve komutu çalıştırdıktan sonraki görüntü aşağıdaki gibidir.

> iptables -F

HAProxy(LoadBalancer) ve Keepalived(Cluster) Kurulum ve Yapılandırması

HAProxy, yüksek erişilebilirliğe(high availability) sahip yük dengeleyici(load balancing) ile TCP ve HTTP tabanlı uygulamalar için proxy sunucusu hizmeti veren açık kaynak kodlu bir yazılımdır.

Keepalived, IP failover(yük devretme) yeteneğini ikiden daha fazla sunucu için sağlayacak yeteneğe sahip açık kaynak kodlu bir yazılımdır. Keepalived kendi arasında Multicast haberleşme tekniğini kullanmaktadır.

Biz yapımızda HAProxy’i load balancer için, Keepalived’i de IP devretmek yani HAProxy yapımızı Cluster hale getirmek için kullanacağız.

Senaryomuzda 3 adet sunucu bulunmaktadır. Bu 3 sunucuya HAProxy kurarak load balancer hale getireceğiz. Ardından Keepalived servisini kurarak sunuculardan biri kapandığında IP failover yaparak kesinti olmadan diğer sunucuya geçerek load balancer servisimizin çalışmasını sağlıyacağız.

Bunun için 4 adet IP kullanacağız(ip ler tamamen atmasyon).

1. Sunucu : 10.10.5.13

2. Sunucu : 10.10.5.14

3. Sunucu : 10.10.5.15

4. Keepalived Virtual Ip : 10.10.5.5

Şimdi her 3 sunucuya HAProxy ve Keepalived servisini aşağıdaki gibi kuralım.

> sudo apt install haproxy -y

> sudo apt install keepalived -y

NoT1 : Sunucularda “net.ipv4.ip_nonlocal_bind=1” olması gerekiyor. Yoksa HAProxy için kullanılacak yapılandırma üzerinde aynı anda aynı ip yi barındıramayacağı için bind hatası verecek ve servis çalışmayacaktır. Bunun için aşağıdaki yolu izlemeniz gerekiyor.

İlk olarak “vi /etc/sysctl.conf” dosyasının için edit edin ve aşağıdaki parametreyi yapıştırıp kaydedip çıkın.

net.ipv4.ip_nonlocal_bind=1

Daha sonra aşağıdaki komutu çalıştırın.

> sysctl -p

Not2: 443 SSL kulanacaksanız “/etc/ssl/private/” dizini içinde “haproxy.pem” adından SSL’lerinizin Bundle(*.crt,*.ca,*.key) hali bulunması gerekiyor.

Şimdi Örnek olarak aşağıda HAPoxy yapılandırmasına bakalım. Yapınızda her HAProxy için aynı yapılandırmayı kullanacaksınız.

Bunun için “/etc/haproxy/haproxy.cfg” dosyasını edit edeceksiniz.

> vi /etc/haproxy/haproxy.cfg

 

#Aşağıda default değerlerin haricinde değerlerde mevcuttur.

global

log /dev/log local0

log /dev/log local1 notice

chroot /var/lib/haproxy

stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners

stats timeout 30s

user haproxy

group haproxy

daemon

maxconn 1000000

# Default SSL material locations

ca-base /etc/ssl/certs

crt-base /etc/ssl/private

# Default ciphers to use on SSL-enabled listening sockets.

# For more information, see ciphers(1SSL). This list is from:

# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/

# An alternative list with additional directives can be obtained from

# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy

ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS

ssl-default-bind-options no-sslv3

nbproc 1

nbthread 8

tune.maxrewrite 16384
tune.bufsize 32768

 

defaults

log global

mode http

option httplog

option httpclose

option dontlognull

maxconn 1000000

timeout connect 3000000

timeout client 6600000

timeout server 6600000

errorfile 400 /etc/haproxy/errors/400.http

errorfile 403 /etc/haproxy/errors/403.http

errorfile 408 /etc/haproxy/errors/408.http

errorfile 500 /etc/haproxy/errors/500.http

errorfile 502 /etc/haproxy/errors/502.http

 

#HAProxy için Dashboard yapılandırma kısmı

listen stats

bind panel.fatlan.com:8989

mode http

stats enable

stats uri /stats

# stats hide-version

stats realm HAProxy\ Statistics

stats auth admin:admin

 

Aşağıdaki yapılandırmada iki blog’ta ACL kullanıldı. İlk blog, link’in içinde herhangi bir yerde “rest” kelimesi geçerse keypanelfatlan-backend443 bloğu çalışacak, ikincisinde farklı bir domain isteğinde(forum.fatlan.com) backend fatlanforum-backend çalışacak, haricinde tüm istekler panelfatlan-backend bloğunda çalışacak. Diğer port yönlendirmeleri hariç.

 

#80 portunu 443 portuna yönlendirme kısmı

frontend SafirFrontend80

bind panel.fatlan.com:80

mode http

redirect scheme https if !{ ssl_fc }

#443 portu ayar kısmı, SSL offloading burda yapılandırılıyor

frontend PanelFatlan443

bind panel.fatlan.com:443 ssl crt /etc/ssl/private/haproxy.pem ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

option httplog

option http-keep-alive

option forwardfor except 127.0.0.0/8

#option http-server-close

reqadd X-Forwarded-Proto:\ https

mode http

#ACL örnek yapilandirilmasi(proxypass) linkte herhangi biryerde rest kelimesi geçerse yönlendir

acl keypanelfatlan443 path_beg /rest

use_backend keypanelfatlan-backend443 if keypanelfatlan443

default_backend panelfatlan-backend

 

#ACL farklı host yönlendir

acl host_fatlanforum hdr(host) -i forum.fatlan.com
use_backend fatlanforum-backend if host_fatlanforum

 

#Yönlendirilen kısım, içerde sunucular 80 haberleştirildiği için 80 port yapılandırıldı

backend panelfatlan-backend

mode http

balance roundrobin

stick store-request src

stick-table type ip size 256k expire 30m

option forwardfor

option httplog

option httpchk HEAD /

server frontend_01 10.10.37.12:80 check port 80 inter 1000 rise 2 fall 3

server frontend_02 10.10.37.13:80 check port 80 inter 1000 rise 2 fall 3

 

#ACL gelen, rest yönlendirilen kısım

backend keypanelfatlan-backend443

mode http

balance roundrobin

stick store-request src

stick-table type ip size 256k expire 30m

option forwardfor

option httplog

option httpchk OPTIONS /login HTTP/1.0

http-check expect status 200

reqrep ^([^\ :]*)\ /rest[/]?(.*) \1\ //\2

server restci_01 10.10.37.34:80 check inter 12000 rise 3 fall 3

server restci_02 10.10.37.35:80 check inter 12000 rise 3 fall 3

 

#ACL gelen, rest yönlendirilen kısım

backend fatlanforum-backend
mode http
option forwardfor
option httplog
option httpchk HEAD /

server fatlanforum_01 10.10.37.45:80 check port 80 inter 3000 rise 2 fall 3

 

Harici örnekler aşağıdaki gibi de yapılandırılabilir.

#5000 portuna örnek

frontend PanelStone5000

bind panel.fatlan.com:5000

option httplog

option forwardfor except 127.0.0.0/8

#option http-server-close

reqadd X-Forwarded-Proto:\ https

mode http

default_backend panelstone-backend5000

 

#Yönlendirilen kısım

backend panelstone-backend5000

mode http

balance roundrobin

stick store-request src

stick-table type ip size 256k expire 30m

option forwardfor

option httplog

option httpchk HEAD /

server ftstone_01 10.10.37.43:5000 check port 5000 inter 12000 rise 3 fall 3

server ftstone_02 10.10.37.44:5000 check port 5000 inter 12000 rise 3 fall 3

 

#3306 mysql örnek

frontend FatlanMysql

bind panel.fatlan.com:3306

mode tcp

default_backend fatlanmysql-backend3306

 

#Yönlendirilen kısım

backend fatlanmysql-backend3306

mode tcp

server mysql_01 10.10.37.60:3306 check

server mysql_02 10.10.37.61:3306 check backup

server mysql_03 10.10.37.62:3306 check backup

 

Yukarıda örnek HAProxy yapılandırmalarından bahsettim, ben kendi yapılandırmamı yaptım ve 3 sunucuda aynı yapılandırmaları yapıştırdım.

Şimdi Keepalived yapılandrımasını yapalım. Keepalived için 3 sunucuda da kısmi olarak farklı parametrik ayarlar mecvut olacak. Bunun için “/etc/keepalived/keepalived.conf” dosyasını oluşturup, yapılandıracağız. Bu arada “priority” yüksek olan önceliklidir.

1. Sunucu(HAProxy+Keepalived)

vrrp_sync_group haproxy {

group {

VI_01

}

}

vrrp_script haproxy_check_script {

script “kill -0 `cat /var/run/haproxy.pid`”

interval 5 # checking every 5 seconds (default: 5 seconds)

fall 3 # require 3 failures for KO (default: 3)

rise 6 # require 6 successes for OK (default: 6)

}

#Virtual interface

vrrp_instance VI_01 {

state MASTER

interface ens3

virtual_router_id 61

priority 103

authentication {

auth_type PASS

auth_pass 123456

}

# Virtual ip address – floating ip

virtual_ipaddress {

10.10.5.5

}

track_script {

haproxy_check_script

}

}

 

2. Sunucu(HAProxy+Keepalived) #Sadece farkları yazıyorum.

state BACKUP

priority 102

 

3. Sunucu(HAProxy+Keepalived) #Sadece farkları yazıyorum.

state BACKUP

priority 101

 

Yapılandırmalar bu kadar, tüm suncularda HAProxy sorunsuz çalışır vaziyette olmalı aynı zaman keepalived servisi de. Sunucularda yada servislerde herhangi bir kesintide çalışan diğer sunucudan loadbalancer hizmet vermeye devam edecektir.

ÖNEMLİ

HAProxy ve Linux kernel yüksek yükler için ayarlama

1. sudo vi /etc/security/limits.conf

         * soft nofile 1000000

         * hard nofile 1000000

         root soft nofile 1000000

         root hard nofile 1000000

2. sudo vi /etc/default/haproxy

         ulimit 1000000

3. sudo vi /lib/systemd/system/haproxy.service

         LimitNOFILE=1000000

4. sudo vi /etc/sysctl.conf

        net.ipv4.ip_local_port_range=1024 65535

        net.ipv4.tcp_max_syn_backlog = 100000

        net.core.somaxconn = 100000

        net.core.netdev_max_backlog = 100000

5. sudo vi /etc/haproxy/haproxy.cfg

        global

         nbproc 1

         nbthread 8

         tune.maxrewrite 16384

         tune.bufsize 32768

         maxconn 1000000

         tune.ssl.cachesize 1000000

      defaults

        maxconn 1000000

 

Ardından reboot, eğer reboot hemen mümkün değilse

sudo systemctl daemon-reload

sudo systemctl restart haproxy.service

Kaynak : https://medium.com/@pawilon/tuning-your-linux-kernel-and-haproxy-instance-for-high-loads-1a2105ea553e

Linux Sunucular Üzerinde ISCSI Yapılandırması

iscsi(Internet Small Computer Systems Interface), ağ(network) üzerinden veri depolama(storage) ünitelerine tcp/ip protokolünü kullanarak blok düzeyinde erişim sağlayan yöntemdir.

Storage tarafında ilgili SVMs, LUNs, Volumes ve network ayarlarını yapıptan sonra iscsi’nin sunuculara erişimi için “Initiators” ve “Initiator Group” erişimlerini vermelisiniz. Storage tarafına girmiyorum konu genişleyip, dağılmaya başlar.

Not : Sunucunun “InitiatorName” elde etmek için aşağıdaki komutu kullanabilirsiniz.

> cat /etc/iscsi/initiatorname.iscsi

İscsi’leri Keşfedelim;

Sunucu üzerinde İscsi hedef tespiti için aşağıdaki komut ile discover işlemini yapalım. İlgili ip’lere bağlı erişimi olan tüm hedefleri listeleyecektir.

> iscsiadm -m discovery -t st -p 10.10.30.5

Çıktı: 10.10.30.5:3260,1030 iqn.1992-08.com.netapp:sn.2626a89cce1111e66c5200a098d9e8ba:vs.18

İscsi’lere login olalım;

Şimdi var olan tüm iscsi hedeflerine login olmak için aşağıdaki komutu çalıştırın.

> iscsiadm -m node -l

Ya da tek tek login olmak için aşağıdaki komutu da kullanabilirsiniz.

> iscsiadm -m node -T -l iqn.1992-08.com.netapp:sn.2626a89cce1111e66c5200a098d9e8ba:vs.18 -p 10.10.30.5:3260

İscsi’lere logout olmak için;

İscsi den tümüyle birden logout olmak için,

> iscsiadm -m node -u

Ya da tek tek logout olmak için,

> iscsiadm -m node -T -u iqn.1992-08.com.netapp:sn.2626a89cce1111e66c5200a098d9e8ba:vs.18 -p 10.10.30.5:3260

İscsi diskleri genişletme;

İscsi ile çalışan stroge’de alan genişlettikten sonra aşağıdaki komut ile de sunucuya yansımasını sağlayabilirsiniz.

> iscsiadm -m session –rescan

İscsi genişletmesinden sonra eğer hedefleri multipath olarak kullanıyorsanız aşağıdaki komutu da çalıştırmanız gerekebilir.

> multipathd resize map “multipath alias ya da wwid_numarası”

Ardından “fdisk -l” ve “multipath -l” komutları ile işlemin doğruluğunu kontrol edebilirsiniz.

Güvenli Yerel Docker Registry Kurulumu

Docker registry docker images’larının depolandığı sistemdir. Docker images’larını pull ile çekip, push ile de gönderip paylaştığımız sistemdir. Hali hazırda docker resmi olarak https://hub.docker.com/ dan binlerce özel yada genel, kullanıma açtığı images’lar bulunmaktadır. Bizlerde bu sistemi kullanmaktayız.

Docker hub gibi sadece yerel ağınızda kullanıma açmak isteyebileceğiniz bu sistemi aşağıdaki yöntem ile kurup kullanabilirsiniz.

Registry için biz ubuntu kullanacağız ve docker kurulumun yapılmış olduğunu farz ederek registry kurulumuna geçiyoruz.

Örnek domain olarak “fatlan.com” kullanılmıştır.

Kuruluma geçmeden önce güvenli kurulum olduğu için ssl sertifikalarınız(domain.crt, domain.key) mevcut olmalıdır. Bu sertifika authority confirmed olabilir yada self sign olabilir. Burada önemli olan kısım domain.crt dosyasının içinde ilk olarak domain sertifika key’i akabinde kök sertifika key’i olmalıdır. Yoksa registry’e images push ettiğinizde “x509: certificate signed by unknown authority” hatası alırsınız.

Sertifikalarınızı “/certs” klasörünün altına taşıyın.

> sudo mkdir /certs

Ardından “mkdir” komutu ile “/mnt/registry-repo” klasörünü oluşturun. Biz registry için images store olarak bu directory kullanacağız. Sizler bu kısımda “/mnt/registry-repo” dizini farklı bir disk yada partition olarak seçip, mount edip daha geniş bir alana olarak kullanabilirsiniz.

> sudo mkdir /mnt/registry-repo

Ardından aşağıdaki komutla docker registry’i kuralım.

> sudo docker run -d –restart=always –name registry -v /certs:/certs -v /mnt/registry-repo:/var/lib/registry -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -p 443:443 registry:2

Registry container’ımızın çalıştığını “sudo docker ps -a” komutu ile kontrol edelim.

Şimdi kurulumu doğrulamak için pull ve push yöntemlerini de dahil ederek test edelim. Ayrıca https://docker.fatlan.com/v2/_catalog adresinden de kontrol edebilirsiniz, tabi siz kendi belirlediğiniz domain name‘i girmelisiniz.

İlk önce hello-world images’ını docker hub’tan pull edelim.

> sudo docker pull hello-world

Ardından bize özel olması için tag atayalım.

> sudo docker tag hello-world docker.fatlan.com/my-hello-world

Şimdi yerel registry’ımıza push ile gönderelim.

> sudo docker push docker.fatlan.com/my-hello-world

Son olarak bu images’ımızı yani kendi yerel registry’ımızdan pull edelim ve bitirelim.

> sudo docker pull docker.fatlan.com:443/my-hello-world

Linux Sistemlerde TAB Tuşu ile Otomatik Komut yada Dizin Tamamlama – Bash Completion

Bash (Bourne Again Shell) şüphesiz en popüler Linux Shell olma özelliği ile beraber şuan için varsayılan shell olarak Linux yönetiminde top level seviyesindedir.

Her Linux sistem yöneticinin ihtiyaç duyabileceği Shell ile sistem yönetirken tab tuşu ile komut tamamlama Redhat/CentOS gibi Linux sistemlerin minimal kurulumlarında aktif bir şekilde gelmemektedir. Bu yüzden aşağıdaki komut ile auto-completion’u destekleyen bash için bash-completion paketini kurmalısınız.

> yum install bash-completion

Ardından konsol ekranında logout/login olarak paketi aktif edebilirsiniz.

KVM – qcow2 Disk Dosyası Boyutunu Küçültme (Reduce – Shrink Qcow2 Disk Files)

Şimdiki yazımızda KVM hipervisor katmanında guest’ler(vm – sanal makineler) için başınıza gelebilecek bir durumdan bahsedeceğiz. Malumunuz KVM hostlarınızda disk dosyalarınız(qcow2) diskte belli bir alanı kaplamaktadır. Fakat zamanla guestteki disk alanı hosttaki barındığı disk alanını doldurup hatta üzerinede çıkabilmektedir. Aslında VM diski filesystem tabanında düzenli alanlarla kullanmadığı yada dağınık yazdığı için yani bu durum adreslemeyle alakalı; dolu göstermektedir. Aslında windows’ta defrag yöntemi gibi diyebiliriz. Bu durumda sanal makine otomatik olarak “Pause” duruma düşecek ve hizmet veremeyecek duruma gelecektir. Bu duruma düşmeden yada düştükten sonra aşağıdaki yöntemlerle qcow2 disk dosyalarını boyutunu hipervisor katmanında aslında kullanılmadığı halde kullanıyor gibi gösterdiği alanları yeniden düzenleyerek küçültecektir.

İlk yöntem olarak “virt-sparsify” komutunu kullanarak etkili ve verimli bir şekilde disk dosyanızın boyutunu küçültebilirsiniz.

NoT1 : “virt-sparsify” komutunu kullanabilmek için libguestfs-tools paketini öncesinde kurmalısınız.

NoT2 : İşlemleri vm kapalıyken yapın.

İşlem yapılmadan önce aşağıdaki komutla disk dosyasının boyutunu görelim.

> du -ha

Ardından “virt-sparsify” komutu ile istediğimiz küçültme işlemini gerçekleştirelim.

> virt-sparsify –in-place diskdosyanız.qcow2

Daha sonra tekrar “du -ha” komutunu çalıştıralım ve boyuttaki azalmayı görelim.

Ikinci yöntem olarak gene “virt-sparsify” komutunu convert yöntemi ile kullanalım.

> virt-sparsify diskdosyanız.qcow2 –convert qcow2 yeniisimdiskdosyanız.qcow2

Sonra “du -ha” komutu

Son olarak üçüncü yöntem ise,

Aşağıdaki yöntem ile Guest’in içinde “dd” komutu kullanarak kalan boş alana “zero” basıyoruz.

> dd if=/dev/zero of=/MyDump

Daha sonra MyDump dosyasını siliyoruz.

> rm -f /MyDump

Son olarak “qemu-img” komutu ile işlemi gerçekleştiriyoruz ama öncesinde fırsatınız varsa disk dosyasının yedeğini almanızda fayda var.

> qemu-img convert -O qcow2 ilgilidosyaismi.qcow2 yeni_ilgilidosyaismi.qcow2

Kaynaklar

http://libguestfs.org/virt-sparsify.1.html

https://pve.proxmox.com/wiki/Shrink_Qcow2_Disk_Files

Linux KVM Backup and Restore

Aşağıdaki yönergeleri izleyerek KVM sanallarınızı yedekleyebilir ve yedekten geri dönebilirsiniz.

1. Backup

İlk önce makinelerimizi listeleyelim ve çalışır vaziyette olduğunu görelim.

> virsh list –all

Daha sonra yedekleyeceğimiz vm’i kapatalım.

> virsh shutdown Ubuntu18

Ardından makineleri tekrar listeleyelim ve kapalı olduğunu görelim.

> virsh list –all

Şimdi makineyi (XML dosyasını) aşağıdaki komut/yöntem ile yedekleyelim.

> virsh dumpxml Ubuntu18 > /MyBackup/Ubuntu18.xml

yada

default ta XML lerin tutulduğu “/etc/libvirt/qemu” dizinin altından ilgili XLM’i ilgili backup dizinine cp komutu ile kopyalayabilirsiniz.

Şimdi de disk dosyasını (qcow2) aşağıdaki komut/yöntem ile yedekleyelim.

qcow2 formatındaki disk dosyasını da /MyBackup altına kopyalayalım. Disk dosyalarının default ta tutulduğu yer “/var/lib/libvirt/images/” altındadır.

yada

> virsh domblklist Ubuntu18 komutu ile nerde olduğunu görebilirsiniz. İlgili yerden cp yada scp (remote) komutu ile backup klasörünüze kopyalayabilirsiniz.

> cp /var/lib/libvirt/images/Ubuntu18.qcow2 /MyBackup/Ubuntu18.qcow2

Listeleyip tüm yedeklerimizi görelim.

> ls -lash

NoT: Backup işlemini makineleri kapatmadan da yapabilirsiniz fakat oluşabilecek hatalara yada veri kaybına karşın, kapatıp yapmak sağlıklı olacaktır. Tabi illaki makinenin hizmet kesintisi olmaması gerekiyorsa, dediğim gibi vm açıkkende backup alabilirsiniz.

2. Restore

Şimdi yedekten geri dönme senryosunu uygulayalım. Bunun için XML’i silebilir yada undefine edebilirsiniz.

> virsh undefine Ubuntu18

yada

Sunucu özelliklerinin barındığı XML dosyası silinmiş olsun ve listelediğimizde makinenin gittiğini görebiliyoruz.

> virsh list –all

Şimdi senaryoyu gerçekleştirmek için disk (qcow2) dosyasını silelim.

> rm /var/lib/libvirt/images/Ubuntu18.qcow2

Ve senaryo uygulamasına başlayabiliriz. Hemen backup aldığımız yerden diskin (qcow2)’un olması gereken yere kopyalama işlemine başlayalım.

> cp /MyBackup/Ubuntu18.qcow2 /var/lib/libvirt/images/

Diskin kopyalama işlemi bittikten sonra makine özelliklerinin olduğu XML dosyasını aşağıdaki komut/yöntem ile kullanabilir hale getirelim.

> virsh define –file /MyBackup/Ubuntu18.xml

yada

Sunucu özelliklerinin barındığı XML dosyası bulunduğu dizine tekrar kopyalanmış olsun.

Ardından vm’i başlatarak işlemi tamamlayalım.

> virsh start Ubuntu18

How to install KVM on Ubuntu 16 – Ubuntu üzerine KVM kurulumu, Yapılandırması ve Sanal Makine oluşturulması

KVM Çekirdek tabanlı sanal makine Linux çekirdeği için geliştirilen ve onu bir üstsisteme dönüştüren bir sanallaştırma altyapısıdır.

Kurulumdan önce sunucumuza login olup, cpu muzun destekleyip desteklemediğini anlamak için aşağıdaki komutlar yardımıyla cpu bilgilerini kontrol edelim.

Bu komutun çıktısı olarak “CPU(s):” değeri 0 ise dekteklemiyor, 1 veya 1 den fazla bir değer ise destekliyor manasına gelir.

> egrep -c ‘(svm|vmx)’ /proc/cpuinfo

yada

> lscpu

Aşağıdaki komutla da çekidek modüllerinin yüklü olup, olmadığını kontrol edebilirsiniz.

> lsmod | grep kvm

Şimdi kuruluma geçebiliriz. Aşağıdaki komut ile gerekli tüm paketleri kurup, KVM ortamımızı hazır hale getirelim.

> sudo apt-get install qemu-kvm libvirt-bin bridge-utils virt-manager

Yukarıdaki kurulum komutundan sonra sorunsuz bir kurulum gerçekleştiğini, aşağıdaki komutla doğrulayın.

> kvm-ok

Ardından sunucuyu reboot edin.

> brctl show komutuyla da sonradan gelen sanal interface(NIC) i görüntüleyebilirsiniz.

Default’ta Virtual Machine(qcow2) lerin saklandığı dizindir.

/var/lib/libvirt/images/

Not1 : Eğer qcow2 formatında ki diskin yerini bilmiyorsanız aşağıdaki komut(komut ilgili vm in disklerini bulunduğu dizin ile beraber listeler) size nerde olduğunu söyleyecektir.

> virsh domblklist Ubuntu18

Default’ta Virtual Machine images lar için, kurulum iso larının saklandığı dizindir.

/var/lib/libvirt/boot/

Default’ta Virtual Machine özelliklerinin(ram,cpu,disk vs.) xml formatında tutulduğu yerdir.

/etc/libvirt/qemu

Not2 : Aşağıdaki komut ise ilgili makinanın xml formatında tutulduğu özellikleri(ram,cpu,disk vs.) ekrana bastırır.

> virsh dumpxml Ubuntu18

Aşağıdaki iki komutla da mevcuttaki sanal makinaları görüntüleyebilirsiniz.

> virsh -c qemu:///system list

yada

> virsh list –all

Virtual Machine lerinizi GUI olarak yönetmek, oluşturma ve silme gibi işlemler için virt arayüzünü kullanabilirsiniz. Komut aşağıdaki gibidir.

NoT3 : Bunu yapabilmek için öncesinde sunucuya ssh bağlantısı yaparken, -X parametresini kullanarak bağlanmalısınız(ssh -X root@192.168.1.100). Ayrıca Windows (Putty de x11 enable edilmelidir) için Xming uygulaması, Mac için ise Xquartz uygulaması kurulu ve çalışır olması gerekiyor.

NoT4 : Bu arada bir bilgi daha vermem gerekir. Eğer Linux kullanıcısı iseniz yani client makinanız Linux ise sunucuya virt-manager paketini kurmadan, client makinanızda virt-manager var ise ordan File-Add Connection diyerek sunuya bağlanıp yönetebilirsiniz.

> sudo virt-manager

Yada sunucuya ait konsolu direk olarak aşağıdaki komutla alabilirsiniz.

NoT5 : Bunu yapabilmek için öncesinde kullanıcı makinasına virt-viewer paketini kurmalısınız(ubuntu/debian için ’apt install virt-viewer’, Redhat/CentOS için ‘yum install virt-viewer’).

> sudo virt-viewer -c qemu:///system Ubuntu18

Komutlar aracılığı ile sunucuyu yönetimi için aşağıda bir kaç komut paylaşacağım.

Sunucuyu başlatır.

> virsh start Ubuntu18

Sunucuyu kapatır.

> virsh shutdown Ubuntu18

Sunucuyu yeniden başlatır.

> virsh reboot Ubuntu18

Sunucunun özelliklerini değiştirmek için kullanılır(xml dosyasını değiştirir).

> virsh edit Ubuntu18

Sununun barındığı host açıldığında, bu vm de otomatik olarak başlatma seçeneğidir.

> virsh autostart Ubuntu18

Sununun barındığı host açıldığında, bu vm de otomatik olarak başlatma seçeneğini devre dışı bırakır.

> virsh autostart –disable Ubuntu18

Şimdi “virt-install” komtuna bakalım, bu komut aracılığı ile komut satırı üzerinden makine oluşturabilirsiniz. Alltaki komutta örnek komut ile bu işlemi sağlayabilirsiniz. Ben bir çok parametreyi kullandım ama siz tüm parametleri kullanmak zorunda değilsiniz. Zaten kullanmadığınız parametreler yerine default değerler atanacaktır. Tabi sonrasında siz bu değerleri değiştirebilirsiniz. Komutu yürüttükten sonra gui açılıp size kuruluma yönlendirecektir.

> sudo virt-install –virt-type=kvm –name ubuntu-cli –ram 2048 –vcpus=2 –os-variant=Ubuntu16.04 –cdrom=/var/lib/libvirt/boot/ubuntu-18.04-live-server-amd64.iso –network=bridge=eth0,model=virtio –graphics spice –disk path=/var/lib/libvirt/images/ubuntu-cli.qcow2,size=40,bus=virtio,format=qcow2

Şimdi de “virt-clone” komutundan bahsedelim. Adında da anlaşılacağı üzere clone almak için kullanılan komuttur. Kullanımı aşağıdaki gibidir. Fakat vm kapalı durumda iken clone alabilirsiniz, yoksa uyarı verecektir. “Clone ‘Ubuntu18.clone’ created successfully.” uyarısını almalısınız.

> virt-clone –original=Ubuntu18 –name=Ubuntu18.clone –file=/var/lib/libvirt/images/Ubuntu18.clone

Aşağıdaki komut ise vmdk formatındaki bir vm i qcow2 formatına çevirip KVM host unuzda çalıştırmanızı sağlar.

> qemu-img convert -O qcow2 ubuntu.vmdk ubuntu.qcow2

Bir sonraki makalemizde KVM ortamında nasıl yedek alıp sonra aldığımız o yedeği nasıl geri yükleyip, çalışır hale getireceğiz ona bakacağız.

SFTP Kurulum ve Yapılandırması on Ubuntu

SFTP nedir.? : Secure FTP, yani SFTP, SSH kullanarak dosya transferi yapan bir dosya aktarım protokolüdür. SSH‘ın sağladığı güvenlik özellikleri, FTP‘den farklı olarak SFTP‘yi güvenli hale getirir.FTP‘nin RSA ile güçlendirilmiş halidir.

İlk olarak tabi OpenSSH paketi kurulu olması gerekiyor. Eğer kurulu değilse aşağıdaki komutla kurulum yapabilirsiniz.

> sudo apt install openssh-server -y

Ardından ftp kullanıcıları için grup oluşturalım.

> sudo addgroup ftpaccess

Daha sonra herhangi bir editör yardımıyla “/etc/ssh/sshd_config” dosyasındaki “Subsystem sftp /usr/lib/openssh/sftp-server” satırını başına # koyarak yorum satırına çevirip,

Ek olarak aşağıdaki satırları dosyanın sonuna ekleyip, kaydedip çıkın.

Subsystem sftp internal-sftp

Match group ftpaccess

ChrootDirectory %h

X11Forwarding no

AllowTcpForwarding no

ForceCommand internal-sftp

Şimdi SSH servisini yeniden başlatın

> sudo systemctl restart sshd.service

Ardından sunucuya login olamayacak ve ftpaccess gruba dahil bir kullanıcı oluşturalım. Bunu aşağıdaki komutla gerçekleştirebilirsiniz.

> sudo useradd -m USERNAME -s /usr/sbin/nologin -G ftpaccess

Şimdi bu kullanıcıya şifre belirleyelim.

> sudo passwd USERNAME

/home” dizininde USERNAME için oluşan klasörün sahipliğini root yapalım.

> sudo chown root:root /home/USERNAME

Ardından oluşturulan kullanıcının ftp işlemleri yapabilmesi için kullanılacak bir dizin oluşturalım.

> sudo mkdir /home/USERNAME/data

Dizini oluşturduktan sonra sahipliğini aşağıdaki gibi değiştirelim.

> sudo chown USERNAME:ftpaccess /home/USERNAME/data

Son olarak dışardan sftp bağlantısı deneyerek ister cli, ister gui olarak test edelim. Ben cli kullanacağım, siz remmina, winscp gibi araçlarla gui olarak da test edebilirsiniz.

OpenStack Ansible Network Configuration, Bonding, Mtu, Vlan, Br-vlan, Br-vxlan – Ubuntu 16.04

İlk önce aşağıdaki komutla apt reposunu güncelleyin.

> apt update

Ardından “bridge-utils” paketini sisteme kurun.

> apt install bridge-utils

Daha sonra “/etc/network/interfaces” dosyasını aşağıdaki gibi yapılandırabilirsiniz. Tabi siz kullanacağınız şekilde yapılandırabilirsiniz. Ben aşağıdaki örnekte hem bonding, hem vlan, hem bridge vlan, hem bridge vxlan, hem de mtu size olarak jumbo frame kullandım. Ayrıca nfs ve iscsi yide ayrı vlan larla yapılandırdım. Siz ortamınızda gerekli olan yapılandırmaya göre şekillendirebilirsiniz.

auto enp6s0f0
iface enp6s0f0 inet manual
bond-master bond0
mtu 9000

auto enp7s0f0
iface enp7s0f0 inet manual
bond-master bond0
mtu 9000

auto enp6s0f1
iface enp6s0f1 inet manual
bond-master bond1

auto enp7s0f1
iface enp7s0f1 inet manual
bond-master bond1

auto bond0
iface bond0 inet static
address 10.10.10.160
netmask 255.255.255.0
gateway 10.10.10.1
dns-nameservers 10.10.10.1
mtu 9000
bond-mode 4
bond-miimon 100
bond-slaves none
bond-downdelay 200
bond-updelay 200
bond-xmit_hash_policy 1

auto bond1
iface bond1 inet manual
bond-mode 4
bond-miimon 100
bond-slaves none
bond-downdelay 200
bond-updelay 200
bond-xmit_hash_policy 1

# Container/Host management VLAN interface
auto bond0.10
iface bond0.10 inet manual
mtu 9000
vlan-raw-device bond0

#Openstack iscsi  Storage network VLAN interface (optional)
auto bond0.20
iface bond0.20 inet manual
mtu 9000
vlan-raw-device bond0

# Openstack nfs  Storage network VLAN interface (optional)
auto bond0.21
iface bond0.21 inet manual
mtu 9000
vlan-raw-device bond0

# OpenStack Networking VXLAN (tunnel/overlay) VLAN interface
auto bond1.30
iface bond1.30 inet manual
vlan-raw-device bond1

# Container/Host management bridge
auto br-mgmt
iface br-mgmt inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports bond0.10
mtu 9000
address 192.168.236.160
netmask 255.255.252.0

#OpenStack Networking VXLAN (tunnel/overlay) bridge
#
# Only the COMPUTE and NETWORK nodes must have an IP address
# on this bridge. When used by infrastructure nodes, the
# IP addresses are assigned to containers which use this
# bridge.
#
auto br-vxlan
iface br-vxlan inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports bond1.30
address 192.168.240.160
netmask 255.255.252.0

# OpenStack Networking VLAN bridge
auto br-vlan
iface br-vlan inet manual
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports bond1

# compute1 Network VLAN bridge
#auto br-vlan
#iface br-vlan inet manual
#    bridge_stp off
#    bridge_waitport 0
#    bridge_fd 0
#
# For tenant vlan support, create a veth pair to be used when the neutron
# agent is not containerized on the compute hosts. ‘eth12’ is the value used on
# the host_bind_override parameter of the br-vlan network section of the
# openstack_user_config example file. The veth peer name must match the value
# specified on the host_bind_override parameter.
#
# When the neutron agent is containerized it will use the container_interface
# value of the br-vlan network, which is also the same ‘eth12’ value.
#
# Create veth pair, do not abort if already exists
#    pre-up ip link add br-vlan-veth type veth peer name eth12 || true
# Set both ends UP
#    pre-up ip link set br-vlan-veth up
#    pre-up ip link set eth12 up
# Delete veth pair on DOWN
#    post-down ip link del br-vlan-veth || true
#    bridge_ports bond1 br-vlan-veth

# Storage bridge (optional)
#
# Only the COMPUTE and STORAGE nodes must have an IP address
# on this bridge. When used by infrastructure nodes, the
# IP addresses are assigned to containers which use this
# bridge.
#

# Storage ISCSI bridge
auto br-iscsi
iface br-iscsi inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
mtu 9000
bridge_ports bond0.20
address 192.168.244.160
netmask 255.255.252.0

# Storage NFS bridge
auto br-nfs
iface br-nfs inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
mtu 9000
bridge_ports bond0.21
address 192.168.248.160
netmask 255.255.252.0

Kaynak : https://docs.openstack.org/project-deploy-guide/openstack-ansible/newton/app-config-prod.html

Ubuntu 16.04 Bonding Yapılandırması (LACP ve LACP Olmadan)

Bonding nedir.? : Birden fazla ethernet arayüzünü birleştirme işlemidir. Network teaming de denebilir. Şöyle ki birden fazla network kartının tek network kartı gibi davranması kartlardan birinin bağlantısının kopması durumunda diğer kart üzerinden kesintisiz bir şekilde bağlantının devam etmesi işlemidir.

LACP nedir.? : Ether Channel iki protokol ile yapılır. Bunlardan birincisi cisco protokolü olan PAgP(Port Aggregation Protokol) ikincisi ise LACP(Link Aggregation Control Protokol) IEEE 802.3ad olan standart protokolüdür. Ether Channel iki switch arasında 2 yada daha fazla kablo ile bağlantı sağlandığında switch in iki yada daha fazla kabloyu tek kablo gibi algılamasını sağlayan protokoldür. Ether Channel sayesinde hem yedeklilik(redundancy), hem loadbalans, hemde yüksek bandwidth sağlanmış olur.

Bonding MOD’ları

mode=0 >> Round-robin(balance-rr), arayüzlere sırası ile paketleri gönderir.

mode=1 >> Aktif-yedek çalışır(active-backup). Sadece bir arayüz aktiftir.

mode=2 >> [(Kaynak MAC adresi XOR hedef MAC adresi) % arayüz sayısı] (balance-xor) algoritmasına göre paketleri gönderir.

mode=3 >> Broadcast çeşididir(broadcast). Tüm paketleri tüm arayüzlerden gönderir.

mode=4 >> IEEE 802.3ad Dynamic link aggregation(802.3ad), LACP. Aktif-aktif çalışır.

mode=5 >> Toplam yük her arayüzün kendi yüküne göre paylaşılır(balance-tlb).

mode=6 >> Uyarlamalı yük dengeleme modudur(balance-alb).

Senaryomuz aşağıda şekildeki gibi,

1- LACP ile Bonding yapılandırması,

Şimdi “/etc/network/interfaces” dosyasının içini aşağıdaki gibi yapılandırın. Siz kendi nic kart isimlerinize göre düzenleyebilirsiniz.

auto enp6s0f0
iface enp6s0f0 inet manual
bond-master bond0

auto enp7s0f0
iface enp7s0f0 inet manual
bond-master bond0

auto enp6s0f1
iface enp6s0f1 inet manual
bond-master bond1

auto enp7s0f1
iface enp7s0f1 inet manual
bond-master bond1

auto bond0
iface bond0 inet static
address
192.168.1.10
netmask 255.255.255.0
gateway 1
92.168.1.1
dns-nameservers 1
92.168.1.1

bond-mode 4
bond-miimon 100
bond-lacp-rate fast
bond-slaves enp6s0f0 enp7s0f0
bond-downdelay 0
bond-updelay
0
bond-xmit_hash_policy 1

auto bond1
iface bond
1 inet static
address 1
92.168.2.20
netmask 255.255.255.0
gateway 1
92.168.2.1
dns-nameservers 1
92.168.2.1

bond-mode 4
bond-miimon 100
bond-lacp-rate fast
bond-slaves enp6s0f1 enp7s0f1
bond-downdelay
0
bond-updelay
0
bond-xmit_hash_policy 1

Ardından “systemctl restart networking.service” komutu ile network servisini yeniden başlatabilirsiniz, fakat maalesef Ubuntu da network servisi henüz istenilen olgunluğa ulaşmadığı için OS i reboot etmeniz gerekecek. Bu yüzden direk sistemi reboot komutu ile yeniden başlatın.

Ardından “ip a” komutu ile yapılan işlemleri kontrol edebilirsiniz.

Ayrıca Bonding yapılandırmalarına ait detayları aşağıdaki komutla elde edebilirsiniz.

> more /proc/net/bonding/bond0

> more /proc/net/bonding/bond1

NOT1 : Bonding yapılandırmasında bond0 birinci slave olarak görünen nic’in fiziksel adresini devralır ve onu kullanır. Yani MAC Address durumu aşağıdaki örnekteki gibi olacaktır(screenshot’tan da teyit edebilirsiniz). Bu durum mod5 ve mod6 hariç geçerlidir. Ayrıca mod1 de de active-backup çalışma prensibinden dolayı benzersiz MAC Addres kullanır.

bond0         Link encap:Ethernet HWaddr 50:6B:4B:23:1B:2C
enp6s0f0    Link encap:Ethernet HWaddr 50:6B:4B:23:1B:2C
enp7s0f0    Link encap:Ethernet HWaddr 50:6B:4B:23:1B:2C

NOT2 : OS tarafında Bonding’leri LACP olarak yapılandırdığınız taktirde, Switch tarafında da karşılık gelen portlara LACP yapılandırmasını yapmalısınız. Örnek olarak Switch tarafında yapılması gereken ayarı aşağıda paylaşıyorum.

interface Ethernet X
channel-group 1 mode active
no shutdown

interface Po1
switchport mode trunk
mlag 1

2- LACP olmadan normal Bonding yapılandırması,

auto enp6s0f0
iface enp6s0f0 inet manual
bond-master bond0

auto enp7s0f0
iface enp7s0f0 inet manual
bond-master bond0

auto bond0
iface bond0 inet static
address
192.168.1.10
netmask 255.255.255.0
gateway 1
92.168.1.1
dns-nameservers 1
92.168.1.1

bond-mode 1
bond-miimon 100
bond-slaves enp6s0f0 enp7s0f0
bond-downdelay
0
bond-updelay
0
bond-xmit_hash_policy 1

3- İp olmadan nic olarak bonding yapılandırması,

auto enp6s0f0
iface enp6s0f0 inet manual
bond-master bond0

auto enp7s0f0
iface enp7s0f0 inet manual
bond-master bond0

auto bond0
iface bond0 inet manual

bond-mode 4
bond-miimon 100
bond-lacp-rate fast
bond-slaves none
bond-downdelay 200
bond-updelay 200
bond-xmit_hash_policy 1

Ubuntu Login Ekranı Guest Session Kaldırma – Removing Guest Session at Login in Ubuntu

Ubuntu açılış ekranında oluşturduğunuz kullanıcı dışında default olarak gelen Guest Session oturumuda bulunmaktadır ve bu kullanıcı ile şifresiz olarak login olabilirsiniz. Bu kullanıcı oldukça kısıtlı haklara sahip olmasına rağmen güvenlik endileşelerinden dolayı(hak yükseltme saldırılarına karşın) yada bir çok farklı olabilecek sebepten dolayı kaldırmak isteyebilirsiniz. Şimdi aşağıdaki yöntemle bu işlemi nasıl yapacağımıza bir göz atalım.

Default gelen ubuntu açılış ekranı yukarıdaki gibidir.

Şimdi aşağıdaki dosyayı(50-ubuntu.conf) edit edin. Ben nano kullandım.

> sudo nano /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf

Daha sonra aşağıdaki satırı ekleyip kaydedip çıkın.

> allow-guest=false

Ardından makinayı reboot edin.

Ve Login ekranının son hali.