Trời tính không bằng máy tính

blog, tutorial

Cách cài VPN Wireguard trên server ubuntu / debian

Wireguard là gì?

Giống như OpenVPN, wireguard là một giao thức VPN theo dạng client – server. Ví dụ, nếu bạn có một server ubuntu tại Pháp, bạn có thể cài wireguard server lên đó, sau đó kết nối từ điện thoại, laptop,… các thiết bị client khi kết nối vào sẽ giống như là đang truy cập từ Pháp.

Một trường hợp sử dụng khác, đó là bạn có NAS ở mạng nội bộ trên server và muốn truy cập một cách an toàn (secure tunnel), bạn có thể dùng wireguard để thiết lập 1 kết nối mã hóa từ client tới mạng nội bộ trên server.

Wireguard khác với OpenVPN ở chỗ wireguard là một module được cài sẵn trong mọi kernel linux, tránh việc phải chuyển dữ liệu qua lại giữa kerner space – user space. Nhìn chung, wireguard nhẹ và nhanh hơn OpenVPN.

⚠️ Hướng dẫn này dành cho người đã có kinh nghiệm một chút về cách cài đặt server (VPS) và sử dụng dòng lệnh linux. Nếu bạn chưa biết những cái này, bạn nên sử dụng VPN (NordVPN, ExpressVPN,…) có sẵn để đỡ mất công cài đặt.

Các bước chính của việc cài đặt sẽ gồm có:

  1. Cài đặt wireguard và GUI cho wireguard
  2. Cài đặt systemd unit để tự động load config file cho wireguard
  3. Tạo key cho client (điện thoại, máy tính,…)
  4. Kết nối client tới server

Hướng dẫn này dựa trên https://github.com/ngoduykhanh/wireguard-ui ; Xin cảm ơn Ngô Duy Khánh vì đã dành thời gian tạo ra GUI này.

1. Cài đặt wireguard và GUI cho wireguard

Trước khi bắt đầu, hãy chắc chắn rằng bạn đã bật IP forwarding. Tham khảo google “enable ip forwarding ubuntu” để biết cách bật.

Truy cập https://github.com/ngoduykhanh/wireguard-ui/releases, sau đó tìm link bản …linuxamd64.tar.gz (nhớ là bản linux, không phải freebsd; amd64 cho chip Intel/AMD và bản ARM cho chip ARM)

Ví dụ tại thời điểm viết bài này, bản mới nhất là https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.5.2/wireguard-ui-v0.5.2-linux-amd64.tar.gz

Chạy các lệnh sau trên server:

sudo apt install -y wget wireguard nano tar

wget -O ./wireguard-ui.tar.gz https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.5.2/wireguard-ui-v0.5.2-linux-amd64.tar.gz

tar xvzf ./wireguard-ui.tar.gz

chmod a+x ./wireguard-ui

sudo chown root:root ./wireguard-ui

sudo mv ./wireguard-ui /bin/wireguard-ui

file /bin/wireguard-ui

Nếu nó hiện dòng cuối như sau tức là OK:

/bin/wireguard-ui: ELF 64-bit LSB executable ..............

Tiếp theo, chạy lệnh sau để cài systemd service cho GUI

sudo wget -O /etc/systemd/system/wireguardgui.service https://gist.githubusercontent.com/ngxson/9672d720c86234299623caa703e615d1/raw/7c9eafb3a0173563a78a410046afa00655e4fbac/wireguardgui.service

sudo systemctl enable wireguardgui.service

sudo systemctl start wireguardgui.service

sudo systemctl status wireguardgui.service

Nếu dòng cuối hiện như sau thì là OK:

http server started on [::]:5000

Chú ý, GUI sẽ listen port 5000. Nếu bạn đã có app nào đó dùng port này, hãy xem hướng dẫn ở cuối bài để đổi port (ở mục “Lỗi có thể xảy ra”)

Truy cập IP_SERVER:5000, bạn sẽ thấy trang đăng nhập:
Mặc định username: admin ; password: admin

Tiếp theo, bạn cần đặt password để truy cập GUI này. Vào User settings => Admin => Edit

Sau đó, vào mục Wireguard server để cài đặt post up / post down script:

Bạn hãy nhớ thay ens3 bằng network interface mà máy bạn dùng để truy cập internet, ví dụ có thể là eth0, check bằng cách chạy lệnh: ifconfig

Đối với post up:

iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o %i -j MASQUERADE; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Đối với post down:

iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o %i -j MASQUERADE; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

Bấm Apply Config để tạo file config (phục vụ cho bước sau):

2. Cài đặt systemd unit để tự động load config file cho wireguard

Chạy lần lượt các lệnh sau:

sudo wget -O /etc/systemd/system/wgui.service https://gist.githubusercontent.com/ngxson/9672d720c86234299623caa703e615d1/raw/7c9eafb3a0173563a78a410046afa00655e4fbac/wgui.service

sudo wget -O /etc/systemd/system/wgui.path https://gist.githubusercontent.com/ngxson/9672d720c86234299623caa703e615d1/raw/7c9eafb3a0173563a78a410046afa00655e4fbac/wgui.path

sudo systemctl enable wgui.{path,service}

sudo systemctl start wgui.{path,service}

sudo systemctl status wgui.service

Nếu nó hiện “Finished Restart WireGuard.” thì tức là OK

3. Tạo key cho client (điện thoại, máy tính,…)

Vào Wireguard client

Sau đó bấm New client (góc trên bên phải)

Nhập các thông số cần thiết:

  • Name: đặt tùy ý
  • Email: điền bừa vào, không quan trọng
  • IP Allocation: giữ nguyên
  • Allowed IPS:
    • Nếu bạn muốn client truy cập mọi thứ trên internet thông qua server (proxy), thì để nguyên 0.0.0.0/0
    • Nếu bạn muốn cho phép client truy cập mạng nội bộ trên server (ví dụ bạn có NAS trên server), còn các trang khác thì không đi qua server, hãy xóa 0.0.0.0/0 và đặt dải IP nội bộ, ví dụ 192.168.100.0/24
  • Extra Allowed IPs:
    • Thông thường thì sẽ để trống
    • Chỉ điền nếu bạn muốn từ server có thể truy cập ngược lại mạng LAN của client. Ví dụ bạn có NAS và laptop ở nhà, để server có thể truy cập NAS, bạn đặt IP LAN ở nhà vào, ví dụ 192.168.1.0/24

Bấm apply config, server wireguard sẽ tự động khởi động lại

4. Kết nối client tới server

Trên điện thoại:

Bấm vào QR code để hiện code:

Sau đó trên ĐT, scan code này:

Trên linux:

Bấm download để tải file config

Sau đó, trên client, cài wireguard

sudo apt install wireguard

Kết nối tới wireguard bằng lệnh:

sudo wg-quick /path/to/file.conf
sudo wg  # check status

Trên windows, mac

Export file config bằng cách bấm nút Download

Sau đó, import file này vào phần mềm: https://www.wireguard.com/install/

Lỗi có thể xảy ra

  1. Không kết nối được tới server
    Check lại xem trong phần “Global settings” (menu bên trái), xem public IP của server đã đúng chưa. Nếu server bị nhà mạng đặt sau firewall hay NAT, IP này có thể sẽ bị sai.
    Ngoài ra, check xem firewall đã mở port UDP 51820 hay chưa
  2. Kết nối được nhưng vào internet rất chập chờn
    Đối với một vài nhà cung cấp, bạn có thể sẽ cần giảm MTU. Xem trong phần “Global settings” (menu bên trái), cài MTU sang 1370 (và cũng cập nhật lại cài đặt trên client) xem có cải thiện không.
    Ví dụ mình dùng OVH, cần phải cài về 1370 thì nó mới chạy.
  3. Port 5000 đã có app khác dùng rồi
    Ví dụ bạn muốn đổi sang port 12345:
    Sửa file /etc/systemd/system/wireguardgui.service
    Sửa đoạn sau: /bin/wireguard-ui
    Thành: /bin/wireguard-ui –bind-address 0.0.0.0:12345
    Sau đó chạy lệnh sau: sudo systemctl restart wireguardgui.service
MỚI! Đăng ký nhận bài viết mới nhất qua chatbot: