A következő címkéjű bejegyzések mutatása: vlan. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: vlan. Összes bejegyzés megjelenítése

2012-02-26

VLAN-ok kezelése MikroTiken

Vannak bizonyos megoldások a MikroTik RouterOS-en, amelyek, hát... legalábbis furcsának tűnnek egyéb network OS-ekhez képest, az egyik ilyen a VLAN-ok kezelése. Nem létezik olyasmi RouterOS alatt, hogy access port vagy trunk port, az van, amit összedrótozgatunk. Az alábbi parancsok például VLAN 1-3-ig, tagged VLAN kezelést biztosítanak az ether1 interfészen:
/interface vlan
add name="VLAN1" vlan-id=1 interface=ether1 disabled=no
add name="VLAN2" vlan-id=2 interface=ether1 disabled=no
add name="VLAN3" vlan-id=3 interface=ether1 disabled=no
Persze ezzel önmagában sokra nem megyünk, hiszen valahová tovább is kell kapcsolni ezeket a VLAN-okat, mondjuk access portokra. A következő döbbenet akkor éri a kezdő mikrotikest (például engem is), amikor kiderül, hogy amit mindenhol máshol access portnak hívnak, az itt tulajdonképpen nincs, de amit tehetünk, hogy mégis legyen, az sem az, hogy VLAN-okba tesszük a portokat, hanem:
/interface bridge
add name="BR1" disabled=no
add name="BR2" disabled=no
add name="BR3" disabled=no
/interface bridge port
add bridge=BR1 interface=ether2 disabled=no
add bridge=BR1 interface=ether3 disabled=no
add bridge=BR2 interface=ether4 disabled=no
add bridge=BR2 interface=ether5 disabled=no
add bridge=BR3 interface=ether6 disabled=no
add bridge=BR3 interface=ether7 disabled=no
Amint az a példából látható, a BR1 nevű bridge-hez az ether2-3, illetve a wlan1 port tartozik, a BR2-höz a ether4-5, a BR3-hoz pedig az ether6-7. Az itt definiált portcsoportok különálló VLAN-okként viselkednek, de természetesen az égvilágon semmi közük nincs az ether1 interfészen létrehozott trönkhöz, és az azon élő három tagged VLAN-hoz (némiképp emlékeztet egyébként mindez az autonóm Cisco AP-ken használatos BVI bridge group interfészekre). Az uplinken bejövő tagged VLAN-ok és a BR1, BR2, BR3 bridge-ek között úgy hozhatunk létre kapcsolatot, hogy a VLAN neveinkhez tartozó virtuális interfészeket szintén bepakoljuk a bridge-ekbe:
/interface bridge port
add bridge=BR1 interface=VLAN1  disabled=no
add bridge=BR2 interface=VLAN2  disabled=no
add bridge=BR3 interface=VLAN3  disabled=no
Ezzel eljutottunk oda, hogy az ether1-en bejövő tagged adatok megtalálják az útjukat az adott VLAN-on belül a MikroTik eszközre kapcsolt hostokig. De itt még nincs vége, ez csak az a módszer, ami minden MikroTik-en működik, egyes RouterBOARD-oknál ettől eltérő megoldást is lehet használni, attól függően, hogy milyen switch chip található a NYÁK-on. A RouterOS ugyanis nem fedi el a hardveres lehetőségeket, vannak hardverspecifikus parancsok a VLAN-ok kezelésére. A wiki.mikrotik.com-on található egy táblázat, ebből ki kell keresni, hogy a MikroTik eszközünkben milyen switch chip található, hogy támogatja-e a chip a port tükrözést, mekkora CAM táblát tud kezelni (MikroTik esetén ezt host table-nek hívják), vagy éppen azt, hogy hány VLAN-nal képes megbirkózni, és utána készíthetünk az adott switch chipre szabott VLAN konfigurációt, ami más RouterBOARD-on működésképtelen lehet. Beteges, nem igaz?

2011-01-27

