Multivan dan perutean pada Mikrotik RouterOS

Dengan koreksi dan penambahan 02/11/2020

Pendahuluan


Selain kesombongan, frekuensi pertanyaan yang menyedihkan tentang topik ini dalam kelompok-kelompok yang relevan dari komunitas telegram berbahasa Rusia mendorong saya untuk mengambil artikel itu. Artikel ini ditujukan untuk administrator pemula Mikrotik RouterOS (selanjutnya disebut ROS). Itu hanya mempertimbangkan multivan, dengan penekanan pada routing. Bonus mencakup pengaturan yang memadai minimal untuk memastikan operasi yang aman dan nyaman. Mereka yang mencari pengungkapan antrian tersebut, penyeimbangan muatan, vlan, jembatan, analisis mendalam multi-tahap tentang kondisi saluran dan sejenisnya - tidak dapat membuang waktu dan upaya membaca.

Sumber data


Sebagai subjek uji, router lima port Mikrotik dengan ROS versi 6.45+ dipilih. Ini akan merutekan lalu lintas antara dua jaringan area lokal (LAN1 dan LAN2) dan tiga penyedia (ISP1, ISP2, ISP3). Saluran ke ISP1 memiliki alamat "abu-abu" statis, ISP2 adalah "putih" diterima melalui DHCP, ISP3 adalah "putih" dengan otentikasi PPPoE. Diagram koneksi ditunjukkan pada gambar:



Tugasnya adalah mengkonfigurasi router MTK berdasarkan skema sehingga:

  1. Berikan peralihan otomatis ke penyedia cadangan. Penyedia utama adalah ISP2, cadangan pertama adalah ISP1, cadangan kedua adalah ISP3.
  2. Untuk mengatur akses LAN1 ke Internet hanya melalui ISP1.
  3. Memberikan kemampuan untuk merutekan lalu lintas dari jaringan lokal ke Internet melalui penyedia yang dipilih berdasarkan daftar alamat.
  4. Untuk memberikan kemungkinan layanan penerbitan dari jaringan area lokal ke Internet (DSTNAT)
  5. Konfigurasikan filter firewall untuk memberikan keamanan minimum yang cukup dari Internet.
  6. Router dapat mengeluarkan traffic sendiri melalui salah satu dari tiga penyedia, tergantung pada alamat sumber yang dipilih.
  7. Berikan perutean paket respons ke saluran asal mereka (termasuk LAN).

Komentar. Kami akan mengonfigurasi perute ā€œdari awalā€ untuk menjamin bahwa tidak ada kejutan dalam memulai konfigurasi ā€œdi luar kotakā€ yang berubah dari versi ke versi. Winbox dipilih sebagai alat konfigurasi, di mana perubahan akan ditampilkan secara visual. Pengaturan itu sendiri akan diatur oleh perintah di terminal Winbox. Koneksi fisik untuk konfigurasi adalah melalui koneksi langsung ke antarmuka Ether5.

Sebuah diskusi kecil tentang apa multivan itu, apakah itu masalah atau orang pintar yang cerdik menenun jaringan konspirasi di sekitar


Admin yang ingin tahu dan penuh perhatian, yang mengatur skema ini atau itu sendiri, tiba-tiba tiba-tiba menyadari bahwa itu berfungsi secara normal. Ya, ya, tanpa tabel perutean kustom Anda dan aturan rute lainnya, yang penuh dengan sebagian besar artikel tentang topik ini. Lihat itu?

Bisakah kita mengonfigurasi pengalamatan pada antarmuka dan gateway default? Ya:

Alamat dan gateway dengan distance = 2 dan check-gateway = ping terdaftar di ISP1 .
Pada ISP2, pengaturan default dhcp untuk klien adalah jarak, masing-masing, sama dengan satu.
Pada ISP3 dalam pengaturan pppoe klien dengan add-default-route = yes set default-route-distance = 3 .

Jangan lupa mendaftarkan NAT untuk hasilnya:

/ ip firewall nat add action = rantai masquerade = srcnat out-interface-list = WAN

Akibatnya, pengguna LAN bersenang-senang seal dimuat melalui penyedia ISP2 utama dan ada reservasi saluran menggunakan mekanisme gateway check . Lihat Catatan 1

Poin 1 dari tugas diimplementasikan. Di mana multivan dengan tag-nya? Tidak ...

Lebih jauh Anda perlu melepaskan klien tertentu dari LAN melalui ISP1:

/ ip firewall mangle add action = rute rantai = prerouting dst-address-list =! BOGONS \
passthrough = ya route-dst = 100.66.66.1 src-address-list = Via_ISP1
/ ip firewall mangle add action = rute rantai = prerouting dst-address-list =! BOGONS \
passthrough = tidak ada rute-dst = 100.66.66.1 src-address = 192.168.88.0 / 24

Item 2 dan 3 dari tugas diimplementasikan. Tag, perangko, aturan rute, di mana Anda?!

Perlu memberikan akses ke server OpenVPN favorit Anda dengan alamat 172.17.17.17 untuk klien dari Internet? Tolong:

/ ip cloud set ddns-enabled = yes

Kami memberikan hasil keluaran kepada klien sebagai sebuah pesta: " : masukkan [ip cloud get dns-name] "

Kami mendaftarkan penerusan port dari Internet:

/ ip firewall nat tambahkan aksi = dst-nat chain = dstnat dst-port = 1194 \
dalam-antarmuka-daftar = protokol WAN = udp ke-address = 172.17.17.17

Poin 4 sudah siap.

Kami menyiapkan firewall dan keamanan lainnya untuk poin 5, pada saat yang sama kami senang bahwa semuanya berfungsi untuk pengguna dan meraih wadah dengan minuman favorit ...
Ah! Terowongan masih dilupakan.

Klien l2tp yang dikonfigurasi sesuai dengan artikel yang di-google naik ke VDS Belanda tercinta? Ya
l2tp-server dengan IPsec rose dan klien dengan nama DNS dari IP Cloud (lihat di atas.) menempel? Ya
Bersandar, menyesap minuman, kami iseng memeriksa item 6 dan 7 dari masalahnya. Kami pikir - apakah kami membutuhkannya? Semuanya berfungsi seperti itu ... Jadi, jika itu tidak perlu, itu saja. Multivan diimplementasikan.

Apa itu multivan? Ini adalah koneksi beberapa saluran Internet ke satu router.

Anda tidak dapat membaca artikel lebih lanjut, karena apa yang bisa ada selain pamer penerapan diragukan?

Dengan mereka yang tetap, yang tertarik pada poin 6 dan 7 dari tugas, dan juga merasakan gatal perfeksionisme, kami menyelam lebih dalam.

Tugas paling penting dalam mengimplementasikan multivan adalah perutean lalu lintas yang benar. Yaitu: terlepas dari mana (atau yang) Lihat Catatan 3, saluran penyedia melihat rute default pada router kami, itu harus mengembalikan jawaban tepat ke saluran dari mana paket itu berasal. Tugasnya jelas. Di mana masalahnya? Memang, dalam jaringan lokal yang sederhana tugasnya sama, tetapi tidak ada yang mengganggu dengan pengaturan tambahan dan tidak merasa kesulitan. Perbedaannya adalah bahwa setiap node yang dirutekan di Internet dapat diakses melalui masing-masing saluran kami, dan tidak melalui yang sangat spesifik, seperti pada LAN sederhana. Tetapi "masalahnya" adalah bahwa jika kami menerima permintaan untuk alamat IP ISP3, maka dalam kasus kami jawabannya akan melalui saluran ISP2, karena gateway default diarahkan ke sana. Itu akan pergi dan dibuang oleh penyedia sebagai salah. Kami memutuskan masalahnya. Bagaimana cara mengatasinya?

Solusinya dibagi menjadi tiga tahap:

  1. Pra-konfigurasi Pada tahap ini, pengaturan dasar router akan ditetapkan: jaringan lokal, firewall, daftar alamat, hairpin NAT, dll.
  2. Multivan. Pada tahap ini, koneksi yang diperlukan akan ditandai dan diurutkan sesuai dengan tabel routing.
  3. Koneksi ke ISP. Pada tahap ini, antarmuka yang menyediakan koneksi Internet akan dikonfigurasikan, perutean dan mekanisme reservasi saluran Internet akan dilibatkan.

Komentar. Tiga jenis koneksi ke ISP dipilih secara khusus untuk menunjukkan bahwa tidak ada yang tidak dapat diselesaikan dalam mengatur multivan dengan alamat dinamis dan menunjukkan salah satu opsi solusi.
Penting! Untuk berpindah saluran sesuai dengan algoritma yang ditentukan menggunakan biaya rute jarak , mekanisme check gateway digunakan . Lihat catatan 1
Skrip yang diberikan dalam artikel tidak ada hubungannya dengan reservasi saluran.

1. Preset


1.1. Kami menghapus konfigurasi router dengan perintah:

/system reset-configuration skip-backup=yes no-defaults=yes 

setuju dengan ā€œ Berbahaya! Setel ulang? [y / T]: ā€dan, setelah reboot, kami terhubung ke Winbox melalui MAC. Pada tahap ini, konfigurasi dan basis pengguna dihapus.

1.2. Buat pengguna baru:

 /user add group=full name=knight password=ultrasecret comment="Not horse" 

login di bawahnya dan hapus default:

 /user remove admin 

Komentar. Ini adalah penghapusan dan bukan pemutusan dari pengguna default yang penulis anggap lebih aman dan merekomendasikan untuk digunakan.

1.3. Kami membuat daftar antarmuka dasar untuk kenyamanan beroperasi di firewall, pengaturan penemuan dan server MAC lainnya:

 /interface list add name=WAN comment="For Internet" /interface list add name=LAN comment="For Local Area" 

Kami menandatangani antarmuka dengan komentar

 /interface ethernet set ether1 comment="to ISP1" /interface ethernet set ether2 comment="to ISP2" /interface ethernet set ether3 comment="to ISP3" /interface ethernet set ether4 comment="to LAN1" /interface ethernet set ether5 comment="to LAN2" 

dan isi daftar antarmuka:

 /interface list member add interface=ether1 list=WAN comment=ISP1 /interface list member add interface=ether2 list=WAN comment=ISP2 /interface list member add interface=ether3 list=WAN comment="to ISP3" /interface list member add interface=ether4 list=LAN comment="LAN1" /interface list member add interface=ether5 list=LAN comment="LAN2" 

Komentar. Menulis komentar yang jelas sepadan dengan waktu yang dihabiskan untuk ini plus sangat memudahkan Troubleshoot dan memahami konfigurasi.

Penulis menganggap perlu, untuk alasan keamanan, untuk menambahkan antarmuka ether3 ke daftar antarmuka "WAN", meskipun pada kenyataannya protokol ip tidak akan melewatinya.

Jangan lupa bahwa setelah antarmuka PPP dinaikkan pada ether3, itu juga perlu ditambahkan ke daftar antarmuka "WAN"

1.4. Kami menyembunyikan router dari deteksi kedekatan dan kontrol dari jaringan penyedia oleh MAC:

 /ip neighbor discovery-settings set discover-interface-list=!WAN /tool mac-server set allowed-interface-list=LAN /tool mac-server mac-winbox set allowed-interface-list=LAN 

1.5. Kami membuat seperangkat aturan filter firewall minimum yang cukup untuk melindungi router:

 /ip firewall filter add action=accept chain=input \ comment="Related Established Untracked Allow" \ connection-state=established,related,untracked 

(aturan tersebut memberikan izin untuk koneksi yang dibuat dan yang terkait yang dimulai dari jaringan yang terhubung dan oleh router itu sendiri)

 /ip firewall filter add action=accept chain=input \ comment="ICMP from ALL" protocol=icmp 

(ping dan bukan hanya ping. Semua icmp diizinkan masuk. Sangat berguna untuk menemukan masalah dengan MTU)

 /ip firewall filter add action=drop chain=input comment="All other WAN Drop" \ in-interface-list=WAN 

(aturan yang menutup rantai input melarang segala hal lain yang datang dari Internet)

 /ip firewall filter add action=accept chain=forward \ comment="Established, Related, Untracked allow" \ connection-state=established,related,untracked 

(aturan tersebut memungkinkan koneksi yang dibuat dan terkait yang melewati router)

 /ip firewall filter add action=drop chain=forward comment="Invalid drop" \ connection-state=invalid 

(aturan menjatuhkan koneksi, dengan koneksi-state = tidak valid, melewati router. Ini sangat direkomendasikan oleh Mikrotik, tetapi dalam beberapa situasi yang jarang dapat memblokir lalu lintas yang berguna)

 /ip firewall filter add action=drop chain=forward \ comment="Drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ connection-state=new in-interface-list=WAN 

(aturan tersebut melarang paket yang pergi dari Internet dan tidak melalui prosedur dstnat melalui router. Ini akan melindungi jaringan lokal dari penyusup yang, yang berada dalam domain siaran yang sama dengan jaringan eksternal kami, akan mendaftarkan IP eksternal kami sebagai gateway dan, dengan demikian, mencoba "Jelajahi" jaringan area lokal kami.)

Komentar. Mari kita asumsikan bahwa LAN1 dan LAN2 adalah jaringan tepercaya dan lalu lintas di antara mereka dan dari mereka tidak disaring.

1.6. Buat daftar dengan daftar jaringan non-routable:

 /ip firewall address-list add address=0.0.0.0/8 comment="\"This\" Network" list=BOGONS add address=10.0.0.0/8 comment="Private-Use Networks" list=BOGONS add address=100.64.0.0/10 comment="Shared Address Space. RFC 6598" list=BOGONS add address=127.0.0.0/8 comment=Loopback list=BOGONS add address=169.254.0.0/16 comment="Link Local" list=BOGONS add address=172.16.0.0/12 comment="Private-Use Networks" list=BOGONS add address=192.0.0.0/24 comment="IETF Protocol Assignments" list=BOGONS add address=192.0.2.0/24 comment=TEST-NET-1 list=BOGONS add address=192.168.0.0/16 comment="Private-Use Networks" list=BOGONS add address=198.18.0.0/15 comment="Network Interconnect Device Benchmark Testing"\ list=BOGONS add address=198.51.100.0/24 comment=TEST-NET-2 list=BOGONS add address=203.0.113.0/24 comment=TEST-NET-3 list=BOGONS add address=224.0.0.0/4 comment=Multicast list=BOGONS add address=192.88.99.0/24 comment="6to4 Relay Anycast" list=BOGONS add address=240.0.0.0/4 comment="Reserved for Future Use" list=BOGONS add address=255.255.255.255 comment="Limited Broadcast" list=BOGONS 

