Routing adalah proses menemukan jalur optimal untuk pengiriman paket pada jaringan TCP / IP. Perangkat apa pun yang terhubung ke jaringan IPv4 berisi tabel proses dan rute.
Artikel ini bukan HOWTO, ini menggambarkan perutean statis di RouterOS sebagai contoh, saya sengaja menghilangkan sisa pengaturan (misalnya, srcnat untuk mengakses Internet), jadi untuk memahami materi ini memerlukan tingkat pengetahuan tertentu tentang jaringan dan RouterOS.
Switching dan Routing

Switching adalah proses pertukaran paket dalam satu segmen Layer2 (Ethernet, ppp, ...). Jika perangkat melihat bahwa penerima paket berada pada subnet Ethernet yang sama seperti itu, ia mengenali alamat mac menggunakan protokol arp dan mentransmisikan paket secara langsung, melewati router. Koneksi ppp (point-to-point) hanya dapat memiliki dua anggota dan paket selalu dikirim ke alamat 0xff yang sama.
Routing adalah proses pengiriman paket antar segmen Layer2. Jika perangkat ingin mengirim paket, penerima yang berada di luar segmen Ethernet, ia akan melihat tabel peruteannya dan meneruskan paket tersebut ke gateway yang tahu ke mana harus mengirim paket lebih lanjut (atau mungkin tidak tahu, pengirim asli paket tersebut tidak mengetahui hal ini).
Cara termudah untuk mempertimbangkan router adalah sebagai perangkat yang terhubung ke dua atau lebih segmen Layer2 dan mampu mengirimkan paket di antara mereka, menentukan rute optimal dari tabel routing.
Jika semuanya jelas bagi Anda atau Anda sudah mengetahuinya, maka baca terus. Saya sangat menyarankan agar orang lain membaca artikel kecil tapi sangat komprehensif.
Routing di RouterOS dan PacketFlow
Hampir semua fungsi yang berkaitan dengan routing statis ada dalam paket sistem . Paket perutean menambahkan dukungan untuk algoritma perutean dinamis (RIP, OSPF, BGP, MME), Filter Perutean, dan BFD.
Menu utama untuk mengonfigurasi perutean: [IP]->[Route]
. Skema yang kompleks mungkin memerlukan pelabelan awal dari paket dengan label perutean di: [IP]->[Firewall]->[Mangle]
(rantai PREROUTING
dan OUTPUT
).
Ada tiga tempat di PacketFlow di mana keputusan dibuat tentang perutean paket IP:

- Paket routing yang diterima oleh router. Pada tahap ini, diputuskan bahwa paket akan pergi ke proses lokal atau akan dikirim lebih jauh ke jaringan. Paket transit menerima Antarmuka Output
- Merutekan paket keluar lokal. Paket keluar menerima Antarmuka Output
- Langkah perutean tambahan untuk paket keluar memungkinkan Anda untuk mengubah keputusan perutean di
[Output|Mangle]
- Jalur paket di blok 1, 2 tergantung pada aturan di
[IP]->[Route]
- Jalur paket di langkah 1, 2 dan 3 tergantung pada aturan di
[IP]->[Route]->[Rules]
- Jalur paket di blok 1, 3 dapat dipengaruhi menggunakan
[IP]->[Firewall]->[Mangle]
RIB, FIB, Routing Cache

Basis informasi routing
Basis di mana rute dari protokol routing dinamis dikumpulkan, rute dari ppp dan dhcp, rute statis dan terhubung. Basis data ini berisi semua rute kecuali yang difilter oleh administrator.
Berdasarkan konvensi , kita dapat mengasumsikan bahwa [IP]->[Route]
menampilkan RIB.
Penerusan basis informasi

