Jump to content

Mikrotik 1: Install GNS3 Arch Linux

From Haidhi Wiki

Halaman ini mencatat setup lab MikroTik virtual pakai GNS3 di Arch Linux, dari install sampai router pertama bisa nge-ping internet. Semua error yang muncul selama setup juga dicatat, lengkap dengan penyebab dan solusinya.

Tujuan

  • Punya lab MikroTik tanpa beli hardware.
  • Router virtual bisa diakses dari host (WebFig) dan bisa keluar ke internet.
  • Paham istilah dasar: CHR, appliance, template, libvirt, virbr0.

Konsep dan istilah

RouterOS dan CHR

RouterOS adalah sistem operasi router MikroTik. CHR (Cloud Hosted Router) adalah RouterOS versi x86 yang dijalankan sebagai VM.

  • Fiturnya sama dengan RouterOS di router fisik: bridge, NAT, firewall, VLAN, OSPF, BGP, VPN.
  • Ringan: cukup RAM beberapa ratus MB per router, jadi bisa jalan banyak router sekaligus.
  • Lisensi gratis dibatasi upload 1 Mbps per interface, tapi semua fitur tetap jalan. Cukup buat belajar.

Tools konfigurasi

Tool Keterangan
WebFig Antarmuka web bawaan RouterOS. Tanpa install, cukup buka IP router di browser. Hanya bisa konek lewat IP.
Winbox 4 Aplikasi native (Windows, macOS, Linux). Bisa konek lewat MAC address, berguna kalau router belum punya IP.
CLI Lewat console/telnet/SSH. Paling lengkap, dan yang dipakai di halaman ini.

GNS3: appliance vs template

  • Template: perangkat yang siap di-drag ke canvas.
  • Appliance: file resep (.gns3a) yang otomatis membuat template, lengkap dengan setting RAM, adapter, console, serta nama file dan checksum image yang dibutuhkan.
  • GNS3 tidak membawa image vendor. Image CHR tetap diambil dari mikrotik.com.

Di katalog appliance ada banyak model MikroTik (CCR, RB, CRS, dll). Buat belajar, cukup pakai MikroTik CHR.

libvirt dan virbr0

  • libvirt: lapisan manajemen virtualisasi di Linux (daemon libvirtd, tool virsh). Mengatur VM, storage, dan network virtual.
  • virbr0 (virtual bridge): switch virtual di host yang dibuat oleh network default libvirt. Fungsinya:
    • gateway lab (192.168.122.1),
    • DHCP via dnsmasq (range 192.168.122.x),
    • NAT supaya lab bisa keluar lewat internet host.

Node NAT di GNS3 memakai virbr0 ini.

CHR (GNS3) ── NAT node ── virbr0 (host) ── internet
                             │
                     Browser/Winbox di host

Efek ke host: koneksi internet asli tidak berubah. libvirt hanya menambah aturan NAT untuk 192.168.122.0/24, menyalakan ip_forward, dan menjalankan dnsmasq khusus virbr0. Pastikan subnet ini tidak bentrok dengan jaringan asli.

Instalasi

1. Upgrade sistem

sudo pacman -Syu

Wajib, untuk menghindari partial upgrade (lihat Masalah 1).

2. Dependensi

paru -S --needed qemu docker vpcs dynamips libvirt ubridge inetutils
  • --needed melewati paket yang sudah terinstall.
  • Kalau qemu-full sudah ada, qemu tidak perlu dipasang lagi.
  • vpcs, dynamips, ubridge dari AUR.
  • inetutils menyediakan telnet untuk console.

3. GNS3

paru -S gns3-server gns3-gui

4. Group user dan service

for g in ubridge libvirt kvm docker wireshark; do
  getent group $g >/dev/null && sudo gpasswd -a $USER $g || echo "group $g belum ada"
done

sudo systemctl enable --now libvirtd docker
reboot

Group wireshark baru ada setelah sudo pacman -S wireshark-qt. Setelah reboot, cek dengan groups.

5. Network default libvirt

sudo virsh net-list --all
# kalau "default" belum ada:
sudo virsh net-define /usr/share/libvirt/networks/default.xml
sudo virsh net-start default
sudo virsh net-autostart default
ip a show virbr0