NMS host multi-VLAN környezetben

Sok VLAN-os környezetben, különösen ha nincs inter-VLAN routing, vagy ha nem minden VLAN között van layer3-ban kapcsolat, bármikor jól jöhet egy olyan, szigorúan diagnosztikára használt host, amelyik minden VLAN-ba be tud kukucskálni. A komolyabb, szerverekbe való hálózati kártyákon persze már hosszú évek óta ott a VLAN-ok támogatása a Windows Server OS-re, így elvileg Windowsból is készíthetünk ilyen network monitoring hostot, de Windows alatt elég nehézkes már 20 ilyen VLAN interfész kezelése is, különösen ha mondjuk csak 16-ot tud kezelni a windowsos driver. Aztán persze minden VLAN interfészhez külön gondoskodnunk kell a megfelelő route-okról, ügyelnünk kell arra, hogy egyik interfészen se vágja felül egy kósza DHCP-s beállítás a route-okat, és akkor még nem is említettük az átlátható tűzfalazást, szóval Linuxnak kell ennek lennie.

Mostanában Ubuntu/Debian vonalon mozgolódok leginkább, így a konfigurációs példa ilyen rendszerekhez lesz igazítva. Gondolom, azzal nagyjából mindannyian egyetértünk, hogy egy ilyen Linux rendszert kizárólag a legszükségesebb összetevőkkel, X és desktop környezet nélkül kell telepítenünk. Hardver szinten csak a hálókártyát emelném ki, egy megbízható, a VLAN taggelést is kezelni képes kártyára lesz szükségünk (pl. Intel szerver NIC-ek, de a PRO/Desktop sem rossz), a különféle USB-s meg Via, Realtek és hasonló rémségeket viszont felejtsük el, inkább bele se kezdjünk, igen alattomos hibákat tud okozni VLAN környezetben például ha 1500 bájtnál vágják az Ethernet keretet.

Ha sikerült felkonfigurálnunk egy trönk portot valamelyik switchen, akkor a konfiguráció már alapvetően csak az "/etc/network/interfaces" fájl módosítgatásából áll. Különösebb magyarázat helyett jöjjön egy példa, a célunk, hogy egy Linux segítségével az alábbi layer3-as topológia minden egyes VLAN-jába bejárásunk legyen:


A 2-es VLAN az első szervezeti egység publikus hálózata, a 3-as VLAN ugyanezen szervezeti egység belső hálózata, a 4-es VLAN a másik szervezeti egység publikus hálózata, az 5-ös ugyanezen egység belső hálózata, amelyre még közvetlenül becsatlakozik egy távoli telephely. A két szervezet belső hálózata közt nincs semmilyen összeköttetés (viszont ugyanazokon a fizikai switcheken osztoznak). Egy ilyen képzeletbeli topológiához az alábbi beállításokat használhatjuk az "/etc/network/interfaces" fájlban:

auto lo eth0.3
iface lo inet loopback
iface eth0 inet dhcp

# Szervezet1 public - VLAN2
iface eth0.2 inet static
hw-mac-address aa:aa:aa:aa:00:02
address 2.2.2.3
netmask 255.255.255.240
gateway 2.2.2.1

# Szervezet1 private - VLAN3
iface eth0.3 inet static
hw-mac-address aa:aa:aa:aa:00:03
address 10.3.3.2
netmask 255.255.255.0

# Szervezet2 public - VLAN4
iface eth0.4 inet static
hw-mac-address aa:aa:aa:aa:00:04
address 4.4.4.3
netmask 255.255.255.240
gateway 4.4.4.1

# Szervezet2 private - VLAN5
iface eth0.5 inet static
hw-mac-address aa:aa:aa:aa:00:05
address 10.5.5.3
netmask 255.255.255.0
up route add -net 10.10.10.0 netmask 255.255.255.0 gw 10.5.5.2
down route del -net 10.10.10.0 netmask 255.255.255.0 gw 10.5.5.2