(Ini adalah daftar alamat dan jaringan yang tidak dialihkan ke Internet dan, karenanya, kami juga akan mengikuti ini.)

Komentar. Daftar ini dapat berubah, jadi saya menyarankan Anda untuk memeriksa relevansinya secara berkala.

1.7. Konfigurasikan DNS untuk router itu sendiri:

 /ip dns set servers=1.1.1.1,8.8.8.8 

Komentar. Dalam versi ROS saat ini, server dinamis lebih diutamakan daripada yang ditentukan secara statis. Permintaan resolusi nama dikirim ke server pertama dalam urutan dalam daftar. Transisi ke server berikutnya terjadi ketika yang saat ini tidak tersedia. Batas waktu besar - lebih dari 5 detik. Kembali kembali ketika "server yang jatuh" dilanjutkan kembali tidak secara otomatis terjadi. Dengan algoritma ini dan keberadaan multivan, penulis merekomendasikan untuk tidak menggunakan server yang dikeluarkan oleh penyedia.

1.8. Konfigurasikan jaringan lokal.
1.8.1. Konfigurasikan alamat IP statis pada antarmuka LAN:

 /ip address add interface=ether4 address=192.168.88.254/24 comment="LAN1 IP" /ip address add interface=ether5 address=172.16.1.0/23 comment="LAN2 IP" 

1.8.2. Kami menetapkan aturan untuk rute ke jaringan lokal kami melalui tabel perutean utama:

 /ip route rule add dst-address=192.168.88.0/24 table=main comment="to LAN1" /ip route rule add dst-address=172.16.0.0/23 table=main comment="to LAN2" 

Komentar. Ini adalah salah satu cara termudah dan tercepat untuk mengakses alamat jaringan lokal dengan alamat IP eksternal dari antarmuka router di mana rute default tidak pergi.

1.8.3. Jika perlu, aktifkan Hairpin NAT untuk LAN1 dan LAN2:

 /ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN1" \ out-interface=ether4 src-address=192.168.88.0/24 to-addresses=192.168.88.254 /ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN2" \ out-interface=ether5 src-address=172.16.0.0/23 to-addresses=172.16.1.0 

Komentar. Ini memungkinkan pengguna dari LAN1 dan LAN2 untuk mengakses melalui IP eksternal (dstnat) ke server yang terletak dengan pengguna di segmen jaringan yang sama.

2. Sebenarnya, implementasi multivan yang benar


Untuk mengatasi masalah "menjawab dari tempat mereka bertanya", kami akan menggunakan dua alat ROS: tanda koneksi dan tanda rute . Tanda koneksi memungkinkan Anda menandai koneksi yang diinginkan dan terus bekerja dengan label ini sebagai syarat untuk menerapkan tanda rute . Dan sudah dengan tanda rute mungkin untuk bekerja di ip route dan aturan rute . Kami menemukan alatnya, sekarang kami harus memutuskan koneksi mana yang akan ditandai - satu, di mana tepatnya untuk menandai - dua.

Dengan yang pertama, semuanya sederhana - kita harus menandai semua koneksi yang datang ke router dari Internet melalui saluran yang sesuai. Dalam kasus kami, ini akan menjadi tiga label (sesuai dengan jumlah saluran): "conn_isp1", "conn_isp2" dan "conn_isp3".

Nuansa dengan yang kedua adalah bahwa koneksi yang masuk akan dari dua jenis: transit dan yang ditujukan untuk router itu sendiri. Mekanisme tanda koneksi berfungsi di tabel mangle . Pertimbangkan pergerakan paket pada diagram yang disederhanakan, silakan dikumpulkan oleh spesialis sumber mikrotik-trainings.com (bukan iklan):



Mengikuti panah, kita melihat bahwa paket yang tiba di " antarmuka input " melewati rantai " Prerouting " dan hanya kemudian dibagi menjadi transit dan lokal di blok " Keputusan Routing ". Oleh karena itu, untuk membunuh dua burung dengan satu batu, gunakan Tanda Koneksi di tabel Prerouting Mangle dari rantai Prerouting .

Komentar . Dalam ROS, label "Tanda perutean" ditunjukkan di bagian Ip / Rute / Aturan sebagai "Tabel", dan di bagian lainnya sebagai "Tanda Perutean". Ini dapat menyebabkan beberapa kebingungan dalam pemahaman, tetapi, pada kenyataannya, itu adalah satu dan sama, dan merupakan analog dari rt_tables di iproute2 di linux.

2.1. Kami menandai koneksi yang masuk dari masing-masing penyedia:

 /ip firewall mangle add action=mark-connection chain=prerouting \ comment="Connmark in from ISP1" connection-mark=no-mark in-interface=ether1 \ new-connection-mark=conn_isp1 passthrough=no /ip firewall mangle add action=mark-connection chain=prerouting \ comment="Connmark in from ISP2" connection-mark=no-mark in-interface=ether2 \ new-connection-mark=conn_isp2 passthrough=no /ip firewall mangle add action=mark-connection chain=prerouting \ comment="Connmark in from ISP3" connection-mark=no-mark in-interface=pppoe-isp3 \ new-connection-mark=conn_isp3 passthrough=no 

