Hazirlayan Mustafa Erer - [email protected] 07.06.2002
FreeBSD 4.5 işletim sistemi üzerinde vlan ve dummynet (bandwidth)
Örneğin 3 tane makina var biz makinaların aynı switch'e bağlı olmasını fakat birbirlerini görememesini ve bandwidth kısıtlaması getirmek istiyoruz
Switch'e bağlı her makinaya farklı subnetlerden birer ip veriyoruz.
Bir Isp düşünelim 3 adet Co-Location müşterisi var ve müşterileri aynı switch kullanıyor. Amacımız security bakımından bunların
kendilerine verilen ip dışında başka bir ip almasını ve ağ komşularından birbirlerini görmesini engellemek
Kullandığım switch ve router
Cisco 3524XL switch
Cisco 3640 router.
ve FreeBSD 4.5 kurlu bir pc ve pc ye takılı 2 adet ethernet, bunlardan bir tanesi
802.1q desteklemesi gerekiyor.
1.Co-Location müşterisinin kullanacağı network 192.168.0.0/30
2.Co-Location müşterisi kullanacağı network 192.168.0.4/30
3.Co-Location müşterisi kullanacağı network 192.168.0.8/30
Öncelikle FreeBSD olan makinaya 2 adet ethernet takmamız gerekiyor. Bunlardan birtanesi routera bakacak diğeri ise
switch'e bakacak ve switch'e bağlı olanın vlan(802.1q) desteklemesi gerekiyor.
FreeBSD makinamızda yeni bir kerneli derlememiz gerekiyor. (http://www.FreeBSD.org/FAQ/kernelconfig.html)
dummynet + vlan desteği için
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_FORWARD
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_DEFAULT_TO_ACCEPT
options DUMMYNET #bandwith icin.
pseudo-device vlan 3 # IEEE 802.1Q VLAN Support
Burdaki 3 rakamı kaç adet vlan kullanmak istediğimizi belirtiyor.
Kerneli derleyip yeni kernel ile makinayı açtıktan sonra şimdi de switch'te gerekli konfigurasyonları yapmamız gerekiyor.
Ben burda Cisco 3524XL switch kullandım.
Co-Location müşterilerini sırasıyla switch 2,3,4 cu portlarına takıyoruz.
Gerekli olan vlanları oluşturuyoruz.
3524xl#vlan database
3524xl(vlan)#vtp transparent
3524xl(vlan)#vlan 2
VLAN 2 added:
Name: VLAN0002
3524xl(vlan)#vlan 3
VLAN 2 added:
Name: VLAN0003
3524xl(vlan)#vlan 4
VLAN 2 added:
Name: VLAN0004
3524xl(vlan)#exit
APPLY completed.
Exiting....
Şimdi ise 2,3,4 cu portlara vlan konfigurasyanu yapıyoruz.
3524xl#configure terminal
3524xl(config)#int fastEthernet 0/2
3524xl(config-if)#switchport access vlan 2
3524xl(config-if)#spanning-tree portfast
3524xl(config-if)#exit
3524xl(config)#int fastEthernet 0/3
3524xl(config-if)#switchport access vlan 3
3524xl(config-if)#spanning-tree portfast
3524xl(config-if)#exit
3524xl(config)#int fastEthernet 0/4
3524xl(config-if)#switchport access vlan 4
3524xl(config-if)#spanning-tree portfast
3524xl(config-if)#exit
Şimdi ise FreeBSD makinanın bağlı olduğu switch'in birinci port için konfigürasyon yapıyoruz.
3524xl(config)#int fastEthernet 0/1
3524xl(config-if)#switchport mode trunk
3524xl(config-if)#switchport trunk encapsulation dot1q
3524xl(config-if)#switchport trunk allowed vlan all
Not:Cisco'nun değişik model switchlerinde ve farklı marka switchlerde konfigürasyon farklı olabilir.
FreeBSD işletim sistemi üzerinde her ethernet kartı vlan desteklemiyor. Ben 3Com 3c905B-TX ethernet kartı kullandım
Aşağıdaki adreste destekleyen ethernet kartlarının listesini bulabilirsiniz.
http://www.FreeBSD.org/cgi/man.cgi?query=vlan&sektion=4&manpath=FreeBSD+4.5-RELEASE
FreeBSD'de gerekli vlan konfigürasyonları.
ifconfig xl0 up
ifconfig vlan0 create
ifconfig vlan0 vlan 2 vlandev xl0 mtu 1500 up
ifconfig vlan0 192.168.0.2 netmask 255.255.255.252
ifconfig vlan1 create
ifconfig vlan1 vlan 3 vlandev xl0 mtu 1500 up
ifconfig vlan1 192.168.0.6 netmask 255.255.255.252
ifconfig vlan2 create
ifconfig vlan2 vlan 4 vlandev xl0 mtu 1500 up
ifconfig vlan2 192.168.0.10 netmask 255.255.255.248
ifconfig dc0 192.168.0.13 netmask 255.255.255.252
buarada xl0 switch'e bakan ethernet dc0 router'a bakan ethernet
Yukarıdaki tanımlamaları her seferinde yapmamak için /etc/rc.local dosyasına yazabiliriz.
Şimdi ise bandwidth konfigürasyonları.
#cat /etc/rc.firewall
/sbin/ipfw -f flush
/sbin/ipfw add pipe 1 ip from 192.168.0/32 to any out via dc0
/sbin/ipfw add pipe 2 ip from any to 192.168.0./32 in via dc0
/sbin/ipfw pipe 1 config bw 80Kbit/s
/sbin/ipfw pipe 2 config bw 80Kbit/s
/sbin/ipfw add pipe 3 ip from 192.168.0.4/32 to any out via dc0
/sbin/ipfw add pipe 4 ip from any to 192.168.0.4/32 in via dc0
/sbin/ipfw pipe 3 config bw 140Kbit/s
/sbin/ipfw pipe 4 config bw 140Kbit/s
/sbin/ipfw add pipe 5 ip from 192.168.0.8/29 to any out via dc0
/sbin/ipfw add pipe 6 ip from any to 192.168.0.8/29 in via dc0
/sbin/ipfw pipe 5 config bw 80Kbit/s
/sbin/ipfw pipe 6 config bw 80Kbit/s
/sbin/ipfw add allow all from any to any
Her bir Co-Location müşteri için 80Kbit/s bir limit koydum. Bu limitleri [K|M]{bit/s|Byte/s} olarakta verebiliyoruz.
Ipfw ve Dumynet hakkında daha ayrıntılı bilgi için :
http://www.FreeBSD.org/cgi/man.cgi?query=ipfw&sektion=8&manpath=FreeBSD+4.5-RELEASE
Yalnız makinanın açılışında firewall rule larını çalıştırmak ve gateway enable etmek
için /etc/rc.conf satırına eklememiz gerekenler :
firewall_enable="YES"
gateway_enable="YES"
defaultrouter="192.168.0.14" # Bu ip yi routerin ethernet interface'ine vereceğiz.
Şimdi ise routerda yapmamız gereken route ve interface bilgileri.
backbone#conf t
backbone(config)#interface ethernet0/0
backbone(config-if)#ip addres 192.168.0.14 255.255.255.252
backbone(config-if)#exit
Route bilgilerini giriyoruz
backbone(config)#ip route 192.168.0.0 255.255.255.252 192.168.0.13
backbone(config)#ip route 192.168.0.4 255.255.255.252 192.168.0.13
backbone(config)#ip route 192.168.0.8 255.255.255.252 192.168.0.13
1.Co-Location müşterisinin kullanacağı ip adress=192.168.0.1 gateway=192.168.0.2 netmask=255.255.255.252
2.Co-Location müşterisinin kullanacağı ip adress=192.168.0.5 gateway=192.168.0.6 netmask=255.255.255.252
3.Co-Location müşterisinin kullanacağı ip adress=192.168.0.9 gateway=192.168.0.10 netmask=255.255.255.252
Ben burda sadece her Co-Location için 1 adet ip adresi verdim. Bu ip adresleri arttırılabilir.
Birde ping çekelim birinci Co-Location müşterisine bakalım bandwidth gerçekten çalışıyor mu?
PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: icmp_seq=0 ttl=126 time=17.656 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=126 time=14.282 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=126 time=18.569 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=126 time=3.215 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=126 time=13.317 ms
64 bytes from 192.168.0.1: icmp_seq=5 ttl=126 time=2.856 ms
64 bytes from 192.168.0.1: icmp_seq=6 ttl=126 time=13.303 ms
Aynı switch'e bağlı olmamıza rağmen ping paketlerindeki delay belli oluyor.
FreeBSD' ye ucd-snmp programını kurarak müşterilerinize mtrg ile hatlarını monitoring yapabilirsiniz.
Soru ve eleştirileriniz için [email protected] adresine mail atabilirsiniz.
NOT: Kaynak gösterilmek şartıyla kullanılabilir.