Hazirlayan Mustafa Erer - erer@sim.com.tr  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 erer@sim.com.tr adresine mail atabilirsiniz.

NOT: Kaynak gösterilmek şartıyla kullanılabilir.