Pakai sudo supaya virsh konek ke koneksi system, bukan session.

6. Console terminal

GNS3 default memakai xterm. Pilih salah satu:

  • sudo pacman -S xterm, atau
  • ganti di Edit → Preferences → General → Console applications, contoh:
kitty --title "%d" telnet %h %p
alacritty -t "%d" -e telnet %h %p
konsole -p tabtitle=%d -e telnet %h %p

(%h = host, %p = port, %d = nama node)

7. Template MikroTik CHR

  1. Jalankan gns3, pilih Run appliances on my local computer.
  2. File → New template → Install an appliance from the GNS3 server.
  3. Cari MikroTik CHR, klik Install.
  4. Lihat nama file dan versi yang diminta wizard (contoh: chr-7.22.1.img).
  5. Download Raw disk image versi yang sama dari mikrotik.com, lalu unzip:
unzip chr-7.22.1.img.zip
md5sum chr-7.22.1.img   # harus sama dengan checksum di wizard
  1. Import file .img (bukan .zip), lalu Finish.

Template muncul di panel Routers.

Hello World

Router pertama

  1. Drag MikroTik CHR ke canvas, klik kanan → Start.
  2. Double-click node untuk membuka console.
  3. Login admin, password kosong. Jawab n untuk lisensi, lalu set password baru.
/system identity set name=hello-world
/system resource print
/interface print

Prompt berubah jadi [admin@hello-world] >. Hello world selesai.

Sambung ke internet

  1. Drag node NAT ke canvas, sambungkan ke ether1 CHR.
  2. Di console CHR:
/ip dhcp-client print
/ip address print
/ip route print
/ping 192.168.122.1
/ping 8.8.8.8

Appliance CHR sudah membawa DHCP client di ether1, jadi menambah lagi akan memunculkan failure: dhcp-client on that interface already exists. Itu normal. (Kalau perlu menambah manual, parameternya disabled=no, bukan disable=no.)

Buka WebFig

ping -c 3 192.168.122.212   # ganti dengan IP CHR

Lalu buka http://192.168.122.212 di browser host. Kalau tidak terbuka, cek /ip service print dan pastikan www tidak disabled.

Masalah yang ditemui

Masalah 1: partial upgrade QEMU

Gejala

error: failed to prepare transaction (could not satisfy dependencies)
:: installing qemu-common (11.1.2-1) breaks dependency 'qemu-common=11.1.1-1' required by qemu-audio-alsa
...

Penyebab: repo sudah punya QEMU 11.1.2, sistem masih 11.1.1. Menginstall qemu menarik qemu-common baru, sedangkan puluhan paket QEMU lain masih mengunci versi lama. Arch tidak mendukung partial upgrade.

Solusi: sudo pacman -Syu, lalu ulangi install dependensi tanpa qemu (sudah ada lewat qemu-full).

Masalah 2: gns3server crash, No module named 'langchain'

Gejala

CRITICAL gns3server.server:331 Critical error while running the server: No module named 'langchain'
  File ".../gns3server/agent/gns3_copilot/gns3_client/gns3_project_info.py", line 39, in <module>
    from langchain.tools import BaseTool
ModuleNotFoundError: No module named 'langchain'

Penyebab: GNS3 versi baru (3.x alpha di AUR) meng-import modul fitur AI copilot/MCP tanpa pengaman, padahal dependensinya opsional dan tidak ikut terinstall. Pola serupa dilaporkan untuk modul mcp di GNS3 issue #2794.

Solusi:

  • Install dependensi yang kurang (python-langchain, python-langchain-core, python-mcp, dari repo atau AUR), lalu jalankan gns3server dan ulangi sampai tidak ada ModuleNotFoundError lagi.
  • Alternatif: bungkus import tersebut dengan try/except ModuleNotFoundError (hilang saat update), atau pakai versi stabil.

Masalah 3: import image CHR gagal

Gejala

Cannot install MikroTik CHR version 7.22.1: File chr-7.22.1.img with checksum a67290634f489071eae2fd99dcadba86 not found
The file is compressed with 'zip', it must be uncompressed first
Could not upload image chr-7.22.1.img: File '/home/haidhi/GNS3/images/QEMU/chr-7.22.1.img' already exists

