Cài đặt VPN với WireGuard

Mặc dù hiện tại đã có nhiều giao thức VPN hiện hữu như là IPSEC, PPTP, OpenVPN, nhưng WireGuard từ khi mới ra đời đã nổi lên như một giao thức VPN mới, nhanh và đáng tin cậy.

So sánh phương thức mã hoá WireGuard và các phương thức khác

So sánh phương thức mã hoá WireGuard và các phương thức khác

Chuẩn bị VPS

Bài viết này được thực hiện trên Ubuntu 18.04, tuy nhiên nó cũng có thể làm việc ở các phiên bản Linux tương tự.

Bạn có thể đăng kí VPS tại digitalocean.com và tạo droplet với cấu hình thấp nhất để chạy Wireguard. Khi bạn đăng kí dưới liên kết của skywirex thì bạn sẽ được miễn phí 50usd sử dụng trong 30 ngày.

Ngoài ra, VPS ở www.vultr.com cũng là một sự chọn lựa tốt. Hiện tại bạn có thể đăng kí để nhận 50usd miễn phí dùng thử trong vòng 30 ngày.

Cài đặt WireGuard

Lưu ý

  • Hướng dẫn được thực hiện trên Windows 10 và sử dụng chương trình SSH như Putty hoặc MobaXterm
  • Kí hiệu # hay $ ở đầu dònglà bắt đầu một câu lệnh trong Linux
  • Sau lệnh nano là cửa sổ soạn thảo, bạn copy hoặc gõ nội dung vào cửa sổ đó

Qui ước

  • # câu lệnh được thực hiện ở quyền root trực tiếp bằng tài khoản root hoặc tài khoản user với sudo ở đầu câu lệnh
  • $ câu lệnh được thực hiện ở tài khoản bình thường
  • ### là comment và sẽ không bao gồm trong câu lệnh

Hướng dẫn chi tiết cài đặt Wireguard cho các hệ điều hành ở trang chủ. Đối với Ubuntu, WireGuard có PPA repo (Personal Package Archive) riêng, nên chúng ta thêm vào Ubuntu sử dụng các câu lệnh sau để cài đặt phiên bản mới nhất và luôn cập nhật nó.

# add-apt-repository ppa:wireguard/wireguard
# apt-get update
# apt-get install wireguard

Trong quá trình cài đặt Wireguard có thể có xuất hiện một số thông báo lỗi như hình bên dưới nhưng nó sẽ không ảnh hưởng đến kết quả của việc cài đặt

Lỗi trong quá trình cài đặt WireGuard

Lỗi trong quá trình cài đặt WireGuard

WireGuard hoạt động như một mô-đun nhân Linux được cài đặt bằng DKMS, vì vậy mỗi khi bạn cập nhật nhân Linux thì mô-đun nhân WireGuard cũng được tự động biên dịch và sẵn sàng sử dụng. Để sử dụng mô-đun nhân ngay sau khi cài đặt, bạn phải khởi động lại hoặc chạy modprobe để kích hoạt:

# modprobe wireguard

Kiểm tra nhân Linux đã được nạp mô-đun WireGuard hay chưa, sử dụng câu lệnh sau:

# lsmod | grep wireguard

Kết quả tương tự như sau:

[email protected]:~# lsmod | grep wireguard
wireguard             212992  0
ip6_udp_tunnel         16384  1 wireguard
udp_tunnel             16384  1 wireguard

Đến đây việc cài đặt đã sẵn sàng, ta chuẩn bị đi đến phần cấu hình chi tiết WireGuard.

Cấu hình WireGuard

Khởi tạo key

Chuyển đến thư mục wireguard, tạo public key và private key cho server và client sử dụng các câu lệnh sau

# cd /etc/wireguard
# umask 077
# wg genkey | tee server_private_key | wg pubkey > server_public_key
# wg genkey | tee client_private_key | wg pubkey > client_public_key

Bốn file server_private_key, server_public_key, client_private_key, client_public_key được tạo ra. Bạn sử dụng lệnh nano hoặc vi để copy nội dung về một file txt để chuẩn bị cho file cấu hình.

Server

Ở VPS server sử dụng lệnh nano /etc/wireguard/wg0.conf để tạo file wg0.conf ở thư mục /etc/wireguard/ với nội dung sau đây.

[Interface]
PrivateKey = <nội dung server_private_key ở đây>
Address = 10.10.0.1/24
Address = fd86:ea04:1111::1/64
SaveConfig = true
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <nội dung client_public_key ở đây>
AllowedIPs = 10.10.0.2/32