Mindenképp kiemelt figyelemmel kezeljük, hogy a Linuxon ne legyen engedélyezve az IP forwarding, azaz ne routeoljuk össze a különböző VLAN-okat (/etc/sysctl.conf). A példa első sorában látható, hogy az eth0 fizikai interfészen bootolás után csak az eth0.3 lesz fent, a natív/default VLAN (eth0) be van ugyan állítva DHCP-re, de inaktív, ahogy a többi tagged VLAN interfész is az. Tehát a belső hálózatok közül a VLAN3-ban tudunk feljelentkezni a multi-VLAN hostunkra. Az eth0.2 vagy az eth0.4 felhúzásakor (pl.: ifup eth0.2) beállítódik egy default route az internet felé, így hozzáférünk bármilyen internetes hosthoz a Linuxról direkben, NAT nélkül. Értelemszerűen egyszerre nem érdemes mindkét internetes interfészt up-ban tartani. Amint lekapcsoljuk ezen interfészeket (ifdown eth0.2) újra csak a VLAN3-ból hoazzáférhető a Linux hostunk. A VLAN5 interfész szintén változtat a route-okon, amikor felhúzzuk , ám itt specifikusan csak egyetlen subnetet adunnk a route táblához, csak annyit, amennyi a VLAN5-ön keresztül csatlakozó távoli telephely eléréséhez szükséges. A VLAN interfészek egyedi, a VLAN ID-t is magában foglaló MAC címe természetesen nem kötelező, ha nem állítjuk át, akkor a fizikai interfész MAC-címét fogja használni minden virtuális interfészen.

Mire jó mindez? Diagnosztikai célokra például nem rossz. Bármelyik VLAN-on el tudjuk éri a hostokat konzolból, sőt szükség esetén SSH-val áthozhatunk magunknak ezt-azt más VLAN-okból anélkül, hogy a normál route-olást felborítanánk. Bármikor egyetlen helyről fel tudjuk mérni az egyébként közvetlenül nem összekapcsolt VLAN-okban a hostok számát nmap-pel, tshark-kal belenézhetünk akármelyik VLAN broadcast forgalmába. Meg tudjuk mondani az 5-ös VLAN-ban dolgozó kollegának, hogy vajon azért nem éri el a bérelt vonal túloldalán lévő szervert, mert megszakadt a bérelt vonal vagy csak azért, mert nem dugta be a gépébe a patchkábelt, és még sorolhatnám.

Azt viszont minden körülmények közt érdemes szem előtt tartani, hogy nem megfelelő biztonsági beállításokkal hatalmas réseket lehet nyitni hálózatunk védelmén egy ilyen konfigurációval.

2011-01-24

Multi-VLAN bridge site-to-site VPN tunneleken Vyattával és OpenVPN-nel

Többféle megközelítése lehetséges a VLAN-ok telephelyek közötti átvitelének, ebben a posztban egy, a Vyattában nem túl régóta meglévő opcióval, az OpenVPN-nel esek neki a problémának. Alapvetően tesztről van szó, és mivel nem akartam túlságosan elbonyolítani, ezért a tesztkörnyezetben a teljes layer 2 egyetlen switchen lakik, ezen az egy switchen van az egyik telephely két VLAN-ja, a másik telephely két VLAN-ja, és persze a WAN kapcsolatot helyettesítő VLAN is. Layer 3-as funkciók (a tesztklienseket leszámítva) csak a Vyatta hostokon találhatók, ezekben csupán egyetlen NIC van, így minden interfész vagy VLAN interfész lesz vagy valamilyen egyéb virtuális interfész. A cél, hogy a két telephely között a kliensek számára transzparens layer2-es bridge épüljön fel az alábbi topológiával:


A bemutatandó módszer lehetővé teszi a VLAN ID átírást, és mivel a tesztkörnyezet layer 2-ben csupán egyetlen switch, szükség is lesz erre, de éles környezetben természetesen lehet ugyanazokat a VLAN ID-ket használni a kapcsolat mindkét oldalán. V1 és V2 lesz a két Vyatta teszt host, mindkettő egyetlen fizikai interfészen keresztül kapja meg a tagged VLAN-okat. V1 esetében ez a VLAN1, VLAN2, VLAN3, az ezeknek megfelelő interfészek értelemszerűen: eth0.1, eth0.2, eth0.3. A beállítások hasonlóak V2 esetén is, ám itt a VLAN2 átalakul VLAN20-ra a VLAN3 pedig VLAN30-ra.

Mielőtt ténylegesen belekezdenénk a VPN konfigurációba, állítsuk be a legalapvetőbb dolgokat! Szükség lesz egy VLAN1 interfészre, azon IP-re, SSH-ra, és a hostnév beállítása sem árt (a prompt csak egy kijelentkezés-bejelentkezés után vált V1-re az alapértelmezett "vyatta"-ról):
vyatta@vyatta:~$ configure
[edit] 
vyatta@vyatta# set interfaces ethernet eth0 vif 1 address 10.1.1.1/24
[edit]
vyatta@vyatta# set system host-name V1
[edit]
vyatta@vyatta# set service ssh        
[edit]
vyatta@vyatta# commit 
Restarting OpenBSD Secure Shell server: sshd.
[edit]
vyatta@vyatta# save
Saving configuration to '/opt/vyatta/etc/config/config.boot'...
Done
A továbblépés előtt hasonló  alapbeállítást igényel a V2-es Vyatta is. Ha megvagyunk, akkor jöhet a VPN: a site-to-site tunnelek felhúzásához az új OpenVPN-es Vyatta parancsokat fogjuk használni, és az egyszerűség kedvéért PSK-ra építünk. Ha jobban meggondolom, annyira azért nem új az OpenVPN a Vyattában, valamikor tavaly év elején került bele. Akárhogy is, a topológia megvalósításához két külön OpenVPN tunnelre lesz szükségünk, ezért a V1 alapbeállításai után az első feladat két kulcs létrehozása a V1-en, majd e két kulcs eljuttatása V2-re is. A kulcsok generálása a "vpn openvpn-key generate <fájlnév>" paranccsal történik:
vyatta@V1:~$ vpn openvpn-key generate /root/vtun0.key
vyatta@V1:~$ cat /root/vtun0.key  
cat: /root/vtun0.key: Permission denied
vyatta@V1:~$ sudo cat /root/vtun0.key
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
0cbcd00265518db1fd8b4ded2e721396
2ee1ef306d1163b82df0b478462ae35b
5764e128b8c6f15931c2ad0d94f1a477
c7aab38ca570cc20b0aeb8da8056dd27
d70d4bdf9b705af8cfe2380f57a7c840
ae24f6a9a1f13d5da1ebc18025b8d575
dc4634625c051bfbf976b72a8f35bca5
238bd80f371df2bac0f48ccd26968917
9b86c7067bf6a927c217f81d6f6b6840
7e133cc4fc677175a5702f841b11be4e
8c56c0cfc08497d1e599162757ec848b
26f670842245af40f45670b3ef257adc
784aa1f6b1c27c83e969aab0edca8b6b
dead67a4bad7630f18838cb0871b1449
a686356a001e4d3c34ecc8743f7c6067
95027528e178fb73994241e6348c3977
-----END OpenVPN Static key V1-----
vyatta@V1:~$ 
Az első paranccsal legeneráltuk az OpenVPN PSK-t és azt a "/root/vtun0.key" fájlba mentettük. Tulajdonképpen mindegy is, hogy hová mentjük, a fájl "root:root","600" jogokkal jön létre, tehát kizárólag a root felhasználó tudja írni-olvasni, másoknak semmilyen jogosultsága nincs a fájlra, és ez jól is van így. A példában ezért nem működik elsőre a fájl tartalmának kiírása, másodszorra viszont rootként megyünk, sudo-val, ezért nincs ilyen probléma. A "vtun0.key"-hez hasonlóan generáltassunk egy "vtun1.key"-t is, ez lesz a másik tunnelhez a PSK. Ha megvannak a kulcsok, akkor SCP-vel átmásolhatjuk őket a V2-re (figyelem: a kulcsok csak a root számára olvashatók, viszont az SSH PermitRootLogin no-val fut, "sudo -i"-vel tudunk bash shellt nyitni rootként a megoldáshoz). Persze SCP helyett másolhatjuk vágólapon keresztül is a kulcsokat vagy USB-n, a lényeg, hogy ugyanazok a kulcsok legyenek fent mindkét Vyattán.

