În acest capitol vom utiliza vrnetlab, un framework pentru crearea de containere docker cu imagini de routere virtuale. Acest lucru ne permite să depășim configurațiile de rețele LAN cu care am lucrat până acum, să pornim un container care să funcționeze ca router, să putem configura device-ul și să înțelegem ce presupun acești pași.
Puteți urmări mai multe detalii despre vrnetlab și în acest film pe youtube: https://youtu.be/R_vCdGkGeSk?t=9m25s sau în acest tutorial.
Această unealtă se găsește ca submodul în reporitoy-ul de git (vezi fișierul gitmodules). Pentru a avea acces la cod, trebuie să rulați:
git submodule update --init --recursive
Posibil ca scripturile din repo să nu funcționeze fără BeautifulSoup și lxml, cel mai bine instalați-l pe host:
pip3 install beautifulsoup4 lxml
Vom folosi openwrt un firmare open source pentru embedded devices, în cazul nostru un router. Intrați în directorul corespunzător, downloadați imaginea openwrt și rulați comanda make build
:
cd vrnetlab/openwrt
wget https://downloads.openwrt.org/releases/18.06.2/targets/x86/64/openwrt-18.06.2-x86-64-combined-ext4.img.gz
make build
cd ../..
Comanda execută un script în python care downloadează imaginile necesare și construiește imaginea pentru docker. În cazul în care comanda returnează erori, este posibil ca framework-ul BeautifulSoup să nu fie instalat, puteți să îl instalați cu pip3 install bs4
.
În cele ce urmează trebuie să instalăm vr-xcon un program containerizat care permite crearea de legături bine definite între noduri și topologii de rețele.
# pull din docker registry https://hub.docker.com/
docker pull vrnetlab/vr-xcon
# retag images cu varianta simplificata
docker tag vrnetlab/vr-xcon:latest vr-xcon
docker tag vrnetlab/vr-openwrt:18.06.2 openwrt
În directorul vrnetlab se găsește un script care definește nișe funcții de shell ce pot fi utilizate pentru configurare ușoară. Pentru a acea acces în terminalul vostru la aceste comenzi, treubie să rulați:
cd vrnetlab
source vrnetlab.sh
Putem crea două routere OpenWRT cu următoarea topologie și să testăm conexiunea dintre ele folosind ping
Putem porni routerele individual folosind docker run
sau prin intermediul orchestratiei docker-compose.yml din capitolul4:
docker run -d --privileged --name openwrt1 openwrt
docker run -d --privileged --name openwrt2 openwrt
# sau
cd capitolul4
docker-compose up -d
Pentru a ne conecta la un router trebuie să folosim aplicația telnet pe portul 5000. Fie știm adresele IP ale containerelor din fisierul .yml sau le aflăm cu comanda: docker inspect -f '' ID_CONTAINER
Conectarea la routerul openwrt1 se face prin telnet:
telnet 198.166.0.1 5000
# sau
vrcons capitolul4_openwrt1_1
Trying 198.166.0.1...
Connected to 198.166.0.1.
Escape character is '^]'.
Apasam Ctrl + ] si enter pentru a tasta comenzile urmatoare:
Conform documentației openwrt, configurația LAN se definește pe o interfață numită br-lan: ifconfig br-lan
. Adresa IP a interfeței LAN este 10.0.0.15, dar configurația permanentă se definește prin:
uci show network.lan
# setam adresa IP pentru lan
uci set network.lan.ipaddr='10.0.0.15'
# configuram adresele IP pentru wan
uci show network.wan
uci set network.wan.proto='static'
uci set network.wan.ipaddr='10.10.10.1'
uci set network.wan.netmask='255.255.255.0'
# salvam modificarile retelei si dam restart
uci commit network
service network restart
Pentru a ieși din router tastăm Ctrl+]
apoi quit
.
Facem setări similare și pe routerul openwrt2:
telnet 198.166.0.2 5000
uci set network.lan.ipaddr='10.0.0.15'
uci set network.wan.proto='static'
uci set network.wan.ipaddr='10.10.10.2'
uci set network.wan.netmask='255.255.255.0'
uci commit network
service network restart
# Ctrl+] apoi quit
Comanda vrbridge este definită în scriptul vrnetlab/vrnetlab.sh și are ca rol pornirea unui container care prin vr-xcon care creează legăturile dintre cele două routere. Comanda are ca parametrii containerul1, interfața1, containerul2 și interfața 2:
vrbridge capitolul4_openwrt1_1 1 capitolul4_openwrt2_1 1
# echivalent cu:
docker run -d --privileged --name bridge-capitolul4_openwrt1_1-1-capitolul4_openwrt2_1-1 --net capitolul4_net --link capitolul4_openwrt1_1 --link capitolul4_openwrt2_1 vr-xcon --p2p capitolul4_openwrt1_1/1--capitolul4_openwrt2_1/1 --debug
Conectați-vă prin telnet la unul din routere și încercați să dați ping către celălalt router.