Chuyên mục
Network

Cấu hình WireGuard VPN trên router Mikrotik và định tuyến tự động dịch vụ mạng quốc tế

Mạng mẽo ở Việt Nam “đứt cáp” liên tục khiến kết nối ra quốc tế chập chờn, chậm chạp rùa bò không chịu nổi. Để giải quyết tình trạng này, mình thường thiết lập VPN Server trên 1 VPS ở Hong Kong / Japan / Korea để chuyển hướng kết nối qua VPN. Tốc độ truy cập mạng quốc tế được cải thiện ngay lập tức.

Tuy nhiên, vẫn còn đó những hạn chế:

  • Chỉ các máy tính / máy tính được cấu hình VPN Client mới có thể kết nối đến VPN. Nếu trong nhà có nhiều thiết bị, việc cấu hình sẽ vừa mất thời gian, vừa khó quản lý.
  • Không cấu hình VPN Client được cho các thiết bị thông minh như Smart TV, Google Home, Alexa,…
  • Kết nối đến các website trong nước cũng bị chuyển hướng đến VPN ảnh hưởng đến tốc độ.

Làm sao để cấu hình tất cả thiết bị mạng trong nhà đều được chuyển hướng kết nối đến VPN Server tự động mà không cần phải cấu hình từng thiết bị? Làm sao định tuyến tự động dịch vụ mạng quốc tế thông qua VPN, còn mạng trong nước vẫn duy trì kết nối trực tiếp, không chạy qua VPN?

Nếu bạn đang sử dụng router Mikrotik, bài viết này sẽ hướng dẫn bạn xử lý hai vấn đề trên. Đầu tiên mình sẽ hướng dẫn cách cấu hình WireGuard VPN trên router Mikrotik. Sau đó, mình sẽ hướng dẫn cách định tuyến tự động cho dịch vụ mạng quốc tế chạy qua VPN.

I. Yêu cầu thiết bị

  • Router Mikrotik: RB750Gr3, hAP AC2,… đã được cấu hình cho mạng nội bộ trong nhà.
  • 1 VPS đã được thiết lập WireGuard Server. Bạn có thể tham khảo hướng dẫn dưới đây để tạo VPN Server miễn phí

II. Cập nhật lên RouterOS 7

Router mạng mình đang sử dụng là Mikrotik RB750Gr3, đang chạy RouterOS 6. Để cấu hình WireGuard VPN trên Mikrotik, bắt buộc bạn phải nâng cấp lên RouterOS 7.

Phiên bản RouterOS 7 này hiện vẫn đang được phát triển, chưa ra mắt bản Stable nên có thể vẫn còn gặp 1 số lỗi vặt. Bạn cần cân nhắc nếu đang dùng cho mạng công ty, doanh nghiệp. Còn mình sử dụng ở nhà bản 7.1rc4 hơn 2 tháng nay và không gặp vấn đề nào cả.

1. Backup cấu hình

Trước khi nâng cấp lên RouterOS 7, bạn nên lưu lại cấu hình hiện tại đề phòng bất trắc, nếu gặp lỗi sẽ phục hồi lại nhanh hơn.

Mở Winbox, kết nối vào router Mikrotik

  1. Bấm vào mục Files ở menu bên trái
  2. Bấm vào nút Backup
  3. Nhập tên (Name), mật khẩu (Password) cho bản backup
  4. Bấm Backup để lưu lại

Tiếp theo, bấm chuột phải trên file backup vừa lưu lại và chọn Download để tải về máy tính.

2. Cập nhật firmware

Bạn bấm vào mục System –> Packages và thao tác tiếp như sau

  1. Bấm Check for Updates
  2. Chọn Channel: development
  3. Bấm Check for Updates và bấm tiếp Download&Install để tải và cài đặt fimware mới nhất

Đợi vài phút cho Router cài đặt và khởi động lại. Quay lại mục Packages, bạn sẽ thấy thông tin firmware mới nhất: Version 7.1rc4

III. Cấu hình WireGuard trên Mikrotik

1. Chuẩn bị file Wireguard Client

Trước tiên, bạn cần phải truy cập WireGuard VPN Server để tạo 1 Client mới dành cho Mikrotik và tải file conf về. Nội dung file sẽ tương tự như dưới đây.

[Interface]
PrivateKey = UDbFxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxaN9Oms=
Address = 10.6.0.2/24
DNS = 10.2.0.100

[Peer]
PublicKey = e/VZhqIyyyyyyyyyyyyyyyyyyyyyyyyy/4wS37B5x8QMxg=
PresharedKey = 5XvmWvYUm2xxxxxxxxxxxxxxxxxxxxxxxxxxxlgYPoFzj8Q618=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 146.ooo.iii.eee:51820
PersistentKeepalive = 0

Chúng ta sẽ dùng thông tin trong file conf này để cấu hình WireGuard client trên router Mikrotik

2. Tạo WireGuard Interface

Trong WinBox, bạn truy cập vào mục WireGuard theo các bước sau

  1. Bấm vào mục WireGuard ở Menu bên trái
  2. Bấm dấu +
  3. Đặt tên (Name) và điền vào Private Key (lấy trong file cấu hình ở trên)
  1. Bấm vào tab Peers
  2. Bấm dấu + để tạo Peer
  3. Nhập vào các thông tin Public Key, Endpoint, Endpoint Port, Allowed Address, Preshared Key. Tất cả đều có trong file cấu hình WireGuard client ở bước trên.

Sau đó bấm OK để lưu lại

3. Tạo Address List

Truy cập vào mục Address List (Bấm vào menu IP –> Address List)

  1. Bấm dấu +
  2. Nhập vào dãy IP Address trong file cấu hình ở bước 1
  3. Interface: chọn interface WireGuard vừa tạo ở bước 2

Bấm Apply và OK để lưu lại.

IV. Cấu hình Routing cho WireGuard

1. Tạo Route List

Bấm vào menu IP –> Route để truy cập tính năng Route List. Bấm vào tab Tables để tạo Routing Table mới cho WireGuard

  1. Bấm vào dấu +
  2. Đặt tên cho Routing Table tuỳ ý bạn. Mình chọn To-WG-HK

Bấm Apply và OK để lưu lại.

Chú ý: Nếu bạn đang sử dụng firmware 7.1 trở lên, tab Tables này đã được chuyển thành mục Table nằm trong menu Routing

Quay lại tab Routes để cấu hình định tuyến

  1. Bấm vào dấu +
  2. Thiết lập thông số như sau:
    • Dst Address: 0.0.0.0/0
    • Gateway: tên của Wireguard Interface bạn tạo ở bước III.2
    • Routing Table: chọn Table bạn vừa tạo ở bước trên

Bấm Apply và OK để lưu lại

3. Tạo NAT Rule

Truy cập tiếp vào mục Firewall (menu IP –> Firewall), bấm vào tab NAT và bấm dấu + để tạo NAT Rule mới cho WireGuard Interface

  • Chain: srcnat
  • Out. Interface: WireGuard
  • Action: masquarage
  • Comment: Wireguard Internet Access

Bấm Apply và OK để lưu lại

Tiếp theo, kéo NAT Rule mới tạo này lên vị trí thứ hai, nằm sau Rule của PPPoE Internet.

4. Tạo Mangle Rule

Mangle là 1 tính năng của Mikrotik giúp đánh dấu gói tin để xử lý tuỳ theo các điều kiện thiết lập trước. Chúng ta sẽ cần tạo 1 Mangle Rule để chuyển hướng các kết nối mạng đi qua WireGuard VPN.

Các chế độ hoạt động (Chain) của Mangle Rule

Mở cửa sổ Firewall và tạo Mangle Rule theo các bước sau

  1. Bấm vào tab Mangle
  2. Bấm vào dấu +
  3. Nhập thông số:
    • Chain: prerouting
    • Src. Address: dãy IP nội bộ trong nhà
  4. Bấm qua tab Action, chọn tiếp:
    • Action: Mark Routing
    • New Routing Mark: To-WG-HK (chọn Routing Table bạn đã tạo ở bước IV.1

Với các thiết lập này, tất cả các gói tin xuất phát từ mạng nội bộ sẽ được xử lý như sau

  1. Gói tin xuất phát từ 192.168.0.100, truy cập đến yahoo.com
  2. Mangle Rule sẽ áp dụng Routing Table To-WG-HK, và sẽ chạy qua Interface WireGuard-HK
  3. NAT Rule sẽ xử lý masquarage cho gói tin rời khỏi WireGuard-HK và gửi đến VPN server để xử lý tiếp

Lưu ý: Nếu trong mạng nội bộ đang có 1 máy tính chạy AdGuard Home hay Pi-Hole trong nhà để chặn quảng cáo, bạn cần phải chỉnh lại phần Src. Address để loại bỏ IP của máy tính này ra khỏi danh sách, nếu không sẽ bị lỗi DNS không phân giải được tên miền khi kích hoạt VPN.

Ví dụ: IP của máy đang chạy AdGuard Home là 192.168.0.5, mình có thể chỉnh lại phần Src. Address thành 192.168.0.20-192.168.0.199, hoặc bạn có thể giới hạn danh sách chỉ các thiết bị trong danh sách DHCP Client sử dụng VPN bằng cách đổi thành 192.168.0.101-192.168.0.199 (cái này tuỳ thuộc vào cấu hình DHCP hiện tại của bạn mà thay đổi cho phù hợp)

V. Định tuyến tự động chỉ cho mạng quốc tế ra VPN

Với cách thiết lập ở bước IV, mọi kết nối từ trong mạng nội bộ đều sẽ được gửi đến WireGuard VPN Server. Mình sẽ làm thêm 1 bước nữa để phân luồng mạng:

  • Truy cập ra quốc tế sẽ chạy qua VPN.
  • Truy cập trong nước sẽ đi trực tiếp, không qua VPN.

Nguyên lý hoạt động như sau

  • Tạo 1 danh sách tất cả IP của Việt Nam
  • Chỉnh lại Mangle Rule: chỉ các truy cập nào không phải đến IP Việt Nam mới chạy qua VPN

1. Tạo danh sách IP Việt Nam

Trong Winbox, bấm vào mục Terminal để truy cập giao diện dòng lệnh. Sau đó nhập vào nội dung trong file sau:

https://gist.githubusercontent.com/10h30/4f1e8600b56522259e018df5524c80fc/raw/9b77e67edfa38da277c1c372a99dae7b09d29062/mirotik-vietnam-ip-address-list

Sau đó, bạn truy cập vào tab Address Lists sẽ thấy danh cách Vietnam IP List bao gồm toàn bộ IP ở Việt Nam

2. Chỉnh sửa Mangle Rule

Tiếp theo, mở lại Mangle Rule đã tạo ở bước IV.4, chuyển qua tab Advanced, phần Dst. Address List: chọn Vietnam IP List, và bấm vào ô vuông phía trước cho nó hiện ra dấu !

Sau đó bấm Apply và OK

3. Kiểm tra kết nối

Mình truy cập vào 2 trang https://speedtest.nethttps://speedtest.vn, hai bên sẽ hiện thông tin IP khác nhau:

Server của Speedtest.net nằm ở nước ngoài, nên kết nối được tự động định tuyến qua VPN server của mình nằm ở HostHatch Hong Kong. Do đó mục ISP hiển thị là HostHatch.

Server của Speedtest.vn nằm trong nước, nên được kết nối trực tiếp không qua VPN. Do đó mục thông tin ISP hiển thị đúng tên ISP mình đang dùng: VIETTEL

VI. Cấu hình nâng cao

1. Hẹn giờ kích hoạt VPN

Mình không muốn sử dụng VPN cả ngày mà chỉ muốn nó kích hoạt vào buổi tối từ 18:00 đến 22:00. Dễ thôi, quay lại mục Mangle Rule, vào tab Extra, mục Time, chỉnh giờ lại là xong.

2. Không dùng VPN cho Netflix

Nếu bật VPN, Netflix sẽ tự động chuyển vùng ra khỏi Việt Nam, khiến cho một số phim chỉ dành cho thị trường Việt Nam biến mất khỏi danh sách. Hoặc tệ hơn là không xem được luôn do Netflix chặn VPN. Do đó, mình sẽ cấu hình thêm để cho dịch vụ Netflix không chạy qua VPN.

Sử dụng list IP của Netflix dưới đây để tạo 1 Address List mới

https://gist.githubusercontent.com/10h30/53d4f9ceed315683752e1bd7c2b44569/raw/ea74b5f5b77cc90fe87f31fa803d253024decc29/netflix-ip-list

Sau đó tạo 1 Mangle Rule mới như sau:

  • Chain: Prerouting
  • Source: 192.168.0.101-192.168.0.199
  • Dst. Address List: Netflix IP
  • Action: Mark Routing
  • New Routing Mark: main

Tiếp theo, kéo rule Netflix lên trên cùng để được ưu tiên xử lý trước.

Vậy là xong!

Chúc bạn thiết lập Wireguard VPN trên router Netflix thành công!

Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!

Bởi Thuận Bùi

Runner at Yêu Chạy Bộ. Blogger at Ba Lô & Dép Lào. Web Developer at TB's Blog.
Follow me: Facebook / Instagram

18 trả lời trong “Cấu hình WireGuard VPN trên router Mikrotik và định tuyến tự động dịch vụ mạng quốc tế”

Chào bạn, Thuận Bùi

Sau mấy hôm tìm hiểu thì mình đã biết nguyên nhân tại sao không chạy?

– Là do ở phần IP > Routes – Route list, phần check gateway không được phép để là ping (nếu như ở v6 thường hay check ping).

– Check gateway bằng ping chỉ hoạt động khi phần gateway được gán là 1 địa chỉ IP cụ thể (theo như giải thích của chuyên gia trong đội ngũ kỹ thuật hãng Mikrotik).

+ Mình có thêm 1 thắc mắc là:
– nếu sử dụng VPN Wireguard, ở phần Wireguard peer – Allowed address điền là 0.0.0.0/0, address list gán cho inferface wireguard là 10.6.0.2/24 , chạy ok.
– nhưng nếu sử dụng split-tunnel bằng cách đổi Allowed address thành 10.2.0.0/24 (chỉ sử dụng DNS Server của Pi-Hole để chặn quảng cáo mà không chuyển hướng đường truyền qua VPN Server) thì không chạy, vì lúc này dường như Router Mikrotik sẽ không hiểu cái dải 10.2.0.0/24 – cái này cần điều chỉnh ra sao để cho hợp lý bạn nhỉ?
– Vì khi đó, sẽ tạo 2 wireguard -> 1 cái đi VPN -> quốc tế (đã bao gồm chặn quảng cáo), và 1 cái chỉ DNS để chặn quang cáo (trong nước) (failover cho wireguard)

Hi Bạn,
Cám ơn bài chia sẽ rất rõ của bạn.
Nếu thiết lập nâng cao chọn Dst Address khác với VN IP thì lại gặp vấn đề mangle xử lý luôn các destination là LAN IP (được coi là khác IP VN) cũng qua đường đó và không kết nối được mạng LAN. Bạn gặp vấn đề đó chưa? Mình phải tạm thời add nhóm LAN vào IP VN nhưng có vẻ hơi thủ công quá.
Ngoài ra không hiểu sao giao diện IP/Route của mình trên RB4011 V7.1.1 không có tab route table.

1. Nếu thiết lập nâng cao chọn Dst Address khác với VN IP thì lại gặp vấn đề mangle xử lý luôn các destination là LAN IP (được coi là khác IP VN) cũng qua đường đó và không kết nối được mạng LAN ?
–> Cái này mình chưa gặp bao giờ. Tất cả kết nối LAN đều hoạt động bình thường với thiết lập WireGuard thông thường hoặc WireGuard Mangle nâng cao.
2. Ngoài ra không hiểu sao giao diện IP/Route của mình trên RB4011 V7.1.1 không có tab route table.
–> Trên 7.1.1 thì mục Route Table nó chuyển vô Routing –> Tables rồi nhé

Mình nói rõ hơn là trường hợp của mình có nhiều VLAN trong nhóm Address list LAN là source (các vlan cho IoT, private…) nên gặp hiện tượng route theo To-WG routing table.
Mình giải quyết bẳng cách thêm một mangle rule trước đó chọn Source là ‘Address List LAN’ và Destination là ‘Address List LAN’ và routing mark theo ‘main’ routing table.

Hi bạn,
Mình muốn hỏi có cách gì để set up sao cho chỉ dùng đường wireguard khi tốc độ kết nối quá chậm dưới ngưỡng nào đó không. Ý mình là bình thường thì chạy main route. Khi nào chậm quá mới qua VPN?
Cám ơn bạn.

Mình không rõ Mikrotik có sẵn chức năng này không. Nhưng nếu có thì mình cũng không dùng vì việc phải đo tốc mạng liên tục để kiểm tra sẽ gây ảnh hưởng đến độ ổn định của mạng LAN trong nhà. Mình thường tắt mở thủ công hoặc hẹn giờ tự động tắt mở.
Nếu cần thiết lập thì mình sẽ dùng 1 máy ảo: tạo 1 cronjob chạy định kỳ mỗi 60′ hoặc 30′ sử dụng speedtest-cli, rồi dựa vào kết quả kiểm tra sẽ tắt hay mở Mangle Rule của Mikrotik thông qua API: https://wiki.mikrotik.com/wiki/Manual:API

Mình cài Wireguard trên Mikrotik HapAc2 với VPN của 1.1.1.1, mạng nhà đang dùng là VNPT.
Ban ngày dùng thì không sao nhưng khoảng 7-8g tối đổ đi là mạng đi các trang quốc tế rất rất chậm, FB, Shopee, BBC. Thậm chí dùng Wireguard còn chậm hơn khi không dùng (= tắt Wireguard trên Mikrotik).
Bạn có thể hướng dẫn và giải thích cho m tại sao không?

WireGuard mục đích là để tạo VPN, không có gì bảo đảm nó sẽ cải thiện tốc độ bạn nhé. Nếu bạn cài WireGuard trên cái VPS nào bị nhà mạng bóp băng thông thì truy cập thông qua nó sẽ không cải thiện được gì cả.
Bạn phải tìm cái VPS nào mà không bị nhà mạng chặn kết nối thì mới hy vọng cải thiện được tốc độ.

anh Thuận Bùi ơi, cho em hỏi chút
em hiện đang ở Nhật, sử dụng đường truyền cáp quang của Nhật và acc kết nối pppoe họ không có cung cấp, tức là có thể họ thiết lập bên trong moderm hay sao ấy em cũng không rõ.
thì anh Thuận Bùi có thể cho em hỏi với cách là nhận DHCP từ moderm ISP thì dùng cách ở trên của anh có được không anh ?
ý em là PC client –> Router Mikrotik: hAP AC2 (nhận IP DHCP)–> Moderm Cáp quang của nhà cung cấp
mong anh trả lời, em cảm ơn ạ

Làm được hay không thì em nên tự mò là sẽ biết ngay mà. Anh thấy vẫn có thể thiết lập bình thường trên Mikrotik, nó sẽ đóng vai trò làm WireGuard client và phân phối mạng đến PC client trong mạng nội bộ.

Dạ vâng em cảm ơn anh nhiều ạ

tại em đang xem xét nếu làm được thì mới mua router Mikrotik anh ạ
thấy khá thú vị nên chắc em đầu tư 1 cái router về ngâm cứu ạ

cảm ơn anh

Trả lời