Komentar.
Pembaca yang mencoba secara harfiah dan dalam urutan membaca mengulangi pengaturan yang disarankan dalam artikel, ketika memasukkan perintah ketiga, mereka akan menghadapi kesalahan: "input tidak cocok dengan nilai antarmuka". Ini karena tidak adanya antarmuka "pppoe-isp3", yang akan dikonfigurasi pada Bagian 3.3.2. Pada titik ini, Anda dapat memasukkan "ether3" alih-alih "pppoe-isp3". Setelah menyelesaikan paragraf 3.3.2, Anda harus kembali dan meletakkan nama antarmuka saat ini.

Agar tidak menandai koneksi yang sudah ditandai, saya menggunakan kondisi connection-mark = no-mark sebagai ganti connection-state = new.

passthrough = tidak - karena dalam metode implementasi ini, penandaan ulang dikecualikan, dan untuk mempercepat Anda dapat mengganggu penghitungan aturan setelah pertandingan pertama.

Harus diingat bahwa kita masih tidak mengganggu routing. Sekarang hanya ada tahap persiapan. Tahap implementasi selanjutnya adalah pemrosesan lalu lintas transit, yang dikembalikan melalui koneksi yang stabil dari penerima di jaringan lokal. Yaitu paket-paket yang (lihat diagram) melalui router di sepanjang jalan:

ā€œInput Interfaceā€ => ā€Preroutingā€ => ā€Keputusan Routingā€ => ā€Majuā€ => ā€Post Routingā€ => ā€Output Interfaceā€ dan sampai ke tujuannya di jaringan lokal.

Penting! Dalam ROS tidak ada pembagian logis ke antarmuka eksternal dan internal. Jika kita melacak lintasan paket respons dalam diagram di bawah, itu akan mengikuti lintasan logis yang sama dengan permintaan:

ā€œInput Interfaceā€ => ā€Preroutingā€ => ā€Keputusan Routingā€ => ā€Forwardā€ => ā€Post Routingā€ => ā€Output Interfaceā€ hanya untuk permintaan ā€œ Input Interface ā€ ada antarmuka ISP, dan untuk jawabannya itu adalah LAN

2.2. Kami mengarahkan lalu lintas transit kembali ke tabel routing yang sesuai:

 /ip firewall mangle add action=mark-routing chain=prerouting \ comment="Routemark transit out via ISP1" connection-mark=conn_isp1 \ dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp1 passthrough=no /ip firewall mangle add action=mark-routing chain=prerouting \ comment="Routemark transit out via ISP2" connection-mark=conn_isp2 \ dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp2 passthrough=no /ip firewall mangle add action=mark-routing chain=prerouting \ comment="Routemark transit out via ISP3" connection-mark=conn_isp3 \ dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp3 passthrough=no 

Komentar. in-interface-list =! WAN - kami hanya bekerja dengan lalu lintas dari jaringan lokal dan tipe-alamat-dst =! lokal tanpa alamat tujuan dari alamat antarmuka router itu sendiri.


Hal yang sama untuk paket lokal yang datang ke router di sepanjang jalan:

ā€œInput Interfaceā€ => ā€Preroutingā€ => ā€Keputusan Routingā€ => ā€Inputā€ => ā€Proses Lokalā€

Penting! Jawabannya akan mengikuti jalur berikut:

ā€Proses Lokalā€ => ā€Keputusan Routingā€ => ā€Outputā€ => ā€Post Routingā€ => ā€Output Interfaceā€

2.3. Kami mengarahkan respons lalu lintas lokal ke tabel routing yang sesuai:

 /ip firewall mangle add action=mark-routing chain=output \ comment="Routemark local out via ISP1" connection-mark=conn_isp1 \ dst-address-type=!local new-routing-mark=to_isp1 passthrough=no /ip firewall mangle add action=mark-routing chain=output \ comment="Routemark local out via ISP2" connection-mark=conn_isp2 \ dst-address-type=!local new-routing-mark=to_isp2 passthrough=no /ip firewall mangle add action=mark-routing chain=output \ comment="Routemark local out via ISP3" connection-mark=conn_isp3 \ dst-address-type=!local new-routing-mark=to_isp3 passthrough=no 

Pada tahap ini, tugas mempersiapkan untuk mengirim respons ke saluran Internet dari mana permintaan datang dapat dianggap diselesaikan. Semuanya ditandai, ditandai dan siap untuk dirutekan.
Efek "samping" yang sangat baik dari konfigurasi ini adalah kemampuan untuk meneruskan port DSNAT dari kedua penyedia (ISP2, ISP3) secara bersamaan. Tidak sama sekali, karena pada ISP1 kami tidak memiliki alamat routable. Efek ini penting, misalnya, untuk server surat dengan dua MX yang melihat saluran Internet yang berbeda.

