====== Routování na Mikrotiku ======
===== 2 ISP v jednom routeru - (verze 1) =====
Nastavení ukazuje, jak nastavit Mikrotik s dvěma připojení k Internetu. Uvedený příklad posílá různé LAN sítě přes konkretní linku poskytovatele \\
* ether1 = ISP1 (10.0.0.0/24)
* ether2 = ISP2 (10.10.0.0/24)
* ether5 = LAN1 (192.168.1.0/24)
* ether6 = LAN2 (192.168.101.0/24
Defaultni nastavení je všechno posílat přes ISP1 a pouze LAN2 posílat přes ISP2.
/ip route
add distance=1 gateway=10.10.0.1 routing-mark=isp2
add distance=1 gateway=10.0.0.1
/ip route rule
add src-address=10.10.0.0/24 table=isp2
add src-address=192.168.101.0/24 table=isp2
add routing-mark=isp2 table=isp2
/ip firewall nat
add action=src-nat chain=srcnat out-interface=ether1 action=masquerade
add action=src-nat chain=srcnat out-interface=ether2 action=masquerade
===== Záložní konektivita (2 ISP v jednom routeru) - (verze 2) =====
Tento návod je popisuje i situaci, kdy záložní konektivitu poskytuje nějaký router, který sám provádí NAT, přiděluje DHCP, apod.
**I. Příprava záložního rozhraní**
V případě ethernetu je port např. ether5 je v nastavení switche potřeba vyřadit ze switche - nastaví se u něj master port: None
V případě USB donglu by mělo v Mikrotiku existovat rozhraní např. ppp1
**II. přes SSH (i ve winboxu) se zadají tato pravidla:**
[admin@odien] /ip> /ip route
[admin@odien] /ip route> add dst-address=8.8.8.8 gateway=ether1-gateway scope=10
[admin@odien] /ip route> add dst-address=8.8.4.4 gateway=ether5 scope=10
[admin@odien] /ip route> add distance=1 gateway=8.8.8.8 routing-mark=ISP1 check-gateway=ping
[admin@odien] /ip route> add distance=2 gateway=8.8.4.4 routing-mark=ISP1 check-gateway=ping
[admin@odien] /ip route> add distance=1 gateway=8.8.4.4 routing-mark=ISP2 check-gateway=ping
[admin@odien] /ip route> add distance=2 gateway=8.8.8.8 routing-mark=ISP2 check-gateway=ping
**III. navíc, např. přes klikací rozhraní:**
- na záložním interfacu (ether5 resp. ppp1) se musí pustit DHCP client s vyšší default distance přidaných router, než na ether1-gateway (např. jsem dal 10)
- na záložním interfacu (ether5 resp. ppp1) se musí ve Firewall sekce NAT zapnout stejný IP Masquerading jako předím na ether1-gateway
===== Záložní konektivita (2 ISP v jednom routeru) - (verze 3) =====
* bez kontroly default gw a se skriptem - resi poradi bran.
* ether1 - primarni ISP
* ether5 - sekundarni zalozni ISP
* pro testovani funkcni primarni linky se pouziva sekundarni google dns (8.8.4.4), ktere je dostupne JEN pres primarni konektivitu
* predpoklada se, ze je na kazdem WAN interface pouze jedna ip adresa
/ip address add address=10.11.23.10/24 comment=primarni-isp interface=ether1 network=10.11.23.0
/ip address add address=172.16.23.20/24 comment=zalozni-isp interface=ether5 network=172.16.23.0
/ip route add distance=1 gateway=10.11.23.1
/ip route add distance=10 gateway=192.168.8.1
/ip route add distance=1 dst-address=8.8.4.4/32 gateway=10.11.23.1
/ip firewall nat add action=masquerade chain=srcnat comment="primarni-isp: masquerade" out-interface=ether1
/ip firewall nat add action=masquerade chain=srcnat comment="sekundarni-isp: masquerade" out-interface=ether5
Po priprave tohoto nastaveni je potreba vlozit tento skript do scheduleru:
system > scheduler, skript vlozte sem a nastavte, aby se vykonaval treba kazdych 10 sekund
# Please fill the WAN interface names
:local InterfaceISP1 ether1
:local InterfaceISP2 ether5
# Please fill the ping check host - currently: secondary dns google
:local PingTarget 8.8.4.4
# Please fill how many ping failures are allowed before fail-over happends
:local FailTreshold 3
# Editing the script after this point may break it
# -------------- stop editing here --------------
# Declare the global variables
:global PingFailCountISP1
:global PingFailCountISP2
# This inicializes the PingFailCount variables, in case this is the 1st time the script has ran
:if ([:typeof $PingFailCountISP1] = "nothing") do={:set PingFailCountISP1 0}
:if ([:typeof $PingFailCountISP2] = "nothing") do={:set PingFailCountISP2 0}
# This variable will be used to keep results of individual ping attempts
:local PingResult
# Check ISP1
:set PingResult [ping $PingTarget count=1 interface=$InterfaceISP1]
:put $PingResult
:if ($PingResult = 0) do={
:if ($PingFailCountISP1 < ($FailTreshold+2)) do={
:set PingFailCountISP1 ($PingFailCountISP1 + 1)
:if ($PingFailCountISP1 = $FailTreshold) do={
:log warning "ISP1 has a problem en route to $PingTarget - increasing distance of routes."
/ip route set 0 distance=10
/ip route set 1 distance=1
/ip firewall connection {remove [find]}
:log warning "isp 2 ACTIVE."
}
}
}
:if ($PingResult = 1) do={
:if ($PingFailCountISP1 > 0) do={
:set PingFailCountISP1 ($PingFailCountISP1 - 1)
:if ($PingFailCountISP1 = ($FailTreshold -1)) do={
:log warning "ISP1 can reach $PingTarget again - bringing back original distance of routes."
/ip route set 0 distance=1
/ip route set 1 distance=10
/ip firewall connection {remove [find]}
:log warning "spoje-net ACTIVE, disable backup isp."
}
}
}
V pripade nedostupnosti 8.8.4.4 se provede prohozeni priorit u vychozi brany tak aby se uprednostinila zalozni konektivita a nasledne se vymaze connection tabulka (jinak se zmena neprojevi pro jiz navazana spojeni !!!)
V pripade, ze primarni konektivita opet naskoci, provede to stejne v obracenem poradi.
* //prevzato a upraveno pro vlastni potrebu z [[https://wiki.mikrotik.com/wiki/Failover_Scripting]]//
===== VPN v Mikrotiku =====
* V mikrotiku funguje korektně pouze od firmwaru 6.23
* Je nutno použít nešifrovanou OpenVPN, kterou si rozjedete např. na portu 443
1. Vygenerovaný certifikát nahrajeme přes scp do mikrotiku. (musíme nahrát ca.crt a pak uživatelský uzivatel.crt a uzivatel.key) \\
2. Importujeme nahrané certifikáty v pořadí ca.crt, uzivatel.crt, uzivatel.key. Passphrase nezadavame.
certificate import file-name=
3. Nastavíme OpenVPN klienta. nastavuje common name v importovanem certifikatu ! Za ''%%aa.bb.cc.dd%%'' dosadíme IP adresu našeho OpenVPN serveru
ppp profile add name=ovpn use-compression=no use-encryption=no use-mpls=no use-vj-compression=no
interface ovpn-client add certificate=cert_2 cipher=null connect-to=aa.bb.cc.dd mode=ethernet name=ovpn-out1 port=443 profile=ovpn user=
4. Manuálně si budeme muset přidat routy, které chceme posílat primárně přes VPN. Bohužel u Mikrotiku blbě funguje předávání rout, proto si musíte zjistit, jaká se používá brána ve VPN a tu nastavit manuálně do routovací tabulky
/ip route
add distance=1 dst-address=10.1.0.0/16 gateway=172.16.1.1
add distance=1 dst-address=10.2.0.0/16 gateway=172.16.1.1
add distance=1 dst-address=10.3.0.0/16 gateway=172.16.1.1
==== Internet přes OpenVPN v Mikrotiku s mobilním připojení ====
Pokud potřebujeme Internet tunelovat přes OpenVPN v Mikrotiku (např. cenzura internetu, chceme vlastní konektivitu etc.) postupujeme následujícím způsobem: \\
1. Přidáme rozhraní ppp-out1 (pro případ, že máme Internet přes mobilní připojení)
/interface ppp-client
add add-default-route=no apn=internet disabled=no name=ppp-out1 port=usb1 \
use-peer-dns=no
2. Přidáme maškarádu na odchozí OpenVPN rozhraní (pokud používáme NAT a nechceme routovat vnitřní adresy)
/ip firewall nat
add action=masquerade chain=srcnat comment="default configuration" \
out-interface=ppp-out1
add action=masquerade chain=srcnat comment="default configuration" \
out-interface=ovpn-out1
3. Přidáme default routu přes OpenVPN - Musím přidat vyjímku na adresu OpenVPN serveru, který musíme poslat přes původní konektivitu
/ip route
add distance=1 gateway=172.16.1.1
add distance=1 dst-address=aa.bb.cc.dd/32 gateway=ppp-out1