WireGuard i Mikrotik
Wersja RouterOS 7 wprowadziła sporo udogodnień dla użytkowników. Jedną z bardziej wartościowych to wsparcie dla Wireguarda, nowoczesnego VPNa. Wireguard, to spora konkurencja dla tradycyjnych VPNów takich jak OpenVPN czy IPSec. Każdy, kto w swojej karierze konfigurował OpenVPN bądź zestawiał tunel IPSec, dobrze zdaje sobie sprawę ile wymaga to konfiguracji. Wireguard oferuje znacznie prostszą konfigurację, która nie powinna być przeszkodą dla początkującego informatyka czy też zwykłego użytkownika domowego. Dodatkowym plusem jest znacznie wyższa wydajność połączenia w stosunku do OpenVPN. W tej części skupimy się na zestawieniu połączenia VPN między Mikrotikiem a komputerem z systemem Windows 10, czyli tak zwany Road Warrior.
Konfiguracja Mikrotik
Przed konfiguracją pamiętaj, aby zaktualizować winboxa do najnowszej wersji. Z bocznego menu wybieramy Wireguard. Znakiem plusa dodajemy nowy wpis.
- Name: podajemy dowolnie
- MTU: w przypadku problemów z połączeniem możemy ustawić 1412
- Listen Port: port na którym nasłuchuje Wireguard
- Public Key: klucz generuje się automatycznie, potrzebny do konfiguracji połączenia na stacji klienta
W następnym kroku przypisujemy adres IP dla nowego interfejsu. Przechodzimy na IP->Addresses znakiem plusa dodajemy nowy wpis. Adresacje przydzielamy dowolnie pamiętając o masce na końcu, a jako interfejs wskazujemy wireguard1
Przy ustawieniach wiregurada jako Listen Port ustawiliśmy 13231, teraz musimy odblokować ten port na firewallu. Standardowo plusem dodajemy nowy wpis.
- Chain: input
- Protocol: udp
- Dst. Port: 13231
Konfiguracja Klienta Windows 10
Udajemy się na stronę https://www.wireguard.com/ i pobieramy wersje dla Windowsa. Instalacja wymaga od nas kliknięcia kilka razy w dalej. Po poprawnej instalacji w prawym dolnym rogu systemu powinniśmy zobaczyć czerwoną ikonkę Wireguard. Klikamy prawym myszy i dodajemy nowy pusty tunel.
Cała konfiguracja tunelu Wireguard jest w postaci tekstowej. Według oficjalnej instrukcji pole Nazwa uzupełniamy opisem wg0, wg1, wg2, etc. Możemy oczywiście nadać swoją własną nazwę jednak zalecałbym utrzymać standard nazewnictwa od producenta. Podczas dodawania nowego tunelu zostanie wygenerowana para kluczy. Klucz publiczny musimy dodać na Mikrotiku w zakładce Peer.
Interface wybieramy wireguard1. Ponieważ Mikrotik pracuje jako serwer VPN, pola Endpoint i Endpoint Port nie musimy uzupełniać. Pozostaje nam Allowed Address, czyli adres IP jaki otrzyma stacja kliencka. Jako, że interfejs wireguard1 konfigurowaliśmy na adres 10.10.0.1/24, podajemy dowolny adres z tej samej podsieci, zmieniając maskę na /32.
Wracam do konfiguracji klienta Windows 10. Dokończymy ustawienia podając następujące parametry:
WireGuard config
[Interface]
PrivateKey = 2Hbgp81rlmYCzQ/W4U5N8A8LpKwLn1SNbZchrwGHUGs=
Address = 10.10.0.2/32
DNS = 8.8.8.8
[Peer]
PublicKey = a3E49AWkTyaZI3IcqF/4qttMGagYjxd4YXPNjHLSZQs=
AllowedIPs = 0.0.0.0/0
Endpoint = 46.77.89.232:13231
PersistentKeepalive = 10
- Address: Adres IP jaki otrzyma stacja kliencka, taki sam jak w Allowed Address w konfiguracji Peer’a na MT
- DNS: podajemy dowolnie, nasz wewnetrzny DNS, bądź publiczny
- PublicKey: Klucz publiczny interfejsu wireguard1 na Mikrotiku
- AllowedIPs: podając 0.0.0.0/0 przepuścimy cały ruch przez Mikrotika, włącznie z wyjściem do Internetu. Jeżeli chcemy ograniczyć połączenia VPN z dostępem tylko do konkretnych hostów możemy je wymienić po przecinku np. 10.10.0.50/24, 10.10.0.100/24
- Endpoint: publiczny adres IP i port Mikrotika na, którym pracuje Wireguard
- PersistentKeepalive: jeżeli korzystamy z maskarady NAT, to należy włączyć podtrzymanie sesji, czas jest w sekundach
Polecany sprzęt
Z własnego doświadczenia mogę wam polecić poniższy sprzęt, z podziałem na ewentualne przeznaczenie routera.
Do domu i małej firmy(SOHO): hAP AX Lite , hAP AC3, RB4011, RB260GS, RB2011
hAP AC3 LTE, hAP AX2, hAP AX3, L009UiGS-2HaxD-IN, RB5009UG+S+IN, Audience
LTE: SXT LTE kit, SXT LTE6 kit, LHG 5, LHG LTE kit, Audience LTE, Chateau LTE6 ax, LTAP LTE6
Access Pointy: mAP lite, mAP, cAP AX, cAP XL AC
POE: hEX PoE
LAB: hEX lite
Średnia/Duża firma: CCR1036-12G-4S, CCR2004-16G-2S+
Wita, utworzyłem tunel wireguard, problem występuje przy podłączeniu dwóch hostów, działa to tak, że albo jeden albo drugi pinguje do mikrotika po vpn, jeśli wyłączę po stronie mikrotika, jednego z peerów to działa ten drugi i na odwrót. Oba peery są wpięte na ten sam interfejs wireguard w mikrotiku. Jedyna różnica z konfiguracją wyżej jest taka, że zamiast AllowedIPs 0.0.0.0/0 mam ustawioną na 10.10.0.0/24. Czy jest to normalne zachowanie? Podobne rozwiązanie mam zrobione na Linuksie i działa prawidłowo, łącznie z komunikacją pomiędzy hostami.
Stacje kliencie są za tym samym publicznym IP, mają jeden wspólny NAT?
Jedna jest za NAT, druga ma publiczny IP
OK, to proponuje włącznie topicu debug w System->Logging i zobaczymy co pokaże.
A ja mam inny problem. Po aktualizacji mikrotika hap ac2 do wersji 7, cały czas się zapętla uruchamianie. Nie pomaga reset, nie pobiera adresów ip, i nie wykrywa go winbox. Czy przez tą aktualizacja został uszkodzony? Dodam że dałem download & Install. I po tym wyłączył się, i już nie uruchomił. Po odłączeniu zasilania, i podlaczenia go ponownie, zaczą się uruchamiać, ale w kółko uruchamia się sam. I na tym tyle. Nic nie można zrobić, i w żaden sposób się na niego zalogować.
Spróbuj zainstalować poprzednią wersję przez netinstall https://wiki.mikrotik.com/wiki/Manual:Netinstall
W tym problem że netinsstall nie wykrywa routera. Próbowałem już na trzech laptopach, i nic.
Problem udało się rozwiązać. Co do routera hap ac2 konfiguracja odresów ip jaką podaje MikroTik 192.168.88.1, w tym wypadku się nie sprawdziła (bynajmniej u mni) na jakimś angielskim forum natrafiłem na całkiem inną adresację. Na Komputerze wystarczy wpisać ip, oraz maskę, 192.168.1.1, a w Netinsstall 192.168.1.2. Dopiero wtedy udało mi się z nim połączyć, i przywrócić go do żywych 🙂
Dziwne, powinno działać z domyślną adresacja.
W logach nie ma za wiele o wireguard, są informacje o tym, że nie może nawiązać połączenia, jeśli wyłączę wg na zdalnym hoście, lub czy dany peer po stronie mikrotika został włączony lub wyłączony, dodatkowo dodałem enpoint do jednego z hostów, niestety dalej to samo. Wrzuciłem do logów port 13231, oba hosty nadają na port. Po stronie hostów polecenie wg zwraca informacje lastest handshake poprawnie.
Cześć! Od lat śledzę Twoją stronę i robisz super robotę. Czy jesteś w stanie zrobić tutorial jak połączyć dwa mikrotiki WireGuardem tak aby z jednego cały ruch szedł przez drugi (server)? Pozdrawiam
W środę wleci poradnik z site-to-site, trochę o routingu też będzie, co prawda nie o tym o czym piszesz, alea tam wystarczy zmienić routing 0.0.0.0 na ip głownego mikrotika.
Świetnie! To ja już odliczam czas do środy 😉 Dobrego dnia i jeszcze raz wielkie dzięki za Twoje poradniki 😉 A może jeszcze poradnik z fail over z odpytywaniem konkretnego IP w internecie, a nie tylko bramy (jak to ma miejsce w większości poradników)? Bo co jest dostępne w necie, zawsze ma jakieś „ale” 😉
Dzięki:) Load Balancing i Failover jak dla mnie na MT kiepsko działały, może w RouterOSv7 coś się zmieniło, będę musiał po testować i zobaczymy.
Witam, mam pytanie. Ustawiłem WireGuarda na mikrotiku wszystko super, łącze się trzema użytkownikami mam dostępy do sieci lokalnej po stronie serwera VPN. Problem jednak mam z tym że kiedy mam uruchomiony tunel VPN na kliencie to cały ruch kieruje przez sieć VPN a chciałbym zrobić tak abym po stronie klienta miał dostęp do internetu z lokalnej bramy nie bramy po stronie serwera. Szukam w Google ale typowo pod mikrotika nie ma wyjaśnienia jak to zrobić.
Opcja AllowedIPs z 0.0.0.0/0 tuneluje wszystko. Dodaj tam podsieć za tunelem i powinno pomóc.
Super dzięki za pomoc, taka prosta rzecz a ja szukałem nie wiadomo gdzie 🙂
Super poradnik.
Próbowałem skonfigurować dwa komputery na jednym interfejsie wg. Niestety przy próbie połączenia zawsze działa tylko połączenie na jednym komputerze :-(.
Jak zrobię osobny interfejs na mikrotiku dla drugiego komputera to bangla.
Znalazłem gdzie robiłem błąd. W peer – allowed adress zamiast ip komputera 10.10.0.2/32 miałem 0.0.0.0/0.
Wszystko działa.
Hej.
Próbuje to skonfigurować (client2site) na 3 lokalizacjach i za każdym razem to samo.
WG się zestawia ale trace polaczenie z internetem i nie mogę pingować bramy, dns no i intenetu :/
Przygotowuje testowa konfigurację. Sprawdzę jak to u mnie zadziała.
wszystko fajnie, konfiguracja prosta, połączenie zestawia się z sukcesem – widać na aktywnych peerach…….tylko nie ma dostępu ani do Internetu, ani do sieci lokalnej 🙁
gdzie popełniłem błąd?
Internety piszą coś o NAT, ale nie rozumiem tego 🙁
A więc odpowiem sam sobie.
To czego brakuje w wiekszości poradników to NAT
W zakładce firewall > Nat musimy dodac:
add action=masquerade chain=srcnat src-address=10.10.0.0/24
10.10.0.0/24 – adres naszej podsieci konfigurowanej dla WireGuard w IP > Addresses
Pozdrawiam i dziękuje za pomoc 😉
Skonfigurowałem wg instrukcji.
Łącze sie z MT ale ping do routera oraz logowanie nie działa.
Wygląda jak firewall na Mikrotiku blokował połączenia. Dodaj accept na zdalną podsieć.
co z ipv6? zastosowalem te konfiguracje i faktycznie dziala ale tylko z ipv4. jak zrobic zbey peer laczacy sie po wireguardzie do mikrotika rowniez dostawal adres ipv6 ???
Niestety nie pomaga, maskarada również…
Straszna prostota… Zrobiłem i zostawiłem sobie też starego VPNa L2TP/IPSec – i widzę już że jest kolosalna różnica w szybkości pomiędzy WireGuard a L2TP/IPSec.
Mam drugi tunel IPIP+IPSec z drugą lokalizacją i aż mnie kusi przewalenie tego na WireGuard…
Jedyny minus – to brak logowania „prostego” w logach. Zawsze można włączyć w regule na firewallu LOG na portcie 13251 (zakładając, że domyślny) – ale to nie to samo co L2TP/IPsec, gdzie wszystko fajnie jest logowane.
Logów jeszcze nie weryfikowałem. Nawet z opcja debug mało pokazuje?
skonfigurowany client na MacOS połączenie działa w taki sposób że mogę zapingować różne adresy w zdalnej sieci ale na lokalnym komputerze brak Internetu oraz brak dostępów do zdalnych lokalnych zasobów np RDP i SMB
Próbowałem na bridgu dać Prox-arp , dodać adresacje wireguarda do nat, i nie działa.
Co mogę zerknąć jeszcze
poniżej konf , przykładowy IP endpoint oraz key
[Interface]
PrivateKey = OPstralalalav5DLtesttestlaa1eEuzFk=
Address = 10.172.111.2/32
DNS = 8.8.8.8
[Peer]
PublicKey = Mmcwe9LktralalalalatestetetHyoZoqlhHoSU=
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:13231
W terminalu na macos jak zrobić ip route albo show ip route, to jakie masz domyślne trasy? Dodaj jeszcze PersistentKeepalive przy Peer
Dodałem w terminalu Persist.. Jak włączam tunel nadal brak sieci i dostępów
traceroute, nic nie pokazuje zatrzymuje się i po chwili unknow host, dodałem NAT adresacji Wireguarda w MT i inne DNS-y nadal nie działa 😉 Sprawdzę jeszcze czy na Windowsie działa bez problemu i dam znać.
Na zwirtualizowanym Win11 (ARM) śmiga. na MacOS Ventura 13.1 śmiga
Okazało się że adresacje którą utworzyłem dla wireguarda miałem w jednym z wpisów firewalla dodawaną do blokowanych…. takie małe przeoczenie własnych zabezpieczeń. Sprawdziłem z inna lokalizacją i jak okazało się ze działa to znalazłem problem 😉
Dziękuję za podpowiedzi i za przydatny post.
/Przemek
No to dobrze, że się udało 🙂
Dodalem wszystko tak jak wskazales i nadal nie mam dostepu do zasobow sieci jak i internetu.
Po dodaniu komendy:
ip firewall/filter/add action=accept chain=input comment=”allow WireGuard traffic” src-address=10.10.0.0/24 place-before=1
Mam dostep wylacznie do routera. Moge wykonac konfiguracje w winbox ale do homeassistant, drukarki etc. brak dostepu (brak odpowiedzi na PING). Czy mozesz pomoc co robie zle? Wczesniej mialem skonfigurowane VPN ale tez niestety mialem podobny problem: mialem adres ip zewnetrzny z sieci domowej (na WireGuard nawet tego nie mam) ale nie moglem rowniez sie dostac do sieci wewnatrz domu (routera rowniez).
Nie masz przypadkiem jakieś reguły w Firewallu ustawione na drop? W Peer AllowedIPs = 0.0.0.0/0 jest na pewno? Jak wygląda IP->Routes?
Szczerze dodalem forward miedzy wireguard1 a LAN i wireguard1 i WAN no i dziala. Ale nie wiem czy wybralem odpowiednia droge 🙂
Nie moge wrzucic screena z IP->ROUTERS bo chyba nie ma na stronie takiej opcji.
Skonfigurowałem wszystko wg poradnika i wszystko działa. Łącząc się z internetu poprzez VPN, mam dostęp do serwera FTP (wbudowanego) jakbym był w LAN, wymagało to tylko jednego wpisu w regułach Firewalla. Mam także uruchomiony serwer SMB i niestety mam problem z dostępem do Routera poprzez SMB. Oczywiście jak jestem w sieci LAN, to z połączeniem nie ma problemu, ale gdy chcę połączyć się z internetu poprzez VPN do zasobów to niestety, ale się nie da. Pingi dochodzą do celu. Samba w MT nie ma dedykowanego portu, więc będąc w LAN, łączę się poprzez IP\share1, co trzeba zrobić, żeby można było się połączyć i internetu poprzez VPN? Co zmienić, gdzie szukać, co dodać i gdzie?
Samba, to jest zasób windowsowy? Czy na linuksie? Może wewnętrzny firewall serwer SMB blokuje dostęp z innej podsieci?
Zasób windowsowy. Co do Firewalla, to wyłączyłem wszystko co mogłoby blokować dostęp ale niestety lipa. Nie znalazłem w sieci opisu czy też rozwiązania takiego problemu. Czy możesz sprawdzić u siebie, czy taki scenariusz przynajmniej działa? Jeśli u Ciebie to zadziała to znaczy że u mnie jest gdzieś problem.
Ok, postaram się to przetestować w labie
Mam takie pytanie obecnie mam 40 tuneli OVPN jak chciałbym je zastąpić Wireguard to na MT robię jeden interface i 40 peers-ów (klientów) czy każdy klient ma swój interface?
Tak, jeden interfejs i 40 peerów:)
Super dzięki za wskazanie drogi i dzięki za dobrą robotę 😉
Panie Grzegorzu super sprawa! Dziękuję za świetny tutorial. Na androidzie również działa. Szybkość w porównaniu z innymi VPN (L2TP / OpenVPN) ogromna. Mam jednak pytanie. Co w przypadku kiedy chcemy utworzyć połączenia dla kilku użytkowników? Chodzi mi bardziej o sposób adresacji. Zakładam, że użytkownicy łączący się po VPN WireGuard mają adres IP w Adresses: 192.168.10.1/24 a w Peer dla Allowed IP ustawiam np 192.168.10.101/32. Co w przypadku kiedy chcę utworzyć kolejnego użytkownika? W Addresses tworzę kolejny wpis np 192.168.11.1/24 i kolejnego WireGuarda? Jest szansa żeby tunel brał kolejny adres np. 192.168.10.102?
Czy może dla wszystkich użytkowników ustawiam jednego WireGuarda a zmieniam maskę w AllowedIPs? Nie mogę jakoś tego zrozumieć 🙂 Jeżeli pytanie jest banalne to przepraszam ale dopiero się uczę 😉
Po stronie serwer Wireguarda dodajesz tylko kolejnego Peera. Nie musisz tworzyć nowego interfejsu. Na dniach pojawi się nowy materiał odnośnie Wireguarda i konfiguracji Point-to-multipoint, myśle, że materiał może być przydatny.
Bardzo dziękuję za podpowiedź. Już rozumiem 😉 Pozdrawiam
Co mam przepuścić na Fortigate, aby połączyć się klientem wireguard z sieci za forugatem ?
Protokół TCP no i port. Jeżeli używasz domyślnego to 13231, ewentualnie sprawdź czy foti nie ma dedykowanej aplikacji, bo działa w warstwie 7.
Czy jak mamy połączenie WAN po ppoe potrzebne jest jakieś inne ustawienie?
mam problem bo cala czas mam handshake error
Pytanie czy od swojego operatora na pewno dostajesz publiczne IP.
mam pytanie bo tunel działa super, łącze się z mikrotikiem w swoim domu, tylko mam jeden problem; podczas połączenia odcina mi Internet, a sieć domowa działa, nie mam pojęcia co źle wpisałem że net nie działa
Było już we wcześniejszych komentarzach, na kliencie masz ustawione
[Peer]
AllowedIPs = 0.0.0.0/0
czyli cały ruch jest kierowany przez Wireguarda, więc zamiast 0.0.0.0/0 podajesz adres swojej sieci z którą chcesz się komunikować np. 192.168.1.0/24
Miałbym pytanie do komentarza Pawła z 19.09.2022:
„To czego brakuje w wiekszości poradników to NAT
W zakładce firewall > Nat musimy dodac:
add action=masquerade chain=srcnat src-address=10.10.0.0/24
10.10.0.0/24 – adres naszej podsieci konfigurowanej dla WireGuard w IP > Addresses”
Czy to ustawienie jest bezpieczne, chciałbym puszczać cały ruch prze WireGuard.
U mnie Mikrotik jest bardziej w roli „bridge” za ruterem UPC z przekierowanym portem,
po w/w zmianach w NAT wszystko działa (dostęp do urządzeń w sieci i do internetu), ale z racji tego że nie mam podglądu na ruterze upc w logi czy ktoś mi się nie dobija na otwarty port, chciałbym mieć pewność że nie wpuszczę jakiegoś lewego ruchu do sieci poza mikrotikiem.
Dopóki nie zaczniesz się bawić DST-NAT i przekierowaniem portów na IP routera, to nie masz się czego obawiać.
Proszę o pomoc.
postawiłem road warrior i nawet pinguje hosty w domowej sieci (192.168.0.0/24) ale nie mam możliwości zarządzania samym routerem, nie działa web, winbox, ssh ale pinguje -_-
Postawiłem wireguarda na mikrotik zgodnie z tutorialem i niestety nie wiem dlaczego ale co 2 minuty (ciezko wychwycic czy to 2minuty czy ok 2 minuty) następuje ponowna wymiana kluczy dostaje w logu Keypair [nr] destroyed for peer 1
Oczywiście zaraz potem następuje ponowne ustalenie pary kluczy i połączenie wraca ale te kilka sekund rozbija połaczenie rdp na którym trzbea czekac pare sekund zanim to wróci. Jedyna zmiana jaką zrobiłem to klient ma ustawione AllowedIPs na konkretne ip serwerów/32 bo nie chcę całego ruchu puszczać przez wg. To miało słuzyc tylko do dostepu do rdp do serwerów, ale freeze co 2 minuty skutecznie to uniemożliwia.
Próbowałem zmniejszasz keepalive ale nic to nie dało. W koncu całkiem to wyciąłem z konfiga a mimo to ciągle w logu dostaje sending i receiving keep alive packet tak jakby dalej były próby sprawdzania łacza.
urzadzenie:RB750Gr3
wersja oprogramowania 7.12
Miałem podobny przypadek. Przez 2 tygodnie próbowaliśmy dociec co jest przyczyną i wyszło nam, że w tym konkretnym przypadku ten sam Hex co Twój miał tylko taki problem. Wymiana na Hap AC2 z tym samym konfigiem i problem zniknął. Również rozłączało co 2min, ale np przez 3h, później spokój na 2h i znowu na np. 2h rozłączało co 2min. Po drugiej stronie był RB5009
Pytanie
Czy wireguard powinien działać kiedy jestem za natem od isp i korzystam z ddnsa sn.mynetname.net?
a moje ustawienia będą następujące
[Interface]
PrivateKey = [priv_key]
Address = 192.168.0.90/30
DNS = 8.8.8.8
[Peer]
PublicKey = [pub_key]
AllowedIPs = 0.0.0.0/0
Endpoint = [srial].sn.mynetname.net:13231
PersistentKeepalive = 20
Cieszs sie, ze komus sie chce pisac poradniki tylko co z tego jak zaden z nich nie jest kompletny? Albo po prostu pomija pewne aspekty/nie tlumaczy nic. Np tutaj doanie interfejsu? Trzeba sie domyslic po co 🙂 bram informacji o NAT
Jak wykonać dostęp z wireguarda do rzeczy które są w bridge(eth2,eth3 etc)?
Tak aby klient wireguard w podsieci 10.0.1.0 widział i miał dostęp do rzeczy w 10.0.0.0?
dzieki za tutorial, ale co do uzytecznosci wireguarda mam zastrzezenia. W domu lub w firmie, ktora ma 3-5 pracownikow to mozna to zaimplementowac. Do wiekszej ilosci osob niestety sie nie daje. czemu? brak mozliwosci zarzadzania uzytkownikami, nie dosc ze musisz zablokowac konto domenowe to jeszcze pamietac zeby usunac tunel wireguardowy dla kogos.
brak mozliwosci wstrzykiwania tras, kazda zmiana powoduje ze trzeba na urzadzeniu klienckim zmieniac ustawienia.
No i konfiguracja: dla Ipsec VPN’a robie jedna instrukcje i wszyscy wiedza co i jak, tutaj musze sam komus ustawiac tunel, bo za kazdym razem cos sie zmienia 🙂
Dla mnie osobiscie wireguard to ciekawostka, wole zestawic polaczenie S2S za pomoca Ipsec’a czy tez remote access za pomoca IPsec, a nizeli wireguarda. Na chwile obecna nie widze tutaj zalet tego rozwiazania