Untuk menghilangkan nuansa jaringan lokal yang berfungsi dengan router IP eksternal, kami menggunakan solusi dari paragraf. 1.8.2 dan 3.1.2.6.

Selain itu, Anda dapat menggunakan alat dengan tanda dan untuk menyelesaikan paragraf 3 masalah. Kami menerapkannya seperti ini:

2.4. Kami mengarahkan lalu lintas dari klien lokal dari daftar rute ke tabel terkait:

 /ip firewall mangle add action=mark-routing chain=prerouting \ comment="Address List via ISP1" dst-address-list=!BOGONS new-routing-mark=to_isp1 \ passthrough=no src-address-list=Via_ISP1 /ip firewall mangle add action=mark-routing chain=prerouting \ comment="Address List via ISP2" dst-address-list=!BOGONS new-routing-mark=to_isp2 \ passthrough=no src-address-list=Via_ISP2 /ip firewall mangle add action=mark-routing chain=prerouting \ comment="Address List via ISP3" dst-address-list=!BOGONS new-routing-mark=to_isp3 \ passthrough=no src-address-list=Via_ISP3 

Hasilnya, tampilannya seperti ini (gambar dapat diklik):



3. Konfigurasikan konektivitas ISP dan aktifkan perutean berbasis merek


3.1. Konfigurasikan koneksi ke ISP1:
3.1.1. Konfigurasikan alamat IP statis:

 /ip address add interface=ether1 address=100.66.66.2/30 comment="ISP1 IP" 

3.1.2. Konfigurasikan perutean statis:
3.1.2.1. Tambahkan rute darurat default:

 /ip route add comment="Emergency route" distance=254 type=blackhole 

Komentar. Rute ini memungkinkan lalu lintas dari proses lokal untuk melalui tahap Keputusan Rute terlepas dari kondisi saluran dari penyedia mana pun. Nuansa lalu lintas lokal keluar adalah agar paket bergerak setidaknya di suatu tempat, perutean aktif ke gateway default harus ada dalam tabel perutean utama. Jika tidak, maka paket hanya akan dihancurkan.

Sebagai perpanjangan dari alat gateway pemeriksaan untuk analisis yang lebih dalam dari status saluran, saya mengusulkan menggunakan metode rute rekursif. Inti dari metode ini adalah kita memberi tahu router untuk mencari jalur ke gateway-nya tidak secara langsung, tetapi melalui gateway perantara. Dengan demikian gateway "test", 4.2.2.1, 4.2.2.2 dan 4.2.2.3 akan dipilih untuk masing-masing ISP1, ISP2 dan ISP3.

3.1.2.2. Rute ke alamat "verifikasi":

 /ip route add check-gateway=ping comment="For recursion via ISP1" \ distance=1 dst-address=4.2.2.1 gateway=100.66.66.1 scope=10 

Komentar. Nilai lingkup dikurangi menjadi default dalam lingkup target ROS, untuk menggunakan 4.2.2.1 lebih lanjut sebagai gateway rekursif. Saya menekankan: ruang lingkup rute ke alamat "verifikasi" harus kurang dari atau sama dengan cakupan target rute yang akan merujuk pada verifikasi.

3.1.2.3. Rute rekursif default untuk lalu lintas tanpa tanda rute:

 /ip route add check-gateway=ping comment="Unmarked via ISP1" \ distance=2 gateway=4.2.2.1 

Komentar. Nilai distance = 2 digunakan karena ISP1 dinyatakan sebagai siaga pertama berdasarkan ketentuan tugas.

3.1.2.4. Rute rekursif default untuk lalu lintas dengan tanda perutean ā€œto_isp1ā€:

 /ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1 \ routing-mark=to_isp1 

Komentar. Sebenarnya, di sini kita akhirnya mulai menggunakan buah dari pekerjaan persiapan yang dilakukan pada ayat 2.

Pada rute ini, semua lalu lintas yang menandai rute "to_isp1" akan diarahkan ke gateway penyedia pertama, terlepas dari mana gateway default untuk tabel utama saat ini aktif.

3.1.2.5. Rute rekursif default fallback pertama untuk lalu lintas berlabel dari penyedia ISP2 dan ISP3:

 /ip route add comment="Marked via ISP2 Backup1" distance=2 gateway=4.2.2.1 \ routing-mark=to_isp2 /ip route add comment="Marked via ISP3 Backup1" distance=2 gateway=4.2.2.1 \ routing-mark=to_isp3 

Komentar. Rute ini juga diperlukan untuk memesan lalu lintas dari jaringan lokal, yang merupakan anggota dari daftar alamat ā€œto_isp *ā€ '

3.1.2.6. Kami menulis rute untuk lalu lintas router lokal ke Internet melalui ISP1:

 /ip route rule add comment="From ISP1 IP to Inet" src-address=100.66.66.2 table=to_isp1 