Penyebab:

  • Yang di-import file .zip, bukan .img hasil unzip.
  • Sudah ada file dengan nama sama dari percobaan sebelumnya, sehingga GNS3 menolak menimpa.
  • Wizard appliance mencocokkan nama file dan checksum secara persis.

Solusi

file ~/GNS3/images/QEMU/chr-7.22.1.img
md5sum ~/GNS3/images/QEMU/chr-7.22.1.img
# kalau salah:
rm ~/GNS3/images/QEMU/chr-7.22.1.img*
unzip chr-7.22.1.img.zip && md5sum chr-7.22.1.img

Lalu ulangi wizard dan import file .img. Kalau versi yang diminta sudah tidak tersedia, buat template QEMU manual (lihat catatan).

Masalah 4: console tidak terbuka, xterm tidak ada

Gejala

Could not start Telnet console with command 'xterm -T "MikroTikCHR-1" -e "telnet localhost 5000"': [Errno 2] No such file or directory: 'xterm'

Penyebab: GNS3 default memakai xterm, yang tidak terinstall di Arch.

Solusi: install xterm atau ganti console command (lihat langkah 6).

Masalah 5: NAT interface virbr0 is missing

Gejala

Error while creating node from template: NAT interface virbr0 is missing, please install libvirt

Penyebab: libvirtd sudah jalan, tapi network default belum dinyalakan, sehingga virbr0 belum ada. Daemon hidup ≠ network hidup.

Solusi: langkah 5. Kalau net-start gagal, cek apakah dnsmasq dan iptables-nft/nftables sudah terpasang.

Catatan: baris log Libvirt doesn't support VirtualBox API version ... tidak berbahaya.

Kenapa virbr0 statusnya DOWN?

virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> ... state DOWN

NO-CARRIER berarti belum ada perangkat yang tersambung ke bridge. Begitu node NAT di GNS3 aktif, statusnya berubah jadi UP. Normal.

Masalah 6: CHR dapat IP, tapi ping internet timeout

Gejala

0 D 192.168.122.212/24  192.168.122.0  ether1  main
/ping 8.8.8.8
  sent=9 received=0 packet-loss=100%

DHCP jalan (IP didapat), tapi traffic keluar tidak tembus.

Penyebab: Docker mengatur policy chain FORWARD menjadi DROP, sehingga traffic dari virbr0 dibuang sebelum di-NAT keluar.

Diagnosis

sysctl net.ipv4.ip_forward          # harus 1
sudo iptables -S FORWARD | head     # cari: -P FORWARD DROP

Solusi: izinkan traffic virbr0 di chain DOCKER-USER (chain yang memang disediakan Docker untuk aturan user):

sudo iptables -I DOCKER-USER -i virbr0 -j ACCEPT
sudo iptables -I DOCKER-USER -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  • Aturan pertama: izinkan traffic yang masuk dari lab.
  • Aturan kedua: izinkan balasan yang kembali ke lab.

Aturan ini hilang setelah reboot atau restart Docker. Jalankan ulang sebelum nge-lab, atau buat permanen nanti.

Catatan: template manual

Kalau tidak memakai appliance:

qemu-img convert -f raw -O qcow2 chr-*.img chr.qcow2

Edit → Preferences → QEMU → QEMU VMs → New:

  • Binary: qemu-system-x86_64, RAM: 256 MB, disk: chr.qcow2
  • Console: telnet
  • Adapter: 4+, tipe virtio-net-pci (ganti e1000 kalau interface tidak muncul)
  • Advanced: centang Use as a linked base VM

Ringkasan

Masalah Penyebab Solusi
Dependency QEMU rusak Partial upgrade pacman -Syu
No module named 'langchain' Dependensi opsional GNS3 alpha tidak terinstall Install modul yang kurang
Image CHR tidak ditemukan Import .zip / file lama tertinggal / checksum beda Hapus file lama, unzip, import .img
xterm tidak ada Console default GNS3 Install xterm / ganti console command
virbr0 is missing Network default belum start virsh net-start default
Ping internet timeout Docker FORWARD DROP Aturan DOCKER-USER untuk virbr0