Pangkalan tempat rute terbaik dari RIB pergi. Semua rute dalam FIB aktif dan digunakan untuk meneruskan paket. Jika rute menjadi tidak aktif (dinonaktifkan oleh administrator (sistem), atau antarmuka melalui mana paket harus dikirim tidak aktif), rute akan dihapus dari FIB.
Untuk membuat keputusan tentang perutean, data paket IP berikut digunakan dalam tabel FIB:
- Alamat sumber
- Alamat tujuan
- Sumber antarmuka
- Tanda rute
- ToS (DSCP)
Masuk ke paket FIB melalui tahapan berikut:
- Apakah paket dirancang untuk proses router lokal?
- Apakah paket termasuk dalam sistem PBR atau aturan pengguna?
- Jika demikian, paket tersebut dikirim ke tabel routing yang ditentukan.
- Paket dikirim ke tabel utama
Secara konvensi , kita dapat mengasumsikan bahwa [IP]->[Route Active=yes]
menampilkan FIB.
Cache perutean
Mekanisme untuk rute caching. Perute ingat ke mana paket-paket itu dikirim, dan jika ada yang serupa (mungkin dari koneksi yang sama), itu memulai mereka di sepanjang rute yang sama, tanpa memeriksa di FIB. Cache rute dihapus secara berkala.
Untuk administrator, RouterOS tidak memiliki sarana untuk melihat dan mengelola Cache Routing, tetapi dengan itu Anda dapat menonaktifkannya di [IP]->[Settings]
.
Mekanisme ini telah dihapus dari kernel Linux 3.6, tetapi kernel 3.3.5 masih digunakan di RouterOS, mungkin Routing cache adalah salah satu alasannya.
Rute Tambahkan Dialog
[IP]->[Route]->[+]

- Subnet tempat Anda ingin membuat rute (default: 0.0.0.0/0)
- Gateway IP atau antarmuka ke mana paket akan dikirim (mungkin ada beberapa, lihat ECMP di bawah)
- Memeriksa Ketersediaan Gateway
- Jenis rekaman
- Jarak (metrik) untuk rute
- Tabel perutean
- IP untuk paket keluar lokal melalui rute ini
- Tujuan Lingkup dan Lingkup Target ditulis di akhir artikel.
Bendera rute

- X - Rute dinonaktifkan oleh administrator (
disabled=yes
) - A - Rute digunakan untuk mengirimkan paket.
- D - Rute ditambahkan secara dinamis (BGP, OSPF, RIP, MME, PPP, DHCP, Connected)
- C - Subnet terhubung langsung ke router
- S - Rute Statis
- r, b, o, m - Rute ditambahkan oleh salah satu protokol routing dinamis
- B, U, P - Rute pemfilteran (membuang paket alih-alih mengirim)
Apa yang harus ditentukan di gateway: ip-address atau antarmuka?
Sistem ini memungkinkan Anda untuk menentukan keduanya, sementara itu tidak bersumpah dan tidak memberikan petunjuk jika Anda melakukan sesuatu yang salah.
Alamat IP
Alamat gateway harus dapat diakses melalui Layer2. Untuk Ethernet, ini berarti bahwa router harus memiliki alamat IP dari subnet yang sama pada salah satu antarmuka aktif, untuk ppp - bahwa alamat gateway terdaftar pada salah satu antarmuka aktif sebagai alamat subnet.
Jika kondisi ketersediaan untuk Layer2 tidak terpenuhi, rute dianggap tidak aktif dan tidak termasuk dalam FIB.
Antarmuka
Semuanya lebih rumit dan perilaku router tergantung pada jenis antarmuka:
- PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN *) koneksi mengasumsikan bahwa hanya ada dua peserta dan paket akan selalu dikirim ke gateway untuk transmisi, jika gateway mendeteksi bahwa itu adalah penerima itu sendiri, itu akan mentransfer paket ke proses lokalnya.

- Ethernet berasumsi ada banyak peserta dan akan mengirim permintaan ke antarmuka arp dengan alamat penerima paket, ini adalah perilaku yang diharapkan dan cukup normal untuk rute yang terhubung.
Tetapi ketika Anda mencoba menggunakan antarmuka sebagai rute untuk subnet jarak jauh, Anda mendapatkan situasi berikut: rute aktif, ping lewat ke gateway, tetapi tidak mencapai penerima dari subnet yang ditentukan. Jika Anda melihat antarmuka melalui sniffer, Anda akan melihat permintaan arp dengan alamat dari subnet jarak jauh.


Cobalah untuk menentukan alamat ip sebagai gateway bila memungkinkan. Pengecualian adalah rute yang terhubung (dibuat secara otomatis) dan antarmuka PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN *).
OpenVPN tidak mengandung header PPP, tetapi Anda dapat menggunakan nama antarmuka OpenVPN untuk membuat rute.
Rute yang lebih spesifik
Aturan dasar routing. Rute yang menggambarkan subnet yang lebih kecil (dengan subnet mask terbesar) memiliki prioritas yang lebih tinggi ketika memutuskan perutean paket. Posisi entri dalam tabel perutean tidak terkait dengan pemilihan - aturan dasar lebih spesifik.