Komentar. Dalam kombinasi dengan aturan dari klausa 1.8.2, disediakan saluran keluar ke saluran yang diinginkan dengan sumber yang diberikan. Ini sangat penting untuk pembangunan terowongan di mana alamat IP dari sisi lokal (EoIP, IP-IP, GRE) ditentukan. Karena aturan dalam aturan rute ip dijalankan dari atas ke bawah, hingga kondisinya cocok untuk pertama kalinya, aturan ini harus sesuai dengan aturan dalam klausa 1.8.2.

3.1.3. Kami menulis aturan NAT untuk lalu lintas keluar:

 /ip firewall nat add action=src-nat chain=srcnat comment="NAT via ISP1" \ ipsec-policy=out,none out-interface=ether1 to-addresses=100.66.66.2 

Komentar. NAT adalah segala yang berjalan, kecuali bahwa itu jatuh ke dalam kebijakan IPsec. Saya mencoba untuk tidak menggunakan action = masquerade kecuali benar-benar diperlukan. Ini lebih lambat dan lebih banyak sumber daya daripada src-nat karena menghitung alamat untuk NAT untuk setiap koneksi baru.

3.1.4. Kami mengirim klien dari daftar yang dilarang untuk keluar melalui penyedia lain langsung ke gateway penyedia ISP1.

 /ip firewall mangle add action=route chain=prerouting \ comment="Address List via ISP1 only" dst-address-list=!BOGONS passthrough=no \ route-dst=100.66.66.1 src-address-list=Via_only_ISP1 place-before=0 

Komentar. action = rute memiliki prioritas lebih tinggi dan diterapkan lebih awal dari aturan perutean lainnya.

place-before = 0 - menempatkan aturan kami di urutan pertama dalam daftar.

3.2. Kami mengkonfigurasi koneksi ke ISP2.

Karena penyedia ISP2 memberi kita pengaturan melalui DHCP, masuk akal untuk membuat perubahan yang diperlukan dengan skrip yang dimulai ketika klien DHCP dipicu:

 /ip dhcp-client add add-default-route=no disabled=no interface=ether2 script=":if (\$bound=1) do={\r\ \n /ip route remove [ find gateway=\"4.2.2.2\" ]; /ip route remove \ [ find where dst-address ~\"4.2.2.2\" ]\r\ \n /ip route add check-gateway=ping comment=\"For recursion via ISP2\" \ distance=1 dst-address=4.2.2.2/32 gateway=\$\"gateway-address\" scope=10\r\ \n /ip route add check-gateway=ping comment=\"Unmarked via ISP2\" \ distance=1 gateway=4.2.2.2\r\ \n /ip route add comment=\"Marked via ISP2 Main\" distance=1 gateway=4.2.2.2 \ routing-mark=to_isp2\r\ \n /ip route add comment=\"Marked via ISP1 Backup1\" distance=2 \ gateway=4.2.2.2 routing-mark=to_isp1\r\ \n /ip route add comment=\"Marked via ISP3 Backup2\" distance=3 \ gateway=4.2.2.2 routing-mark=to_isp3\r\ \n /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \ out-interface=\$\"interface\" to-addresses=\$\"lease-address\" \ comment=\"NAT via ISP2\"\r\ \n /ip route rule add comment=\"From ISP2 IP to Inet\" \ src-address=\$\"lease-address\" table=to_isp2 \r\ \n} else={\r\ \n /ip route remove [ find gateway=\"4.2.2.2\" ]; /ip route remove \ [ find where dst-address ~\"4.2.2.2\" ]\r\ \n /ip firewall nat remove [find comment=\"NAT via ISP2\"]\r\ \n /ip route rule remove [find comment=\"From ISP2 IP to Inet\"]\r\ \n}\r\ \n" use-peer-dns=no use-peer-ntp=no 

Script itu sendiri di jendela Winbox (dapat diklik):


Komentar. Bagian pertama dari skrip dipicu ketika leasing berhasil diterima, yang kedua - setelah leasing dirilis. Lihat catatan 2

3.3. Kami mengkonfigurasi koneksi ke penyedia ISP3.

Karena penyedia konfigurasi memberi kita dinamis, masuk akal untuk membuat perubahan yang diperlukan dengan skrip yang dimulai setelah naik dan setelah jatuhnya antarmuka ppp.

Komentar. Antarmuka ppp dapat ditentukan sebagai gateway alih-alih alamat IP. Namun, dalam hal ini, rute rekursif tidak dapat diaktifkan. Oleh karena itu, kami memasukkan alamat IP sisi penyedia ke dalam variabel dan menggunakannya lebih lanjut dengan cara yang sama seperti untuk penyedia lainnya

