kiến thức Hướng dẫn tạo VPN Wireguard Mikrotik và kết nối từ Windows dễ nhất

ohyourgod

Senior Member
Tình huống: Bạn có 1 router mikrotik (v7) và Nas hoặc ổ cứng mạng, máy in, camera, tài liệu các thứ để ở nhà. Khi đi làm mang theo laptop windows chạy wifi chùa, 4G và muốn truy cập về mạng LAN ở nhà.
(Xem thêm Hướng dẫn Wireguard cho Điện thoại và Mikrotik)

Thực tế đã có nhiều hướng dẫn dùng VPN L2TP hay PPTP cho mikrotik - windows rồi, nhưng về an toàn và tin cậy thì có thể xem xét dùng Wireguard.
Sau đây là hướng dẫn kết nối máy tính windows tới mikrotik qua Wireguard. Đây là hướng dẫn cơ bản, sẽ không import file, qr hay dùng auto generate script để hiểu rõ hơn và tiện cho sữa lỗi về sau.
Yêu cầu:
Router Mikrotik chạy V7 đã cấu hình internet, lan ok cả rồi, IP tĩnh hoặc DDNS, không cần mở port, CGNAT cũng được, DHCP Client hay LTE cũng được, không nhất thiết là PPPoE.
Máy tính client có thể cài được app Wireguard, có kết nối internet bất kì.
Độ khó: Chỉ tương đương vận hành máy giặt, tủ lạnh là có thể làm được 🤞
Bước 1. Tại Winbox/ wireguard, tạo 1 New Interface với tên bất kì, listen port mặc định hoặc tuỳ ý. Nếu đã có interface từ trước rồi thì không cần tạo thêm, có thể dùng nhiều peer trên 1 interface.
1713956687504.png


Bước 2. Tạo 1 IP Address List dành riêng cho wireguard cho dễ quản lý, địa chỉ bất kì, không trùng lặp là được, interface chọn wireguard interface đã tạo ở b1
1713956718555.png


Bước 3. Tải ứng dụng wireguard desktop về Installation - WireGuard (https://www.wireguard.com/install)
Add new empty tunnel, mặc định app sẽ tạo hộ Public và Private key, không đụng vào private key, không chia sẻ ra ngoài.
Copy Public key vào đâu đó. Chưa cần Save vội.
1713956874997.png

Bước 4, Tại router, mục Wireguard / Peers, add new wireguard peer
Interface chọn cái đã tạo ở B1, dán public key copy từ app wireguard bước 3 vào Public Key, tự chọn Allowed Address là IP sẽ cấp cho peer này khi nó kết nối (cần nằm trong subnet đã tạo ở B2), Apply
1713956937978.png

Vẫn tại đây, mở tab Wireguard, copy mục Public key vào đâu đó
1713956978602.png


Bước 5, Trở về App Wireguard desktop, dán thêm code sau vào
Code:
Address = 192.168.100.10/32 #Thay bằng Allowed Address ở Bước 4
DNS = 192.168.100.1 #Hoặc 8.8.8.8 tuỳ ý

[Peer]
PublicKey = ABCXYZ1234 #Thay cái này bằng Public Key copy ở bước 4
AllowedIPs = 0.0.0.0/0 #Để chấp nhận tất cả IP
Endpoint = IP Tĩnh hoặc tênmiền.ddns.com:13231 #13231 là Listen Port tạo ở bước 1
PersistentKeepalive = 10
Cấu hình giờ trông như sau, có thể chọn mục Kill-switch để nếu kết nối VPN bị rớt thì sẽ ngắt mạng, chứ không dùng mạng gốc.
Save lại
1713957291653.png


Bước 6 Tại IP / Firewall, chain input, protocal udp, cho phép dst port 13231 (listen port ở bước 1), action = accept, OK rồi kéo nó lên đầu danh sách trước drop
1713856586735.png


Bước 7, Bây giờ từ máy tính đã có thể kết nối thành công bằng 4G hay wifi chùa tới router qua Wireguard rồi, nếu vẫn chưa có quyền truy cập vào file sharing, máy in, webserver... trong LAN thì cần srcnat masquerade address list (tạo ở bước 2) như sau:
1713856775681.png

1713856809800.png


Kết quả: Kết nối thành công về mạng LAN ở nhà, giống như đang ngồi ở nhà luôn, có thể share file, in ấn vô tư.
Phần ping là Test với kết nối mạng hotspot Wintel.
Phần speedtest là cáp quang; Mạng gốc: 250 Mbps, qua Wireguard tới mạng 1000MB (cùng Hà Nội) vẫn 250 Mbps, khác biệt không đáng kể
1713957737232.png
1713958393049.png

1713977510478.png

1713957806320.png
 
Last edited:
sẵn cho mình hỏi bác thớt đang chạy NAS và MikroTik ảo qua Promox đúng ko?

tốc độ remote speed của bác được khoảng bao nhiêu vậy?
 
sau khi làm theo bác chủ không được thì gõ mấy dòng xong scan QR code ngon lành

Giờ có script auto hết rồi
FfsqRRV.png

còn ỉn cho file config kéo thẳng vào software trên laptop
Đúng vậy bác, nhưng cơ bản hướng dẫn là để làm quen các quy trình, sau đó quá dễ dàng, 1 click scan ăn liền. Hiểu rõ hơn quy trình, biết cụ thể cái gì lắp vào đâu thì cũng có lợi dễ debug hơn nếu gặp sự cố, dễ dàng tạo peer dự phòng, export nó upload lên cloud, trường hợp khẩn cấp có thể mượn tạm PC nào đó kết nối về nhà, xong việc thì đổi private key hoặc tạo lại peer các kiểu...
 
Last edited:
sẵn cho mình hỏi bác thớt đang chạy NAS và MikroTik ảo qua Promox đúng ko?

tốc độ remote speed của bác được khoảng bao nhiêu vậy?
Đúng vậy bác, mik và nas qua proxmox, card lan ảo hóa, ko passthrough. Mạng nhà 1000Mbps, ở ngoài mới dùng 4G dc max là 60Mbps, chưa có điều kiện test với tốc độ cao hơn.
 
Đúng vậy bác, mik và nas qua proxmox, card lan ảo hóa, ko passthrough. Mạng nhà 1000Mbps, ở ngoài mới dùng 4G dc max là 60Mbps, chưa có điều kiện test với tốc độ cao hơn.

bác cho e tham khảo specs con pc nas router với

em cũng đang đau đầu vụ remote speed chậm quá

Mạng ngoài 400Mbps mà remote vào ăn có 20Mbps không stream phim từ Xpen PLEX nổi
 
bác cho e tham khảo specs con pc nas router với

em cũng đang đau đầu vụ remote speed chậm quá

Mạng ngoài 400Mbps mà remote vào ăn có 20Mbps không stream phim từ Xpen PLEX nổi
Cấu hình quốc dân J4125 + 4 cổng i226
+ chắp vá thêm 1 cổng RTL8125 qua minipcie.
Vì chạy card lan bridge ảo hóa nên card realtek cũng nhận ok. Tốc độ trong LAN max dc 1.5Gbps.
Tốc độ remote đến nay đạt max theo 4G (50-60Mbps) xem dc bluray bitrate cao.
Bác thử bật / tắt fast track, đổi MTU xem
Edit: mạng Viettel 250Mbps đi qua wireguard tới Fpt 1000Mbps kết quả gần như ko suy giảm
 
Last edited:
Cấu hình quốc dân J4125 + 4 cổng i226
+ chắp vá thêm 1 cổng RTL8125 qua minipcie.
Vì chạy card lan bridge ảo hóa nên card realtek cũng nhận ok. Tốc độ trong LAN max dc 1.5Gbps.
Tốc độ remote đến nay đạt max theo 4G (50-60Mbps) xem dc bluray bitrate cao.
Bác thử bật / tắt fast track, đổi MTU xem
bác ở đâu nhỉ?

em định giao lưu phát
 
sau khi làm theo bác chủ không được thì gõ mấy dòng xong scan QR code ngon lành

Giờ có script auto hết rồi
FfsqRRV.png

còn ỉn cho file config kéo thẳng vào software trên laptop

Lần trước các bác khác post cái link tự tạo WG kia em cũng nói rồi, cái trang đó tạo ra cái restriction vô cớ là 1 interface WireGuard chỉ dùng cho 1 peer, bởi chẳng có lý do gì lại tự dưng để allowed-address=::/0,0.0.0.0/0 trong cái config peer trong cấu hình RouterOS mà nó tạo ra. Rõ ràng là bên trên đã hỏi đủ thông tin về địa chỉ IP private của peer rồi. Đặt cái giới hạn như thế này làm cho bác có 5 thiết bị bên ngoài cần nối về nhà thì lại phải đi tạo 5 interfaces trên router, tốn kém tài nguyên router một cách vô ich (thêm interface không chỉ thêm tài nguyên quản lý interface, mà còn thêm 1 process wireguard nữa phải chạy, mất 1 cổng, thêm route, thêm rule tường lửa, v.v...).

Ngoài ra để allowed-address=::/0,0.0.0.0/0 thế kia, nếu bác sau này thử mày mò add thêm peer vào cái interface có sẵn thì cũng sẽ không hiểu làm sao mà nó không chạy, vì đâu có biết là phải edit cái Allowed IPs này trên cấu hình các peers dùng chung interface để chúng không đè lên nhau đâu. Cái allowed-address=::/0,0.0.0.0/0 kia nó đè lên tất cả các dải địa chỉ mà bác chọn khi tạo thêm peer mới.

Làm theo hướng dẫn của bác chủ thread thì ít ra còn biết mỗi khi thêm thiết bị phải làm gì, và chỉ cần chung 1 interface WG và dải địa chỉ cho tất cả các thiết bị remote.

EDIT: bác chủ trang web đã update trang rồi và giờ mục allowed-address đã OK, và bác ấy cũng thêm phần hỗ trợ thêm peer vào profile sẵn có 👍
 
Last edited:
Cấu hình giờ trông như sau, có thể chọn mục Kill-switch để nếu kết nối VPN bị rớt thì sẽ ngắt mạng, chứ không dùng mạng gốc.

Chỗ này không hẳn như bác nói. Cái check box nó xuất hiện khi bác có ::/0 hoặc 0.0.0.0/0 đâu đó trong mục AllowedIPs của cấu hình peer. Có những cái đó thì mặc định client WG trên Windows sẽ sửa bảng route của Windows để tất tần tật mọi thứ dùng IPv6 và/hoặc IPv4 (tùy bác có ::/0 hay 0.0.0.0/0 trong list) đều chạy qua tunnel WireGuard. Nói cách khác là thiết bị Windows này hết đường truy cập các thiết bị khác trong LAN mà nó đang ngồi. Tắt checkbox đi thì nó sẽ sửa ::/0 thành ::/1, 8000::/1, và 0.0.0.0/0 thành 0.0.0.0/1, 128.0.0.0/1. Những cặp 2 dải này khi gộp lại cũng gồm toàn bộ các địa chỉ IPv6 hay IPv4 như các dải gốc, nhưng khác biệt là cái client WG Windows nó không sửa bảng route ép tất cả mọi thứ chạy qua tunnel nữa, mà chỉ add các dải như thấy trên dòng AllowedIPs kia vào bảng route.

Khi này trong bảng route các mục này vẫn sẽ có priority cao hơn cái route mặc định đi gateway của router mạng local (vì rule đi default gateway đó sẽ là cho destination 0.0.0.0/0 với ::/0, và /0 không "cụ thể" bằng /1), nhưng priority sẽ thấp hơn route của dải IP mạng LAN (thí dụ là dải với /24, "chính xác" hơn /1) với route on-link. Kết quả là sẽ vẫn truy cập được thiết bị kiểu máy in trong mạng hiện đang ngồi.

Nhưng tắt như thế và cấu hình nhầm mục DNS chẳng hạn, thì có khả năng Windows quay sang sử dụng DNS server của LAN hiện thời, và thành công nên bác không phát hiện ra được là nhầm. Kết quả có thể là lộ thông tin nếu như bác vốn muốn dùng tunnel để giấu mọi traffic internet khỏi LAN hiện thời. Khi để route mọi thứ qua WG như khi bật check box thì lỗi kiểu này phát hiện ra ngay vì máy chủ DNS không liên lạc được.
 
Nếu các bác như em, không bao giờ dùng Windows với tài khoản có quyền hạn admin (chỉ group Users bình thường), bật UAC lên max và chỉ dùng tính năng "Run as Administrator" khi cần chỉnh sửa thiết lập hay chạy các ứng dụng đặc biệt cần quyền hạn cao thì sẽ thấy một điều phũ phàng là cái GUI của client WG cho Windows nó không cho phép chạy dưới desktop không có quyền hạn của nhóm Builtin Administrators:

1714005440825.png


Run as... hay UAC cũng vô ích. Tất nhiên không chỉ vì mỗi cái WG mà lại phải quay sang login bằng tài khoản Admin cho các công việc thường ngày làm gì. Rất may là WG cho Windows có thể chạy được ở chế độ 100% không cần GUI. Và khi quen rồi thì dùng thế này tiện hơn hẳn dùng GUI. Hướng dẫn này ở phần Enterprise Usage


Nôm na là không cần GUI các bác có thể chạy lệnh wg genkey với wg pubkey (ấn Enter rồi Ctrl+Z sau khi paste private key) để tạo private key và lấy public key tương ứng bình thường:

1714005730060.png


Rồi tạo file config bằng editor nào đó. Hoặc nếu lười thì có thể login tạm vào admin chạy cái GUI cho nó tạo config rồi export ra file .zip. Đại khái là khi có file config ở dạng file văn bản .conf rồi thì các bác chạy:

Code:
wireguard /installtunnelservice C:\path\to\some\myconfname.conf

trong cửa sổ dòng lệnh có UAC, nó sẽ tạo Service sử dụng file cấu hình kia. Lúc này để bật tắt tunnel các bác chỉ cần vào bảng Services của Windows (services.msc), cái này chỉ cần UAC bình thường, rồi start hay stop cái service WireGuard Tunnel: xxx tương ứng mà lệnh kia đã tạo ra. Hoặc tạo file .bat chạy net start với net stop, sau này chỉ cần chạy chúng trong cửa sổ CMD đã run as admin:

1714006336697.png


Muốn chỉnh sửa cấu hình thì chỉ đơn giản là edit file văn bản .conf kia, rồi restart cái service. Muốn gỡ cái service thì chạy lệnh như trang kia hướng dẫn:

Code:
wireguard /uninstalltunnelservice myconfname

Thực ra cái GUI kia dưới nền nó cũng làm vậy thôi. Lúc bác Activate 1 profile thì nó tạo service rồi start service. Lúc tắt thì nó stop rồi XÓA cái service đi.
 
Mình làm theo hướng dẫn nhưng chỗ này nếu đặt DNS là 192.168.0.1. Máy tính vẫn có thế kết nối với các máy trong lan bằng địa chỉ IP nhưng không kết nối được với website bên ngoài. Ví dụ voz.vn . Phải đổi DNS thành 1.1.1.1 hoặc 8.8.8.8 thì mới kết nối được với website bên ngoài. Vậy mình có cấu hình sai chỗ nào không mà bị như vậy nhỉ?
1714330065350.png
 

Attachments

  • 1714330048971.png
    1714330048971.png
    3.5 KB · Views: 8
Mình làm theo hướng dẫn nhưng chỗ này nếu đặt DNS là 192.168.0.1. Máy tính vẫn có thế kết nối với các máy trong lan bằng địa chỉ IP nhưng không kết nối được với website bên ngoài. Ví dụ voz.vn . Phải đổi DNS thành 1.1.1.1 hoặc 8.8.8.8 thì mới kết nối được với website bên ngoài. Vậy mình có cấu hình sai chỗ nào không mà bị như vậy nhỉ? View attachment 2466454

Khi đặt như này thì máy dùng WireGuard sẽ dùng router làm server DNS. Nếu không phân giải được tên miền thì có thể có các lý do:

* RouterOS chưa bật "Allow Remote Requests" chỗ DNS Settings (IP -> DNS)

1714353038808.png


* Cấu hình danh sách servers DNS upstream không đúng (ít khả năng). Bác kiểm tra các thông số trong danh sách Servers/Dynamic Servers/DoH Server trên hình trên, tùy theo bác sử dụng cái gì làm upstream server.

* Tường lửa đang block client WireGuard truy cập vào router. Thí dụ nếu bác dùng cấu hình mặc định của router MikroTik thì trong cấu hình tường lửa sẽ có rule ở chain input, drop tất cả kết nối không đến từ interface list LAN:

1714353328622.png

1714353201676.png


Và vì ở hướng dẫn trên chưa có bước add interface WireGuard vào list LAN nên router sẽ chặn truy cập vào cổng 53 UDP/TCP của router từ interface này. Nếu dùng cấu hình như vậy thì bác cần add interface WireGuard vào interface list LAN (sửa tên interface và list cho phù hợp):

Code:
/interface list member
add interface=wireguard1 list=LAN

Hoặc mặc dù không dùng cấu hình mặc định nhưng trong bảng filter của tường lửa cũng block kết nối tới router, chỉ cho 1 số ngoại lệ. Nếu vậy thì bác cũng cần thêm rule ngoại lệ trên chain input, cho accept từ các clients của interface WireGuard (có thể dùng in-interface=wireguard1 hay src-address=192.168.0.0/24) này truy cập cổng 53 UDP/TCP của router, sau đó kéo rule này lên bên trên rule drop ở chain input trong bảng filter.
 
Mikrotik mình nằm sau modem nhà mạng. Mikrotik cài DHCP client.
Cài Wireguard không thấy báo lỗi gì nhưng không thể access được các thiết bị trong mạng bao gồm cả router Mikrotik. Bác nào từng cấu hình behind a NAT xem giúp mình với.
1714358531048.png


1714358560956.png


1714358587837.png


1714358608459.png
 
Mikrotik mình nằm sau modem nhà mạng. Mikrotik cài DHCP client.
Cài Wireguard không thấy báo lỗi gì nhưng không thể access được các thiết bị trong mạng bao gồm cả router Mikrotik. Bác nào từng cấu hình behind a NAT xem giúp mình với.
View attachment 2466643

View attachment 2466644

View attachment 2466645

View attachment 2466646
Trong NAT bác thử thêm scrnat cho out-interface là ca wg interface vào trước cái nat wg IP.
Chỗ mangle, thêm rule accept prerouting từ dải wg IP 10.10.10.0/24 đến local IP xem sao
 
Back
Top