Tự cài VPN có dễ không? xưa khó lắm nay khác xưa nhiều rồi.

wireguard

VPN là gì

Virtual Private Network (VPN) là tên một công nghệ cho phép mở rộng mạng nội bộ (private network) qua internet, nhờ đó có thể giúp kết nối mạng an toàn và riêng tư hơn.

Ví dụ khi vào một quán cafe và kết nối tới pymi.vn:

Máy bạn --> Wifi quán cafe --> nhà cung cấp mạng (ví dụ FPT) --> pymi.vn. Trên 3 con đường kết nối đó có thể rình rập nhiều nguy hiểm:

  • hacker ngồi quán cafe và nghe trộm kết nối mạng rồi tấn công tạo trang giả mạo để đánh cắp tài khoản của bạn
  • mọi kết nối đi qua nhà mạng FPT có thể được ghi lại, cũng có thể bị can thiệp.
  • trang pymi.vn có IP của bạn có thể truy ra vị trí bạn truy cập.
  • rất nhiều nữa.

Sử dụng VPN, mô hình thay đổi thành

Máy bạn --> wifi quán cafe --> nhà cung cấp mạng --> VPN --> pymi.vn

  • hacker ngồi quán cafe chỉ có thể biết bạn truy cập tới IP của VPN
  • nhà cung cấp mạng chỉ có thể biết bạn truy cập tới IP của VPN
  • trang pymi.vn chỉ có IP của VPN server nên chỉ biết vị trí của server, không phải vị trí nhà bạn.

Vài nhược điểm:

  • do thông qua thêm 1 hop (điểm) nên kết nối có thể chậm hơn một chút.
  • do phải dùng thêm 1 phần mềm nên trên máy di động sẽ tốn thêm chút pin
  • vì các website sẽ thấy IP của VPN server nên biết bạn đang dùng VPN và có thể sẽ chặn, ví dụ một vài sàn crypto (không phải tất cả).

Chú ý: VPN không giúp bạn trở nên "ẩn danh như hacker" trên mạng.

Cài đặt VPN vốn không phải chuyện đơn giản, vậy nên các nhà cung cấp VPN luôn ăn nên làm ra, và ngày càng nhiều:

  • 1.1.1.1 của Cloudflare
  • Mozilla VPN
  • ProtonVPN
  • search ra cả đống

Người tự cài VPN server, thường có 2 lựa chọn:

  • IPSec: rất rất phức tạp
  • OpenVPN: đơn giản hơn, rất phổ biến, nhưng vẫn khá phức tạp

Cho đến khoảng 2020, khi xuất hiện 1 phần mềm siêu mới, rất xịn với tên WireGuard, cài đặt cũng dễ dàng, đã làm việc setup VPN đơn giản hơn bao giờ hết.

Về chất lượng/độ bảo mật thì đủ tin cậy khi:

PS: mọi câu lệnh trong bài này đều chạy với user root.

Cài đặt wireguard

Server dùng Debian 11 hay Ubuntu 22.04

sudo apt install wireguard unbound

Mô hình

Để setup VPN gồm 2 bước: - setup kết nối từ máy mình (gọi là peer) tới server (gọi là endpoint) - config server để cho phép VPN kết nối ra ngoài internet

Cấu hình peer <-> server

Wireguard có 2 câu lệnh, hoạt động khác nhau:

  • wg
  • wg-quick

ở đây sẽ dùng wg-quick để bật tắt VPN vì đơn giản hơn.

server

Sinh private & public key:

# touch /etc/wireguard/private
# chmod 400 /etc/wireguard/private
# wg genkey > /etc/wireguard/private
# wg pubkey < /etc/wireguard/private > /etc/wireguard/public

Viết file config /etc/wireguard/wg0.conf , tên file wg0.conf sẽ dùng cho network interface tên là wg0. Gõ man wg-quick rồi copy config mẫu.

[Interface]
Address = 10.10.0.1/16
PrivateKey = THAY_NOIDUNG_PRIVATE_KEY_VAO_DAY
ListenPort = 51820