3.3.1. Pertama, konfigurasikan profil:

 /ppp profile add comment="for PPPoE to ISP3" interface-list=WAN name=isp3_client \ on-down="/ip route remove [ find gateway=\"4.2.2.3\" ]\r\ \n/ip route remove [ find where dst-address ~\"4.2.2.3\" ]\r\ \n/ip firewall nat remove [find comment=\"NAT via ISP3\"]\r\ \n/ip route rule remove [find comment=\"From ISP3 IP to Inet\"]" \ on-up="/ip route remove [ find gateway=\"4.2.2.3\" ]; /ip route remove \ [ find where dst-address ~\"4.2.2.3\" ]\r\ \n/ip route add check-gateway=ping comment=\"For recursion via ISP3\" distance=1 \ dst-address=4.2.2.3/32 gateway=\$\"remote-address\" scope=10\r\ \n/ip route add check-gateway=ping comment=\"Unmarked via ISP3\" distance=3 \ gateway=4.2.2.3\r\ \n/ip route add comment=\"Marked via ISP3 Main\" distance=1 gateway=4.2.2.3 \ routing-mark=to_isp3\r\ \n/ip route add comment=\"Marked via ISP1 Backup2\" distance=3 gateway=4.2.2.3 \ routing-mark=to_isp1\r\ \n/ip route add comment=\"Marked via ISP2 Backup2\" distance=3 gateway=4.2.2.3 \ routing-mark=to_isp2\r\ \n/ip firewall mangle set [find comment=\"Connmark in from ISP3\"] \ in-interface=\$\"interface\"\r\ \n/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none \ out-interface=\$\"interface\" to-addresses=\$\"local-address\" \ comment=\"NAT via ISP3\"\r\ \n/ip route rule add comment=\"From ISP3 IP to Inet\" \ src-address=\$\"local-address\" table=to_isp3 " 

Script itu sendiri di jendela Winbox (dapat diklik):


Komentar. Tali
/ ip firewall mangle set [find comment = "Connmark in from ISP3"] in-interface = $ "interface";
Memungkinkan Anda memproses penggantian nama antarmuka dengan benar, karena ia bekerja dengan kode dan bukan nama tampilan.

3.3.2. Sekarang, menggunakan profil, buat koneksi ppp:

 /interface pppoe-client add allow=mschap2 comment="to ISP3" disabled=no \ interface=ether3 name=pppoe-isp3 password=isp3_pass profile=isp3_client \ user=isp3_client 


Komentar. Beberapa penyedia "lupa" untuk memberikan parameter "alamat jarak jauh". Dalam hal ini, ketika terhubung, skrip konfigurasi tidak akan berfungsi dengan benar, dan dalam log Anda akan melihat kesalahan berikut:
pppoe, ppp, info pppoe-isp3: tidak dapat menentukan alamat jarak jauh, menggunakan xxx.xxx.xxx.xxx
Untuk mengatasi masalah ini, Anda perlu mengatur alamat secara manual di profil ppp (boneka apa pun):
 /ppp profile set isp3_client remote-address=169.254.69.96 

Tali
/ ip firewall mangle set [find comment = "Connmark in from ISP3"] in-interface = $ "interface";
Memungkinkan Anda memproses penggantian nama antarmuka dengan benar, karena ia bekerja dengan kode dan bukan nama tampilan.

Sebagai sentuhan terakhir, atur jam:

 /system ntp client set enabled=yes \ server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org 

Bagi mereka yang membaca sampai akhir


Metode yang diusulkan untuk mengimplementasikan multivan adalah preferensi pribadi penulis dan bukan satu-satunya yang mungkin. Toolkit ROS luas dan fleksibel, yang di satu sisi menyebabkan kesulitan bagi pemula, di sisi lain - alasan popularitas. Jelajahi, coba, temukan alat dan solusi baru. Sebagai contoh, sebagai aplikasi dari pengetahuan yang diperoleh, dimungkinkan dalam implementasi multivan ini untuk mengganti alat check-gateway dengan rute rekursif dengan Netwatch .

Catatan


  1. Check-gateway — , . 10 , . , 20-30 . — Netwatch , .
    Check-gateway .

    ! , . check-gateway=ping .
  2. Itu terjadi bahwa kegagalan terjadi dalam mekanisme operasi DHP, yang terlihat seperti klien yang menggantung dalam keadaan pembaruan. Dalam hal ini, bagian kedua skrip tidak akan berfungsi, tetapi tidak akan mengganggu lalu lintas untuk berjalan dengan benar, karena negara memantau rute rekursif yang sesuai.
  3. ECMP (Equal Cost Multi-Path) - ROS memiliki kemampuan untuk menentukan rute dengan banyak gateway dan jarak yang sama. Dalam hal ini, koneksi akan didistribusikan melalui saluran menggunakan algoritma round robin, sebanding dengan jumlah gateway yang ditentukan.

Untuk dorongan untuk menulis artikel, bantu dalam membentuk strukturnya dan memberikan penekanan - terima kasih pribadi kepada Eugene @jscar

Source: https://habr.com/ru/post/id463813/


All Articles