Semua rute dari skema yang ditentukan aktif (terletak di FIB), karena arahkan ke subnet yang berbeda dan tidak saling bertentangan.
Jika salah satu gateway menjadi tidak tersedia, rute terkait akan dianggap tidak aktif (dihapus dari FIB) dan paket akan dicari dari rute yang tersisa.
Sebuah rute dengan subnet dari 0.0.0.0/0 kadang-kadang diberikan arti khusus dan disebut "Rute Default" atau "gerbang pilihan terakhir". Bahkan, tidak ada yang ajaib di dalamnya dan itu hanya mencakup semua alamat IPv4 yang mungkin, tetapi nama-nama ini menggambarkan tujuannya dengan baik - ini menunjukkan gateway tempat untuk meneruskan paket yang tidak ada rute lain yang lebih akurat.
Subnet mask maksimum yang mungkin untuk IPv4 adalah / 32; rute ini menunjuk ke host tertentu dan dapat digunakan dalam tabel routing.
Memahami Rute yang Lebih Spesifik sangat penting untuk setiap perangkat TCP / IP.
Jarak
Jarak (atau Metrik) diperlukan untuk penyaringan administratif rute ke satu subnet yang dapat diakses melalui beberapa gateway. Rute dengan metrik lebih rendah dianggap prioritas dan akan berada di FIB. Jika rute dengan metrik yang lebih rendah berhenti aktif, maka di FIB akan diganti dengan rute dengan metrik yang lebih tinggi.

Jika ada beberapa rute ke subnet yang sama dengan metrik yang sama, router hanya akan menambahkan satu dari mereka ke tabel FIB, dipandu oleh logika internalnya.
Metrik dapat mengambil nilai dari 0 hingga 255:

- 0 - Metrik untuk rute yang terhubung. Jarak 0 tidak dapat ditetapkan oleh administrator
- 1-254 - Metrik tersedia untuk administrator untuk menetapkan rute. Metrik dengan nilai lebih rendah diutamakan.
- 255 - Metrik tersedia untuk administrator untuk menetapkan rute. Tidak seperti 1-254, rute dengan metrik 255 selalu tetap tidak aktif dan tidak termasuk dalam FIB
- Metrik khusus. Rute yang diterima dari protokol routing dinamis memiliki nilai metrik standar
Periksa gateway
Periksa gateway - ekstensi MikroTik RoutesOS untuk memeriksa ketersediaan gateway melalui icmp atau arp. Sekali setiap 10 detik (tidak dapat diubah), permintaan dikirim ke gateway, jika jawabannya tidak datang dua kali, rute dianggap tidak tersedia dan dihapus dari FIB. Jika gateway pemeriksaan telah menonaktifkan rute verifikasi, rute berlanjut dan rute menjadi aktif kembali setelah satu pemeriksaan berhasil.

Check gateway menonaktifkan entri yang dikonfigurasi dan semua entri lainnya (di semua tabel routing dan rute ecmp) dengan gateway yang ditentukan.
Secara umum, periksa gateway berfungsi dengan baik jika tidak ada masalah dengan paket loss ke gateway. Check gateway tidak tahu apa yang terjadi dengan komunikasi di luar gateway yang diperiksa, untuk ini diperlukan alat tambahan: skrip, perutean berulang, protokol perutean dinamis.
Sebagian besar VPN dan protokol tunneling berisi alat bawaan untuk memeriksa aktivitas koneksi, memungkinkan gateway check untuk mereka adalah beban tambahan (tetapi sangat kecil) pada kinerja jaringan dan perangkat.
Rute ECMP
Equal-Cost Multi-Path - mengirim paket ke penerima menggunakan beberapa gateway secara bersamaan dengan algoritma Round Robin.
Rute ECMP dibuat oleh administrator dengan menetapkan beberapa gateway untuk satu subnet (atau otomatis, jika ada dua rute setara OSPF).

ECMP digunakan untuk menyeimbangkan beban antara dua saluran, secara teori, jika ada dua saluran dalam rute ecmp, maka untuk setiap paket saluran keluar harus berbeda. Tetapi mekanisme cache Routing mengirimkan paket-paket dari koneksi di sepanjang rute yang paket pertama pergi, sebagai hasilnya, kita mendapatkan semacam balancing pemuatan per-koneksi.
Jika Anda menonaktifkan Routing Cache, maka paket-paket dalam rute ECMP akan dibagi dengan benar, tetapi ada masalah dengan NAT. Aturan NAT hanya memproses paket pertama dari koneksi (sisanya diproses secara otomatis) dan situasinya adalah bahwa paket dengan satu alamat sumber pergi dari antarmuka yang berbeda.

Periksa gateway (bug RouterOS) tidak berfungsi dalam rute ECMP. Tetapi Anda dapat mengatasi batasan ini jika Anda membuat rute tambahan untuk verifikasi, yang akan menonaktifkan entri dalam ECMP.
Penyaringan Routing
Opsi Type menentukan apa yang harus dilakukan dengan paket:
- unicast - kirim ke gateway (antarmuka) yang ditentukan
- blackhole - jatuhkan paket
- larangan, tidak terjangkau - jatuhkan paket dan kirim pesan icmp ke pengirim
Penyaringan biasanya digunakan ketika Anda perlu mengamankan pengiriman paket dengan cara yang salah, tentu saja Anda dapat memfilter ini melalui firewall.
Beberapa contoh
Untuk memperbaiki hal-hal dasar tentang perutean.
Router Rumah Khas

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1
- Rute statis ke 0.0.0.0/0 (rute default)
- Rute yang terhubung pada antarmuka dengan penyedia
- Rute yang terhubung pada antarmuka LAN
Router Rumah PPPoE Khas

- Rute statis ke rute default, ditambahkan secara otomatis sejak ini ditunjukkan dalam properti koneksi
- Rute yang terhubung untuk koneksi PPP
- Rute yang terhubung pada antarmuka LAN
Router rumah khas dengan dua penyedia dan redundansi

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 distance=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2
- Rute statis ke rute default melalui penyedia pertama dengan metrik 1 dan memeriksa ketersediaan gateway
- Rute statis ke rute default melalui penyedia kedua dengan metrik 2
- Rute yang Terhubung
Lalu lintas ke 0.0.0.0/0 melewati 10.10.10.1, sementara gateway ini tersedia, jika tidak maka beralih ke 10.20.20.1
Skema seperti itu dapat dianggap reservasi saluran, tetapi bukan tanpa kekurangan. Jika terjadi kerusakan di luar gerbang penyedia (misalnya, di dalam jaringan operator), router Anda tidak akan mengetahuinya dan akan terus mempertimbangkan rute yang aktif.
Router rumah khas dengan dua penyedia, redundansi dan ECMP

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1,10.20.20.1 distance=1
- Rute statis untuk memeriksa chack gateway
- Rute ECMP
- Rute yang Terhubung
Rute untuk memeriksa biru (warna rute tidak aktif), tetapi ini tidak mengganggu pengoperasian gateway pemeriksaan. Dalam versi saat ini (6.44) RoS, prioritas otomatis diberikan ke rute ECMP, tetapi lebih baik untuk menambahkan rute uji ke tabel routing lainnya (opsi routing-mark
)
Tidak akan ada peningkatan kecepatan pada Speedtest dan situs serupa lainnya (ECMP membagi lalu lintas dengan koneksi, bukan paket), tetapi aplikasi P2P harus memuat lebih cepat.
Memfilter melalui Routing

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 add dst-address=192.168.200.0/24 gateway=10.30.30.1 distance=1 add dst-address=192.168.200.0/24 gateway=10.10.10.1 distance=2 type=blackhole
- Rute statis ke rute default
- Rute statis ke 192.168.200.0/24 melalui terowongan ipip
- Melarang rute statis ke 192.168.200.0/24 melalui router penyedia
Opsi penyaringan di mana lalu lintas terowongan tidak pergi ke router penyedia ketika antarmuka ipip dinonaktifkan. Skema seperti itu jarang diperlukan, karena dimungkinkan untuk menerapkan pemblokiran melalui firewall.
Routing loop
Routing loop adalah situasi di mana paket berjalan di antara router sebelum ttl berakhir. Biasanya itu adalah konsekuensi dari kesalahan konfigurasi, dalam jaringan besar diperlakukan oleh implementasi protokol routing dinamis, dalam jaringan kecil - dengan hati-hati.
Itu terlihat seperti ini:

Contoh (paling sederhana) cara mendapatkan hasil yang serupa:

Contoh loop Routing tidak memiliki penggunaan praktis, tetapi itu menunjukkan bahwa router tidak tahu tentang tabel routing tetangga mereka.
Routing Basis Kebijakan dan Tabel Routing Tambahan
Saat memilih rute, router hanya menggunakan satu bidang dari header paket (Alamat Dst) - ini adalah rute dasar. Perutean berdasarkan kondisi lain, seperti alamat sumber, jenis lalu lintas (ToS), penyeimbangan tanpa ECMP, merujuk ke Policy Base Routing (PBR) dan menggunakan tabel perutean tambahan.

Rute Lebih Spesifik adalah aturan dasar untuk memilih rute dalam tabel routing.
Secara default, semua aturan perutean ditambahkan ke tabel utama. Administrator dapat membuat sejumlah tabel routing dan paket rute tambahan sewenang-wenang. Aturan dalam tabel yang berbeda tidak saling bertentangan. Jika paket tidak menemukan aturan yang sesuai di tabel yang ditentukan, itu akan pergi ke tabel utama.
Contoh distribusi melalui Firewall:

- 192.168.100.10 -> 8.8.8.8
- Lalu lintas dari 192.168.100.10 menerima label via-isp1 di
[Prerouting|Mangle]
- Pada tahap Routing, dalam tabel via-isp1, sebuah rute dicari hingga 8.8.8.8
- Rute ditemukan, lalu lintas dikirim ke gateway 10.10.10.1
- 192.168.200.20 -> 8.8.8.8
- Lalu lintas dari 192.168.200.20 menerima label via-isp2 di
[Prerouting|Mangle]
- Pada tahap Routing, tabel via-isp2 mencari rute hingga 8.8.8.8
- Rute ditemukan, lalu lintas dikirim ke gateway 10.20.20.1
- Jika salah satu gateway (10.10.10.1 atau 10.20.20.1) menjadi tidak tersedia, maka paket akan pergi ke tabel utama dan akan mencari rute yang sesuai di sana
Masalah terminologi
RouterOS memiliki masalah terminologi tertentu.
Ketika bekerja dengan aturan dalam [IP]->[Routes]
tabel routing ditunjukkan, meskipun dikatakan bahwa label:

Dalam [IP]->[Routes]->[Rule]
semuanya benar, dalam label kondisi dalam tindakan tabel:

Cara mengirim paket ke tabel routing tertentu
RouterOS menyediakan beberapa alat:
- Aturan dalam
[IP]->[Routes]->[Rules]
- Merute label (
action=mark-routing
) di [IP]->[Firewall]->[Mangle]
- VRF
Aturan [IP]->[Route]->[Rules]
Aturan diproses secara berurutan, jika paket cocok dengan kondisi aturan, itu tidak melangkah lebih jauh.
Aturan Perutean memungkinkan Anda untuk memperluas kemampuan perutean, tidak hanya mengandalkan alamat penerima, tetapi juga alamat sumber dan antarmuka tempat paket diterima.

Aturan terdiri dari kondisi dan tindakan:
- Ketentuan Mereka praktis mengulangi daftar tanda-tanda dimana paket diperiksa dalam FIB, hanya ToS yang hilang.
- Tindakan
- lookup - mengirim paket ke tabel
- lihat saja di tabel - kunci paket di dalam tabel, jika rute tidak ditemukan paket tidak akan pergi ke tabel utama
- drop - drop paket
- tidak dapat dijangkau - jatuhkan paket pemberitahuan pengirim
Dalam FIB, lalu lintas ke proses lokal diproses melewati aturan [IP]->[Route]->[Rules]
:

Menandai [IP]->[Firewall]->[Mangle]
Label rute memungkinkan Anda mengatur gateway untuk paket menggunakan hampir semua kondisi Firewall:

Praktis, karena tidak semuanya masuk akal, dan beberapa mungkin bekerja tidak stabil.