Ezek után létrehozhatjuk a V1-en az első site-to-site bridge kapcsolatot. Készítünk egy "br0" nevű bridge interfészt, amelynek a tagjai az "eth0.2" és a "vtun0" lesznek, majd beállítjuk az OpenVPN paramétereket. OpenVPN esetén szeretem kihasználni az IPSec-től eltérő adottságokat, ilyen például a Blowfish kódolás (bf128), ami - ha pusztán a szoftveres implementációkat vizsgáljuk, márpedig a Vyatta esetén csak ilyenünk van - minden létező teszt szerint gyorsabb az AES-nél, az öregecskedő 3DES-t pedig nem is érdemes egy lapon említeni vele. A "br0" és a "vtun0" beállítását a következő parancsokkal végezhetjük el a V1-en:
set interfaces bridge br0
set interfaces ethernet eth0 vif 2
set interfaces ethernet eth0 vif 2 bridge-group bridge br0
set interfaces openvpn vtun0 bridge-group bridge br0
set interfaces openvpn vtun0 encryption bf128
set interfaces openvpn vtun0 hash sha1
set interfaces openvpn vtun0 mode site-to-site
set interfaces openvpn vtun0 remote-host 10.1.1.2
set interfaces openvpn vtun0 shared-secret-key-file /root/vtun0.key
Alapvetően rendkívül hasonló lesz a "br1" és a "vtun1" is, azt az apróságot leszámítva, hogy itt az OpenVPN által alapértelmezetten használt egyetlen portot UDP 1194-ről eggyel feljebb, az UDP 1195-re tesszük mindkét oldalon (így külön datagram socketre épül a vtun1 és a vtun0), és persze az interfész nevek mások lesznek:
set interfaces bridge br1
set interfaces ethernet eth0 vif 3
set interfaces ethernet eth0 vif 3 bridge-group bridge br1
set interfaces openvpn vtun1 bridge-group bridge br1
set interfaces openvpn vtun1 encryption bf128
set interfaces openvpn vtun1 hash sha1
set interfaces openvpn vtun1 local-port 1195
set interfaces openvpn vtun1 mode site-to-site
set interfaces openvpn vtun1 remote-host 10.1.1.2
set interfaces openvpn vtun1 remote-port 1195
set interfaces openvpn vtun1 shared-secret-key-file /root/vtun1.key
A sok pötyögés után jöhet a "commit" majd a "save", és a V1-en készen is vagyunk. A V2 konfigurációja alig tér el a V1-től, "vtun0" esetén "vif2" helyett "vif20", "10.1.1.2" helyett pedig "10.1.1.1" szükséges. A V2 "vtun1" pedig "vif3" helyett "vif30"-at használ, illetve itt is 1-re végződik a VPN peer IP-je. Említettem az elején: nem feltétlenül kell átírni a V2-es Vyattán a VLAN ID-ket, a tesztkörnyezet azonban nálam csak egyetlen switchet tartalmazott layer2-ben. Ha készen vagyunk a beállításokkal, a VPN kapcsolatok állapotát a "show interfaces openvpn", illetve a "show interfaces openvpn detail" paranccsal ellenőrizhetjük, A bridge-ek állapotát a "show bridge br0" vagy "show bridge br1" paranccsal kérhetjük le.