Routing rekursif dalam MikroTik melalui gateway yang ditetapkan oleh DHCP

Pertanyaan yang paling sering diajukan tentang penggunaan perutean rekursif adalah: "Apa yang harus saya lakukan jika penyedia utama memberi kami alamat IP melalui dhcp, dan apakah gateway default sering berubah?"

gambar

Peringatan! bahan dan skema dalam artikel ini disederhanakan menjadi primitivisme untuk memberikan gambaran umum tentang metode penyelesaian masalah. Tidak ada pendalaman pada khususnya.

Untuk apa perutean rekursif? Untuk memantau ketersediaan Internet di belakang gerbang penyedia . Lagi pula, sering terjadi bahwa router penyedia merespons dengan sempurna permintaan gema, tetapi tautan penyedia [ke atas] ke jaringan global telah hilang karena suatu alasan.

Perutean rekursif memungkinkan Anda untuk mengevaluasi ketersediaan akses Internet melalui penyedia yang dipilih dan memutuskan perutean lalu lintas.

Namun, kenyataannya adalah bahwa penggunaan perutean rekursif mengasumsikan adanya indikasi eksplisit langsung dari alamat IP gateway yang dipaku dengan paku di antara parameter dari rute yang dibuat. Menentukan nama antarmuka siaran sebagai gateway tidak benar dan dalam banyak kasus tidak berfungsi, karena membutuhkan proxy-arp dari penyedia. Namun, alih-alih penyedia, proxy-arp dapat menghidupkan tetangga Anda tentang sakelar penyedia dan mencoba mencegat lalu lintas Anda dengan cara ini dengan mengatur MITM klasik!

Keajaiban routing rekursif tersembunyi di balik parameter "lingkup" dan "target-lingkup" . Untuk rute yang berfungsi sebagai rekursif, "target-scope" -nya harus lebih besar atau sama dengan nilai "scope" dari rute statis yang dirujuk secara rekursif, dan gateway yang ditentukan dalam rute berada di luar jangkauan langsung melalui salah satu antarmuka.

Pertimbangkan skema Active / Backup yang paling sederhana. Router kami melakukan NAT dan terhubung ke dua penyedia melalui antarmuka Ether1-isp1 dan Ether2-isp2. Penyedia utama (ISP-1) mendistribusikan alamat IP ke klien melalui DHCP dan tidak ada yang lain. Penyedia kedua memberi kami alamat IP statis, tetapi kecepatannya jauh lebih rendah.
Beralih ke cadangan (ISP-2) harus terjadi ketika akses ke Internet melalui penyedia utama menjadi tidak mungkin.

gambar

Sorotan penyedia untuk skema semacam itu adalah perubahan sewenang-wenang berkala bukan hanya alamat IP klien, tetapi juga gateway default.

Sebelum versi 6.39, saya harus melihat kruk yang sangat canggih dalam berbagai kombinasi sheduler , netwatch, dan mekanisme serupa.

Dimulai dengan versi 6.39, pengembang RouterOS pergi menemui pengguna tersebut dan menciptakan kemampuan untuk memanggil skrip khusus ketika klien dhcp dipicu pada perangkat.

Sebenarnya, solusinya terdiri dari dua bagian:

  1. perlu mendapatkan protokol dhcp dari alamat IP penyedia dan alamat gateway untuk digunakan dalam rute rekursif
  2. jika memungkinkan, kecualikan alamat gateway yang diterima dari penyedia dari penggunaan otomatis.

Jadi, mari kita mulai dari akhir.

Kami akan membuat rute cadangan melalui ISP-2 dengan nilai jarak lebih besar dari yang utama di masa depan. Dalam contoh ini, saya menggunakan "distance = 2":

Cadangkan melalui ISP-2
/ip route add dst-address=0.0.0.0/0 gateway=192.0.2.1 distance=2

Selanjutnya, untuk menerima rute default dari penyedia ISP-1, tetapi tidak untuk menggunakannya secara langsung, ada nilai khusus “distance = 255”. Rute dengan nilai jarak ini akan menuju ke tabel perutean sistem, tetapi tidak akan pernah menjadi aktif .

Kode
/ip dhcp-client add comment="ISP-1 dhcp" default-route-distance=255 dhcp-options=hostname,clientid interface=Ether1-isp1

Kami membutuhkan rute semacam itu hanya untuk membaca parameter yang dikirim oleh penyedia dan mengimplementasikannya dalam pengaturan rute rekursif melalui skrip.

Dari parameter yang diterima, kami paling tertarik pada variabel $ gateway-address. Seperti namanya, ini berisi alamat gateway default di jaringan penyedia. Kami akan menggunakannya untuk memperbarui rute rekursif.
Rute rekursif sendiri harus dikenali dengan benar dari skrip. Untuk melakukan ini, pada tahap penciptaan mereka, kami akan menunjukkan "komentar" yang unik, yang akan digunakan untuk menemukan mereka di dalam tabel. Kode untuk membuat pasangan rute rekursif:

Buat sepasang rute
/ip route add dst-address=8.8.4.4 gateway=127.0.0.1 scope=30 target-scope=30 comment=" isp1route " disabled=yes
/ip route add dst-address=0.0.0.0/0 gateway=8.8.4.4 check-gateway=ping


Baris pertama harus (dan akan!) Menunjuk ke gateway nyata di jaringan penyedia hanya setelah penyedia mengeluarkan parameter melalui dhcp dan mereka akan diproses menggunakan skrip dhcp-client:

Script yang disederhanakan
/ip route set [find comment=" isp1route "] gateway=($"gateway-address") disabled=no

Opsi lebih lanjut
:if ($bound=1) do={ /ip route set [find comment=" isp1route "] gateway=($"gateway-address")disabled=no; :log warning ("New ISP1 gateway: ".($"gateway-address")) }

Sekarang, setelah menerima alamat IP dari penyedia ISP-1 untuk digunakan sebagai gateway default, itu akan dimasukkan dalam pasangan rute bukannya 127.0.0.1.
Baris kedua, di mana rute menuju 0.0.0.0/0 ditunjukkan, sebenarnya melakukan semua keajaiban. Node 8.8.4.4 yang ditentukan di sana sebagai gateway akan diperiksa untuk respons dengan opsi “check-gateway = ping” tepatnya melalui jaringan ISP-1. Jika node 8.8.4.4 tidak merespons dua kali permintaan gema dalam waktu 20 detik, router akan mempertimbangkan koneksi ke Internet melalui rute ini (ISP-1) tidak tersedia. Dalam hal ini, koneksi baru akan dialihkan melalui penyedia cadangan ISP-2.

Jika semuanya dilakukan dengan benar, maka di jendela rute winbox / ip-> dekat rute hingga 8.8.4.4 kata-kata “resursive via ...” akan terlihat. Ini berarti rute dibangun persis seperti rekursif.

Pada akhirnya, misalnya saja - winbox layar jendela:

gambar

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


All Articles