Ada dua cara untuk menandai suatu paket:
- Setel tanda perutean segera
- Pertama-tama atur tanda-koneksi , kemudian berdasarkan pada tanda-koneksi atur tanda-rute
Dalam sebuah artikel tentang firewall, saya menulis bahwa opsi kedua lebih disukai karena mengurangi beban pada cpu, dalam hal penandaan rute - ini tidak sepenuhnya benar. Metode penandaan ini tidak selalu setara dan biasanya digunakan untuk menyelesaikan berbagai masalah.
Contoh Penggunaan
Kami menyampaikan contoh-contoh menggunakan Routing Basis Kebijakan, jauh lebih mudah untuk menunjukkan kepada mereka mengapa semua ini diperlukan.
MultiWAN dan respons lalu lintas keluar (Output)
Masalah umum dengan konfigurasi MultiWAN: Mikrotik dapat diakses dari Internet hanya melalui penyedia "aktif".

Tidak masalah bagi router apa IP permintaan datang, ketika menghasilkan respons, itu akan mencari rute dalam tabel routing, di mana rute melalui isp1 aktif. Selanjutnya, paket seperti itu kemungkinan besar akan disaring dalam perjalanan ke penerima.
Poin menarik lainnya. Jika "simple" source nat dikonfigurasi pada antarmuka ether1: /ip fi nat add out-interface=ether1 action=masquerade
paket akan menuju jaringan dengan src. address = 10.10.10.100, yang akan semakin memperburuk situasi.
Ada beberapa cara untuk memperbaiki masalah, tetapi salah satu dari mereka akan memerlukan tabel routing tambahan:

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping distance=1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping distance=2 add dst-address=0.0.0.0/0 gateway=10.10.10.1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 routing-mark=over-isp2
Menggunakan [IP]->[Route]->[Rules]
Tentukan tabel routing yang akan digunakan untuk paket dengan IP Sumber yang ditentukan.

/ip route rule add src-address=10.10.10.100/32 action=lookup-only-in-table table=over-isp1 add src-address=10.20.20.200/32 action=lookup-only-in-table table=over-isp2
Anda dapat menggunakan action=lookup
, tetapi untuk lalu lintas keluar lokal, opsi ini sepenuhnya mengecualikan koneksi dari antarmuka yang salah.
- Sistem menghasilkan paket respons dengan Src. Alamat: 10.20.20.200
- Pada tahap Routing Decision (2),
[IP]->[Routes]->[Rules]
dicentang dan paket dikirim ke tabel routing over-isp2 - Sesuai dengan tabel routing, paket harus dikirim ke gateway 10.20.20.1 melalui antarmuka ether2

Metode ini tidak memerlukan Pelacak Koneksi yang berfungsi, tidak seperti menggunakan tabel Mangle.
Menggunakan [IP]->[Firewall]->[Mangle]
Koneksi dimulai dengan paket yang masuk, jadi kami menandainya ( action=mark-connection
), untuk paket keluar dari koneksi yang ditandai kami mengatur label rute ( action=mark-routing
).

/ip firewall mangle # add chain=input in-interface=ether1 connection-state=new action=mark-connection new-connection-mark=from-isp1 add chain=input in-interface=ether2 connection-state=new action=mark-connection new-connection-mark=from-isp2 # add chain=output connection-mark=from-isp1 action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=output connection-mark=from-isp2 action=mark-routing new-routing-mark=over-isp2 passthrough=no
ip, dst-address
.
- ether2 .
[INPUT|Mangle]
from-isp2 - Src. Address: 10.20.20.200
- Routing Decision(2) 10.20.20.1 ether1.
[OUTPUT|Filter]
[OUTPUT|Mangle]
from-isp2 over-isp2- Routing Adjusment(3)
- 10.20.20.1 ether2

MultiWAN dst-nat
, ( web) .
/ip firewall nat add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether1 action=dst-nat to-address=192.168.100.100 add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether2 action=dst-nat to-address=192.168.100.100
, Firewall Mangle, :

/ip firewall mangle add chain=prerouting connection-state=new in-interface=ether1 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp1 add chain=prerouting connection-state=new in-interface=ether2 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp2 add chain=prerouting connection-mark=web-input-isp1 in-interface=ether3 action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=prerouting connection-mark=web-input-isp2 in-interface=ether3 action=mark-routing new-routing-mark=over-isp2 passthrough=no

NAT, .
MultiWAN
PBR vpn ( SSTP) .