Đảm bảo thay thế <nội dung server_private_key ở đây> bằng server_private_key bạn đã tạo ở trên, 10.10.0.1/24, fd172.21:12::1/64 là những IP bạn định sử dụng (có thể không cần thay thế), và eth0 bằng broadcast network interface của server nếu có sự khác nhau giữa thông tin server của bạn và hướng dẫn này. Bạn có thể dùng lệnh ifconfig hoặc ip a để kiểm tra thông tin này của server.

Client

[Interface]
Address = 10.10.0.2/32
PrivateKey = <nội dung client_private_key ở đây>
DNS = 1.1.1.1

[Peer]
PublicKey = <nội dung server_public_key ở đây>
Endpoint = <public ip của VPS server>:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 21

Kích hoạt WireGuard trên server

Kích hoạt WireGuard và chạy WireGuard khi khởi động lại server

# wg-quick up wg0
# systemctl enable [email protected]

Kết quả trông như sau:

[email protected]:~# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.10.0.1/24 dev wg0
[#] ip -6 address add fd86:ea04:1111::1/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Khi cần chỉnh sửa lại file cấu hình dùng lệnh sau để tắt WireGuard

# wg-quick down wg0

Ngoài ra để đảm bảo file cấu hình an toàn, thiết lập permissions đúng cho nó bằng câu lệnh sau:

# chmod 600 /etc/wireguard/wg0.conf

Kiểm tra WireGuard đã hoạt động hay chưa ta dùng lệnh lệnh wg, kết quả trông như sau:

[email protected]:~# wg
interface: wg0
  public key: hzS3K+aXcgEGFYDq/AE4FI1QbCg1s0a56azdqi7fnwY=
  private key: (hidden)
  listening port: 51820

peer: Yej7CzesZyqJBa3x7xEPeCaZxpuJwCdRnj02Zf7xmiQ=
  allowed ips: 10.10.0.0/24

Chuyển tiếp lưu lượng (IP forwarding)

Để chuyển tiếp lưu lượng chúng ta sẽ cần khai báo với nhân Linux để NAT trong file cấu hình server hoạt động, chỉnh sửa tệp /etc/sysctl.conf , thêm hai dòng như bên dưới và cho phép thay đổi bằng lệnh sysctl -p:

# cat << EOF >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
EOF
# sysctl -p

Kiểm tra kết nối và dùng VPN

Android

Để dùng VPN WireGuard, bạn tải ứng dụng WireGuard hoặc Tunsafe trên Google Play về điện thoại, import file cấu hình sử dụng QR code và bắt đầu kiểm tra VPN. Theo kinh nghiệm của mình nên sử dụng phần mềm Tunsafe vì ứng dụng WireGuard nhiều khi VPN không hoạt động nó vẫn báo kết nối và IP vẫn không thay đổi so với sau kết nối.

Kiểm tra kết nối WireGuard sử dụng QR code

Kiểm tra kết nối WireGuard sử dụng QR code

Để import file cấu hình vào điện thoại một cách nhanh chóng thì bạn vào trang tạo QR code để tạo QR code ở dạng text và lúc nhập cấu hình trên điện thoại chỉ cần quét mã QR. Rất nhanh và tiện lợi.

Windows

Sau khi kiểm tra VPN đã hoạt động tốt trên điện thoại, bạn có thể vào trang chủ WireGuard để tải client cho các hệ điều hành được hỗ trợ. Đối với Windows, tùy thuộc bạn sử dụng kiến trúc 64 bit hay 32bit mà tải bản WireGuard tương ứng. Sử dụng file cấu hình tương tự như trên Android để kết nối đến server WireGuard.

Chỉnh giờ hệ thống

Việc chỉnh giờ hệ thống giúp bạn ẩn mình tốt hơn, làm cho giờ hệ thống ở server trùng với giờ hệ thống của máy đang sử dụng, qua mặt được các trang kiểm tra về độ tàng hình. Sau khi chỉnh giờ hệ thống bạn có thể vào trang whoer để kiểm tra mức ẩn thân.

Để thực hiện việc chỉnh giờ hệ thống bạn thực hiện các bước sau:

  • Kiểm tra timezone hiện tại

    # timedatectl
    
  • Cập nhật lại timezone sang Asia/Ho_Chi_Minh:

    # timedatectl set-timezone Asia/Ho_Chi_Minh
    

Bạn có thể lựa chọn các timezone khác tại Database Timezones hoặc xem ở /usr/share/zoneinfo/