[Peer]
PublicKey = THAY_NOIDUNG_PUBKEY_PEER1_VAO_DAY
AllowedIPs = 10.10.0.2/32

# [Peer]
# PublicKey = THAY_NOIDUNG_PUBKEY_PEER2_VAO_DAY
# AllowedIPs = 10.10.0.3/32

Address là địa chỉ IP gán cho interface của server, ví dụ này chọn private network : 10.10.0.1/16, các peer khác sẽ có IP tùy ý trong 10.10.0.2 -> 10.10.xx.yy

ip ad | grep inet để lấy public IP của server, dùng để config peer.

Peer

Trên máy peer, làm tương tự các bước sinh private/public key rồi gõ config vào /etc/wireguard/wg0.conf

[Interface]
Address = 10.10.0.2/32
PrivateKey = PRIVATE_KEY_CUA_PEER

[Peer]
PublicKey = PUBLIC_KEY_CUA_SERVER
Endpoint = PUBLIC_IP_CUA_SERVER:51820
AllowedIPs = 0.0.0.0/0

rồi bật:

sudo wg-quick up wg0

server

Copy public key của peer điền vào phần [peer] THAY_NOIDUNG_PUBKEY_PEER1_VAO_DAY trên server /etc/wireguard/wg0.conf.

Sau đó bật wireguard: sudo wg-quick up wg0

Gõ wg để xem public key và trạng thái kết nối của các peer.

Tới đây nếu kết nối thành công, khi gõ wg ở server sẽ thấy:

# wg
interface: wg0
  public key: serverpubkey
  private key: (hidden)
  listening port: 51820

peer: pXXXvEXXXX=
  endpoint: XXXX:57226
  allowed ips: 10.10.0.2/32
  latest handshake: 23 hours, 14 minutes, 44 seconds ago
  transfer: 512.48 KiB received, 824.25 KiB sent

# ip ad
...
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.10.0.1/16 scope global wg0
       valid_lft forever preferred_lft forever

Ở peer có thể ping server: ping 10.10.0.1

Trên cả 2 máy (ở đây peer ví dụ là 1 máy Ubuntu), gõ

systemctl enable wg-quick@wg0

để tự bật VPN khi bật máy.

Config để kết nối internet qua VPN

Sau các bước trên, mới chỉ kết nối tới VPN, chứ chưa kết nối ra internet được.

Để kết nối ra internet, phía server phải config cho phép "forward" các network packet, và phải config firewall để đổi IP source của máy peer thành của VPN.

Mở file /etc/sysctl.d/99-sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
# Uncomment the next line to enable packet forwarding for IPv6
net.ipv6.conf.all.forwarding=1

Rồi gõ sysctl -p

Tạo /etc/rc.local

#!/bin/sh
iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o eth0 -j MASQUERADE

Rồi chmod a+x /etc/rc.local; /etc/rc.local

Tới đây mọi thứ đã xong có thể truy cập internet qua VPN, reboot lại server để thực hiện bài test khi server mất điện trong tương lai bật lên vẫn chạy ngon lành cành mít.

Kiểm tra DNS leak

Khi kết nối tới VPN, người dùng không mong muốn người khác biết mình truy cập trang nào, nhưng nếu config DNS không đúng sẽ bị lộ thông tin (DNS leak). Truy cập vào trang https://www.dnsleaktest.com/ để test xem có bị rò rỉ DNS không. Nếu server ở nước ngoài, kết quả cũng hiện ở nước ngoài là ok.

PS: wireguard có phần mềm trên Android, iOS, Windows, MacOS và tất nhiên Linux như Debian Ubuntu.

Kết luận

Tổng cộng thao tác

  • server: 1 config 1 rc 1 sysctl là 3 file, mỗi file 2-4 dòng, gõ 2 câu lệnh
  • peer: 1 config 1 rc, 2 câu lệnh

Setup VPN chưa bao giờ dễ dàng đến thế!

Tham khảo

Happy safe surfing.

Hết.

HVN at http://pymi.vn and https://www.familug.org.

Ủng hộ tác giả 🍺



Published

Category

frontpage

Tags

Contact