:
/ip route add dst-address=0.0.0.0/0 gateway=192.168.100.1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=192.168.200.1 routing-mark=over-isp2 add dst-address=0.0.0.0/0 gateway=192.168.0.1 routing-mark=over-isp3 add dst-address=0.0.0.0/0 gateway=192.168.100.1 distance=1 add dst-address=0.0.0.0/0 gateway=192.168.200.1 distance=2 add dst-address=0.0.0.0/0 gateway=192.168.0.1 distance=3
:
/ip firewall mangle add chain=output dst-address=10.10.10.100 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp1 passtrough=no add chain=output dst-address=10.10.10.101 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp2 passtrough=no add chain=output dst-address=10.10.10.102 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp3 passtrough=no
NAT, Src. Address:
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade add chain=srcnat out-interface=ether2 action=masquerade add chain=srcnat out-interface=ether3 action=masquerade
:
- SSTP
- Routing Decision (2) , main. Src. Address ether1
[Output|Mangle]
- Routing Adjusment
- Src. Address ether1,
[Nat|Srcnat]
, :

Connection Tracker [Mangle]
[Srcnat]
, , Replay Dst. Address
NAT:

VPN ( ) :

, :
/ip route add dst-address=10.10.10.100 gateway=192.168.100.1 add dst-address=10.10.10.101 gateway=192.168.200.1 add dst-address=10.10.10.102 gateway=192.168.0.1
. , vpn , 6 [IP]->[Routes]
type=blackhole
. โ 3 [IP]->[Route]->[Rules]
.
, . :
/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2
[IP]->[Route]->[Rules]

/ip route rules add src-address=192.168.100.0/25 action=lookup-only-in-table table=over-isp1 add src-address=192.168.100.128/25 action=lookup-only-in-table table=over-isp2
action=lookup
, main . โ .
[IP]->[Firewall]->[Mangle]
ip . . layer7, , , .

/ip firewall mangle add chain=prerouting src-address-list=users-over-isp1 dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 add chain=prerouting src-address-list=users-over-isp2 dst-address-type=!local action=mark-routing new-routing-mark=over-isp2
"" [IP]->[Route]->[Rules]
:
/ip route rules add routing-mark=over-isp1 action=lookup-only-in-table table=over-isp1 add routing-mark=over-isp2 action=lookup-only-in-table table=over-isp2
[IP]->[Firewall]->[Filter]
:
/ip firewall filter add chain=forward routing-mark=over-isp1 out-interface=!ether1 action=reject add chain=forward routing-mark=over-isp2 out-interface=!ether2 action=reject
dst-address-type=!local
dst-address-type=!local
(dns, winbox, ssh, ...). , , dst-address-table
.
[IP]->[Route]->[Rules]
, . , FIB [PREROUTING|Mangle]
main, . Routing Rules, User PBR .
[IP]->[Firewall]->[Mangle action=route]
[Prerouting|Mangle]
, :
/ip firewall mangle add chain=prerouting src-address=192.168.100.0/25 action=route gateway=10.10.10.1 add chain=prerouting src-address=192.168.128.0/25 action=route gateway=10.20.20.1
route
( [IP]->[Route]->[Rules]
). , action=route
action=mark-route
, ( passtrough
), .
wiki , .
PPC
Per Connection Classificator โ ECMP. ECMP (ECMP , Routing Cache ).
PCC ip , 32- . , . . , .

:
192.168.100.10: 192+168+100+10 = 470 % 3 = 2 192.168.100.11: 192+168+100+11 = 471 % 3 = 0 192.168.100.12: 192+168+100+12 = 472 % 3 = 1
src.address :

# /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=3 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2 add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=1 routing-mark=over-isp3 # /ip firewall mangle add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/0 action=mark-connection new-connection-mark=conn-over-isp1 add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/1 action=mark-connection new-connection-mark=conn-over-isp2 add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/2 action=mark-connection new-connection-mark=conn-over-isp3 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp1 action=mark-routing new-routing-mark=over-isp1 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp2 action=mark-routing new-routing-mark=over-isp2 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp3 action=mark-routing new-routing-mark=over-isp3
: in-interface=br-lan
, action=mark-routing
.
Check ping โ , IP , , , check ping .
BGP, .
, ip , , google dns: 8.8.8.8. 8.8.4.4. Mikrotik .
Multihop BGP MikroTik, check gateway .
scope/target scope :

- scope main target scope
- ,
- connected
, :

