Uruchomienie OpenWrt jako wirtualnego obrazu w MikroTik na RouterOS
Ostatnia zmiana: 2013-11-26 18:43

Metarouter jest systemem wirtualizacji zastosowanym w systemie operacyjnym urządzeń MikroTik, czyli RouterOS. Można na nim uruchomić m.in. OpenWrt. Szczegóły proces uruchomienia i konfiguracji opisuje angielskojęzyczne wiki MikroTika: http://wiki.mikrotik.com/wiki/Manual:Metarouter, dostępne jest także tłumaczenie na polskim wiki. Poniżej przedstawiono szybki proces konfiguracji w RouterBOARD RB2011-UAS z RouterOS v5.22.

Pobieranie obrazu

MikroTik udostępnia specjalne łatki umożliwiające samodzielną budowę wymaganych obrazów. Jednakże można także posłużyć się udostępnionymi gotowymi obrazami. Dla wspomnianego urządzenia (platforma mipsbe) należy pobrać ten plik. Jest to dość stary build (w chwili pisania - r20828, trunk/kamikaze), jednakże pozwala na zapoznanie się z działaniem systemu.
Pobrany plik należy przesłać do urządzenia wykorzystując WebFig (menu Files) lub po prostu skopiować do routera poleceniem scp:


    $ scp Pobrane/openwrt-mr-ppc-rootfs.tgz admin@192.168.88.1:

Tworzenie nowego systemu

Logujemy się do MT, tworzymy nową instancję systemu. Określono tu także ilość dostępnej ilości pamięci RAM dla wirtualki (32MB).


    $ telnet 192.168.88.1

    Login: admin
    Password:

    MMM MMM KKK TTTTTTTTTTT KKK
    MMMM MMMM KKK TTTTTTTTTTT KKK
    MMM MMMM MMM III KKK KKK RRRRRR OOOOOO TTT III KKK KKK
    MMM MM MMM III KKKKK RRR RRR OOO OOO TTT III KKKKK
    MMM MMM III KKK KKK RRRRRR OOO OOO TTT III KKK KKK
    MMM MMM III KKK KKK RRR RRR OOOOOO TTT III KKK KKK

    MikroTik RouterOS 5.22 (c) 1999-2012 http://www.mikrotik.com/

    [admin@MikroTik] >
    [admin@MikroTik] > metarouter
    [admin@MikroTik] /metarouter>
    [admin@MikroTik] /metarouter> import-image file-name=openwrt-mr-mips-rootfs.tgz memory-size=32
    [admin@MikroTik] /metarouter> print
    Flags: X - disabled
    # NAME MEMORY-SIZE DISK-SIZE USED-DISK STATE
    0 mr3 32MiB unlimited 5140kiB running

Konfiguracja interfejsu sieciowego

W tym przypadku przyjęto najprostsze rozwiązanie - należy utworzyć wirtualny interfejs i zrobić bridge pomiędzy nim a istniejącym interfejsem fizycznym MT. Należy odczytać listę interfejsów MT:


    [admin@MikroTik] > /interface print
    Flags: D - dynamic, X - disabled, R - running, S - slave
    # NAME TYPE MTU L2MTU MAX-L2MTU
    0 sfp1-gateway ether 1500 1598 4074
    1 ether1-gateway ether 1500 1598 4074
    2 ether2 ether 1500 1598 4074
    3 ether3 ether 1500 1598 4074
    4 ether4 ether 1500 1598 4074
    5 R ether5 ether 1500 1598 4074
    6 ether6-master-local ether 1500 1598 2028
    7 ether7-slave-local ether 1500 1598 2028
    8 ether8-slave-local ether 1500 1598 2028
    9 ether9-slave-local ether 1500 1598 2028
    10 ether10-slave-local ether 1500 1598 2028
    11 R bridge-local bridge 1500 1598

W tym przypadku był to bridge-local. Tworzymy więc nowy interfejs wirtualny dla naszego OpenWrt


    [admin@MikroTik] /metarouter> interface add virtual-machine=mr3 type=dynamic dynamic-bridge=bridge-local

Należy teraz podłączyć się do uruchomionego obrazu i zmienić adres interfejsu lan na np. 192.168.88.2


    [admin@MikroTik] /metarouter> console 0

    [Ctrl-A is the prefix key]

    root@OpenWrt:/# uci set network.lan.ipaddr=192.168.88.2
    root@OpenWrt:/# uci commit
    root@OpenWrt:/# /etc/init.d/network restart


Poniżej bootlog działającej maszyny wirtualnej OpenWrt:


root@OpenWrt:/# dmesg
Linux version 2.6.31.10 (maris@bumba) (gcc version 4.3.3 (GCC) ) #1 Tue Apr 13 10:46:14 EEST 2010
CPU revision is: 0001800a (MIPS 4Kc)
Determined physical RAM map:
User-defined physical RAM map:
    memory: 01000000 @ 00000000 (usable)
Initrd not found or empty - disabling initrd
Zone PFN ranges:
        Normal 0x00000000 -> 0x00001000
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
                0: 0x00000000 -> 0x00001000
On node 0 totalpages: 4096
free_area_init_node: node 0, pgdat c031dba0, node_mem_map c035a000
        Normal zone: 32 pages used for memmap
        Normal zone: 0 pages reserved
        Normal zone: 4064 pages, LIFO batch:0
Built 1 zonelists in Zone order, mobility grouping off. Total pages: 4064
Kernel command line: init=/etc/preinit console=hvc0 board=vm mem=16M
PID hash table entries: 64 (order: 6, 256 bytes)
Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes
Memory: 12808k/16384k available (1881k kernel code, 3576k reserved, 287k data, 120k init, 0k highmem)
NR_IRQS:128
console [hvc0] enabled
Calibrating delay loop... 262.14 BogoMIPS (lpj=524288)
Mount-cache hash table entries: 512
NET: Registered protocol family 16
bio: create slab <bio-0> at 0
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 512 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 512 bind 512)
TCP reno registered
NET: Registered protocol family 1
MFS init
squashfs: version 4.0 (2009/01/31) Phillip Lougher
Registering mini_fo version $Id$
msgmni has been set to 25
io scheduler noop registered
io scheduler deadline registered (default)
TCP westwood registered
NET: Registered protocol family 17
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
VFS: Mounted root (metafs filesystem) readonly on device 0:10.
Freeing unused kernel memory: 120k freed
Please be patient, while OpenWrt loads ...
device eth0 entered promiscuous mode
br-lan: port 1(eth0) entering forwarding state
PPP generic driver version 2.4.2
ip_tables: (C) 2000-2006 Netfilter Core Team
NET: Registered protocol family 24
nf_conntrack version 0.5.0 (256 buckets, 1024 max)
root@OpenWrt:/# cat /proc/cpuinfo
system type : Mikrotik MetaROUTER
processor : 0
cpu model : MIPS 4Kc V0.10
BogoMIPS : 262.14
wait instruction : yes
microsecond timers : yes
tlb_entries : 16
extra interrupt vector : yes
hardware watchpoint : yes, count: 1, address/irw mask: [0x0000]
ASEs implemented : mips16
shadow register sets : 1
core : 0
VCED exceptions : not available
VCEI exceptions : not available