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

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ả.

Cập nhật 10/2022: Bài viết đã được chỉnh sửa cho phù hợp với bản RouterOS 7.5 trở về sau

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 Routing – Table để 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
  3. Tick chọn ô FIB

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

Bấm tiếp vào mục IP –> 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: 192.168.0.100-192.168.0.200 là dãy IP nội bộ mình muốn chạy qua WireGuard.
    • Dst. Address: 192.168.0.0/24 là dãy IP nội bộ trong nhà, bấm tick vào ô phía trước để hiện hình dấu chấm than.
  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.
  4. Mục Dst. Address được thiết lập để các kết nối nội bộ trong mạng LAN sẽ không đi qua WireGuard.

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.100-192.168.0.200 (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!

Nguồn: thuanbui