|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2006
Messaggi: 508
|
Load balancing con Mikrotik RouterOS 7
Scopo della guida è esplorare le funzionalità del routeros 7 per creare delle policy di load balancing di connessioni multiple.
La guida è valida per qualsiasi tipo di rete WAN, l'implementazione qui esposta è specifica per il Mikrotik Chateau LTE12 e una scheda LTE USB aggiuntiva Prerequisiti hardware: - Mikrotik Chateau LTE12 - Un adapter m2 -> USB3 - Una scheda LTE M2 quectel e relative antenne - Una sim dati Un esempio qui sotto (senza sim) ![]() Assemblate il tutto, connettelo alla porta usb dello chateau e procedete a collegarvi al terminale. Potete anche usare winbox, ma chiaramente dovete tradurre su interfaccia quanto qui sotto mostrato. Se la scheda è supportata (io uso una em12g, ma dovrebbe supportare tutte le quectel M2, le nuovissime EM-160/120 sono già supportate) dovreste trovarla nella lista delle interfacce con il nome lte2. Potete procedere a prepare le schede lte per la connessione WAN. Se partite da zero, aggiungete i DNS al router Codice:
/ip dns set allow-remote-requests=yes servers=1.1.1.1,1.0.0.1 Codice:
/interface lte apn add apn=internet.it default-route-distance=11 name=wind-very use-network-apn=no use-peer-dns=no add apn=mobile.vodafone.it default-route-distance=10 name=vodafone use-network-apn=no use-peer-dns=no Questo vi garantirà sempre di avere una connessione in uscita dal router attiva, per esempio per scaricare gli aggiornamenti di routeros Eseguiamo il bind dell'apn per attivare le connessioni LTE Codice:
/interface lte set [ find ] allow-roaming=no apn-profiles=vodafone band="" name=lte1 set [ find ] allow-roaming=no apn-profiles=wind-very band="" name=lte2 Codice:
/interface list member add interface=lte2 list=WAN Eseguendo questa configurazione sfruttiamo la configurazione di default del masquerade che lavora per gruppi di interfacce Non è quindi necessario andare a settare una regola di masquerade specifica per la lte2 Potete eseguire questo step per un interfaccia ethernet anche, se per esempio volete bilanciare verso un altro modem/router Creiamo 2 routing table aggiuntive per il bilanciamento Codice:
/routing table add fib name=rt_wan_usb add fib name=rt_wan_int La routing table rt_wan_int farà riferimento alla lte interna Adesso procediamo con le regole di bilanciamento Creiamo le regole in uscita dal router Codice:
/ip firewall mangle add action=mark-connection chain=input in-interface=lte1 new-connection-mark=conn_wan_int add action=mark-connection chain=input in-interface=lte2 new-connection-mark=conn_wan_usb add action=mark-routing chain=output connection-mark=conn_wan_int new-routing-mark=rt_wan_int add action=mark-routing chain=output connection-mark=conn_wan_usb new-routing-mark=rt_wan_usb Regola per bloccare destination address su una specifica interfaccia Codice:
/ip firewall mangle add action=mark-connection chain=prerouting comment="VPN egress always through lte_int" connection-mark=no-mark dst-address-list=VPN dst-address-type=!local in-interface-list=LAN \ new-connection-mark=conn_wan_int passthrough=yes Codice:
/ip firewall mangle add action=mark-connection chain=prerouting comment="from LAN egress through lte_int" connection-mark=no-mark dst-address-type=!local in-interface-list=LAN new-connection-mark=\ conn_wan_int passthrough=yes src-address-list=from_lan_to_lte_int Codice:
/ip firewall mangle add action=mark-connection chain=prerouting comment="from LAN egress through lte_usb" connection-mark=no-mark dst-address-type=!local in-interface-list=LAN new-connection-mark=\ conn_wan_usb passthrough=yes src-address-list=from_lan_to_lte_usb Codice:
/ip firewall mangle add action=mark-connection chain=prerouting comment="streaming egress always through lte_usb" connection-mark=no-mark dst-address-type=!local in-interface-list=LAN \ new-connection-mark=conn_wan_usb passthrough=yes src-address-list=streaming Potete usare altre proprietà, da interfaccia winbox avete un overview delle proprietà utilizzabili. Potete andare avanti ad aggiungere tutte le regole di cui avete bisogno. Tutto ciò che non farà match in queste regole verrà bilanciato dalle regole PCC qui sotto Regole di load balancing vero e proprio Codice:
/ip firewall mangle add action=mark-connection chain=prerouting comment="PCC to lte_int" connection-mark=no-mark dst-address-type=!local in-interface-list=LAN new-connection-mark=conn_wan_int \ passthrough=yes per-connection-classifier=src-address:2/0 add action=mark-connection chain=prerouting comment="PCC to lte_usb" connection-mark=no-mark dst-address-type=!local in-interface-list=LAN new-connection-mark=conn_wan_usb \ passthrough=yes per-connection-classifier=src-address:2/1 il parametro da cambiare è per-connection-classifier, e potete utilizzare per esempio: # - Source address # - Destination address # - Source + destination address # - etc Più il classifier è preciso, più le connessioni saranno distribuite in modo omogeneo Anche per questa configurazione, da interfaccia winbox avete un overview delle proprietà utilizzabili. Attenzione al parametro passthrough=yes, se viene omesso non appena il pacchetto matcha una regola viene rimosso dalla catena di prerouting e non raggiungerà la parte di routing-mark qui sotto Aggiungiamo aggiungiamo il mark per utilizzare la routing table corretta Codice:
/ip firewall mangle add action=mark-routing chain=prerouting connection-mark=conn_wan_int in-interface-list=LAN new-routing-mark=rt_wan_int add action=mark-routing chain=prerouting connection-mark=conn_wan_usb in-interface-list=LAN new-routing-mark=rt_wan_usb Codice:
/ip firewall address-list add address=192.168.0.zzz list=streaming add address=192.168.0.xxx list=streaming add address=xxx.xxx.xxx.xxx comment="VPN 1" list=VPN add address=yyy.yyy.yyy.yyy comment="VPN 2" list=VPN add address=192.168.0.y comment="Desktop" list=from_lan_to_lte_int add address=192.168.0.x comment="IOT1" list=from_lan_to_lte_usb Codice:
/routing rule add action=lookup-only-in-table dst-address=0.0.0.0/0 routing-mark=rt_wan_usb table=rt_wan_usb add action=lookup-only-in-table dst-address=0.0.0.0/0 routing-mark=rt_wan_int table=rt_wan_int Codice:
/ip route add comment=rt_wan_int_main distance=1 dst-address=0.0.0.0/0 gateway=lte1 routing-table=rt_wan_int add comment=rt_wan_usb_main distance=1 dst-address=0.0.0.0/0 gateway=lte2 routing-table=rt_wan_usb add comment=rt_wan_int_bck distance=2 dst-address=0.0.0.0/0 gateway=lte2 routing-table=rt_wan_int add comment=rt_wan_usb_bck distance=2 dst-address=0.0.0.0/0 gateway=lte1 routing-table=rt_wan_usb La distance determinata la priorità di utilizzo, minore il valore, maggiore la priorità Con questa configurazione, state quindi creando una route di default per interfaccia e una di backup Garantendo il failover in caso di assenza di connessione su una delle schede Creaiamo la configurazione per gestire il failover/failback Scegliete 2 host da pingare (io ho scelto i dns di google) e forzate il routing attraverso una sola interfaccia Scegliete una coppia di host con bassa latenza e alta disponibilità, idealmente i servizi dns sono i migliori Codice:
/ip route add disabled=no dst-address=8.8.8.8/32 gateway=lte1 routing-table=main suppress-hw-offload=no add disabled=no dst-address=8.8.4.4/32 gateway=lte2 routing-table=main suppress-hw-offload=no Codice:
/system script add dont-require-permissions=no name=enable_rt_wan_int owner=admin policy=write source="ip route enable [find comment=rt_wan_int_main]" add dont-require-permissions=no name=disable_rt_wan_int owner=admin policy=write source="ip route disable [find comment=rt_wan_int_main]" add dont-require-permissions=no name=enable_rt_wan_usb owner=admin policy=write source="ip route enable [find comment=rt_wan_usb_main]" add dont-require-permissions=no name=disable_rt_wan_usb owner=admin policy=write source="ip route disable [find comment=rt_wan_usb_main]" Codice:
/tool netwatch add down-script=disable_rt_wan_int host=8.8.8.8 interval=20s up-script=enable_rt_wan_int add down-script=disable_rt_wan_usb host=8.8.4.4 interval=20s up-script=enable_rt_wan_usb Riavviamo un interfaccia tutte le mattine Codice:
/system script add dont-require-permissions=no name=reset_lte1 owner=admin policy=write source=\ ":log info \"LTE1 DOWN\";\r\ \n/interface disable lte1\r\ \n/delay 1s\r\ \n/interface enable lte1\r\ \n:log info \"LTE1 UP\";" /system scheduler add interval=1d name=reset_lte1_0800 on-event=reset_lte1 policy=write start-date=may/05/2021 start-time=08:00:00 ![]() Ultima modifica di Spellsword : 23-05-2021 alle 17:49. Motivo: typos |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:44.