Dit artikel heeft eigenlijk 2 doelen: natuurlijk als doel het inzetten van Linux als een router, maar het eigenlijke doel was om een oefen-omgeving te creeeren samen met Cisco apparatuur.
Dat het een oefenomgeving is maakt ook tegelijkertijd dat de hele setup zeker voor een thuis omgeving eigenlijk veel te complex is, maar goed als oefening nuttig en ook nog eens heel leuk om op te zetten.
Omschrijving Setup
Als allereerste hebben we een Cisco 1721 router met 1 100mbit interface (FastEthernet0) die geconnecteerd is met een Cisco Catalyst WS-C2924-XL Switch.
Laten we eerst maar eens gaan kijken naar de router, de FastEthernet interface is verdeeld in 2 subinterfaces, een voor Vlan 1 en een voor Vlan 50.
interface FastEthernet0
no ip address
speed 100
full-duplex
!
interface FastEthernet0.1
encapsulation dot1Q 1 native
ip address 192.168.0.1 255.255.255.0
!
interface FastEthernet0.50
description HOME_LAN
encapsulation dot1Q 50
ip address 192.168.50.1 255.255.255.0
De router is verbonden met de interface FastEthernet0/2 van de switch, deze poort is uiteraard geconfigureerd als trunk poort
interface FastEthernet0/2
duplex full
speed 100
switchport trunk encapsulation dot1q
switchport mode trunk
Mijn pc is via eth0 geconnecteerd met FastEthernet 0/1, deze poort heeft verder geen speciale configuratie,
interface FastEthernet0/1
duplex full
speed 100
maar behoort bij Vlan 1: het default vlan.
interface VLAN1
ip address 192.168.0.2 255.255.255.0
no ip directed-broadcast
no ip route-cache
De pc zelf heeft als configuratie op eth0: 192.168.0.3 en op wlan0: 192.168.1.33
Dan is er nog een andere pc, die van mijn vriendin die geconnecteerd is op FastEthernet 0/3:
interface FastEthernet0/3
duplex full
speed 100
switchport access vlan 50
Het ip adres van mijn vriendin heeft als ip adres: 192.168.50.2
De bedoeling is nu dat iedereen elkaar kan bereiken, in principe kan met de setup zoals hier beschreven kan om maar een voorbeeld te geven de pc 192.168.50.2 zowel de 192.168.0.1 als de 192.168.50.1 pingen. We hebben hier te maken met een setup die we ook wel router-on-a-stick noemen. Wat niet lukt is ook nog eens de 192.168.1.33 of zelfs de 192.168.1.254 (gateway) bereiken. Daarvoor zullen we aan routering moeten gaan doen. En we doen dat met het Rip version 2 routing protocol.
Voor Cisco is dat eigenlijk behoorlijk simpel, op de router configureren we:
router rip
version 2
network 192.168.0.0
network 192.168.50.0
Met deze configuratie verteld de router met behulp van RIP welke netwerken hij kent.
Linux Rip
Maar nu moet de desktop pc nog vertellen wat hij weet. Dus we moeten een rip-daemon gaan configureren onder Linux. Onder Linux bestaat er een heel erg gaaf pakket aan routing-software: Quagga. Deze is met bijna elke distributie meegeleverd, onder Ubuntu installeer je die simpelweg met:
apt-get install quagga
En uiteraard moet er dan het nodige geconfigureerd worden. Allereerst openen we het bestand /etc/quagga/daemons in een editor, waarbij het de volgende inhoud moet krijgen:
zebra=yes
bgpd=no
ospfd=no
ospf6d=no
ripd=yes
ripngd=no
isisd=no
Er moet een bestand aangemaakt worden vtysh:
hostname naam-pc
service integrated-vtysh-config
username root nopassword
Dan maken we een bestand aan zebra.conf, met de volgende inhoud:
hostname naam-pc
password wachtwoord
enable password wachtwoord
Let overigens op dat je dezelfde hostname gebruikt als in vtysh.conf, alleen moet je nu ook een password en enable password aanmaken. Hetzelfde moet je ook weer doen met het aan te maken bestand ripd.conf:
hostname naam-pc
password wachtwoord
!
router rip
version 2
default-information originate
network 192.168.0.0/24
network 1921.68.1.0/24
Opvallend is hoe erg de syntax van Quagga lijkt op die van Cisco. Behalve dat we de twee netwerken bekend maken, propageren we ook de default gateway.
Nu gaan we Quagga starten:
/etc/init.d/quagga start
We kunnen overigens behalve door het bewerken van de eerder genoemde bestanden ook nu telnetten naar de daemons: naar poort 2601 voor Zebra (router) en 2602 voor Rip routing.
Dit gaan we ook nu doen om te controleren of een en ander werkt:
$ telnet localhost 2601
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, this is Quagga (version 0.99.11).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
Password:
frederik-desktop> sh ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
I - ISIS, B - BGP, > - selected route, * - FIB route
K>* 0.0.0.0/0 via 192.168.1.254, wlan0
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.0.0/24 is directly connected, eth0
C>* 192.168.1.0/24 is directly connected, wlan0
R>* 192.168.50.0/24 [120/2] via 192.168.0.1, eth0, 00:30:09
Ook op de Cisco router controleren:
sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is 192.168.0.3 to network 0.0.0.0
C 192.168.0.0/24 is directly connected, FastEthernet0.1
C 192.168.50.0/24 is directly connected, FastEthernet0.50
R 192.168.1.0/24 [120/1] via 192.168.0.3, 00:00:15, FastEthernet0.1
R* 0.0.0.0/0 [120/1] via 192.168.0.3, 00:00:15, FastEthernet0.1
en we zien dat alles in orde is !
Nu nog met behulp van iptables de internet toegang regelen:
echo "1" > /proc/sys/net/ipv4/ip_forward iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o wlan0 -s 192.168.50.0/255.255.255.0 -d 0/0 -j MASQUERADE
En het testen vanaf de Cisco router:
ping 212.100.160.51 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 212.100.160.51, timeout is 2 seconds: ..... Success rate is 0 percent (0/5) L4L_1721#ping Protocol [ip]: Target IP address: % Bad IP address L4L_1721#ping Protocol [ip]: Target IP address: 212.100.160.51 Repeat count [5]: Datagram size [100]: Timeout in seconds [2]: Extended commands [n]: y Source address or interface: 192.168.50.1 Type of service [0]: Set DF bit in IP header? [no]: Validate reply data? [no]: Data pattern [0xABCD]: Loose, Strict, Record, Timestamp, Verbose[none]: Sweep range of sizes [n]: Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 212.100.160.51, timeout is 2 seconds: Packet sent with a source address of 192.168.50.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 40/41/44 ms