- 1-3 connected ,
- 4-6 connected ""
RIB, FIB : 0.0.0.0/0 via 10.10.10.1 on ether1
.

:

/ip route add dst-address=0.0.0.0/0 gateway=8.8.8.8 check-gateway=ping distance=1 target-scope=10 add dst-address=8.8.8.8 gateway=10.10.10.1 scope=10 add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2
, 10.10.10.1:

Check gateway ping' 8.8.8.8, ( main) 10.10.10.1.
10.10.10.1 8.8.8.8, , ( ping) 8.8.8.8 10.10.10.1:

ether1, , 8.8.8.8 :

, NetWatch 8.8.8.8. NetWatch . :
/ip route add dst-address=8.8.8.8 gateway=10.20.20.1 distance=100 type=blackhole

, NetWatch .
, 8.8.8.8 , dns .
Virtual Routing and Forwarding (VRF)
VRF , ( MPLS) L3VPN :

VRF Mikrotik , ip VRF, .
vrf:

/ip route vrf add interfaces=ether1 routing-mark=vrf1 add interfaces=ether2 routing-mark=vrf2 /ip address add address=192.168.100.1/24 interface=ether1 network=192.168.100.0 add address=192.168.200.1/24 interface=ether2 network=192.168.200.0
ether2 , ping vrf ( ), ping :

main ( vrf route leaking):

/ip route add distance=1 gateway=172.17.0.1@main routing-mark=vrf1 add distance=1 gateway=172.17.0.1%wlan1 routing-mark=vrf2
route leaking: : 172.17.0.1@main
: 172.17.0.1%wlan1
.
[PREROUTING|Mangle]
:

/ip firewall mangle add chain=prerouting in-interface=ether1 action=mark-connection new-connection-mark=from-vrf1 passthrough=no add chain=prerouting connection-mark=from-vrf1 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf1 passthrough=no add chain=prerouting in-interface=ether2 action=mark-connection new-connection-mark=from-vrf2 passthrough=no add chain=prerouting connection-mark=from-vrf2 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf2 passthrough=no

VRF netmap:

:
/ip route vrf add interfaces=ether1 routing-mark=vrf1 add interfaces=ether2 routing-mark=vrf2 /ip address add address=192.168.100.1/24 interface=ether1 network=192.168.100.0 add address=192.168.100.1/24 interface=ether2 network=192.168.100.0 add address=192.168.0.1/24 interface=ether3 network=192.168.0.0
firewall:
# /ip firewall mangle add chain=prerouting dst-address=192.168.101.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf1 passthrough=no add chain=prerouting dst-address=192.168.102.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf2 passthrough=no # netmap "" /ip firewall nat add chain=dstnat dst-address=192.168.101.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24 add chain=dstnat dst-address=192.168.102.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24
:
# route leaking, connected /ip route add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf1 add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf2
dhcp
VRF , ( dhcp client) .
vrf:
/ip route vrf add interface=ether1 routing-mark=over-isp1
( ) over-isp1 :
/ip firewall mangle add chain=output out-interface=!br-lan action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=prerouting in-interface=br-lan dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 passthrough=no
, :
/interface bridge add name=bare /ip route add dst-address=0.0.0.0/0 gateway=bare
Routing decision (2) [OUTPUT|Mangle]
, 0.0.0.0/0 main .

connected-in
dynamic-in
[Routing] -> [Filters]
( ) โ ( routing ), :
- connected-in โ connected
- dynamic-in โ PPP DCHP
, : distance, routing-mark, comment, scope, target scope, ...
- Routing Filters ( ), Routing Filters, . Routing Filters .
Routing Mark
. VPN . - :
# vpn default route /interface pptp-client add connect-to=XXXX add-default-route=yes default-route-distance=101 ... add connect-to=YYYY add-default-route=yes default-route-distance=100 ... # /routing filter add chain=dynamic-in distance=100 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn1 add chain=dynamic-in distance=101 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn2
, , vrf ppp , 0.0.0.0/0 main. .
Connected
:
/route filter add chain=connected-in prefix=192.168.100.0/24 action=reject
RouterOS :
[Tool]->[Torch]
โ/ip route check
โ ,/ping routing-table=<name>
/tool traceroute routing-table=<name>
โ pingaction=log
[IP]->[Firewall]
โ , packet flow,