Thiết lập máy chủ VPN WireGuard của riêng bạn trên Debian

Hướng dẫn này sẽ chỉ cho bạn cách thiết lập máy chủ WireGuard VPN của riêng bạn trên Debian 11 bullseye và Debian 10 Buster. WireGuard được tạo riêng cho nhân Linux. Nó chạy bên trong nhân Linux và cho phép bạn tạo nhanh, hiện đại và đường hầm VPN an toàn.

Các tính năng của WireGuard VPN

  • Nhẹ và tốc độ siêu nhanh, hơn hẵn OpenVPN.
  • Đa nền tảng: WireGuard có thể chạy trên Linux, BSD, macOS, Windows, Android, iOS và OpenWRT.
  • Xác thực người dùng được thực hiện bằng cách trao đổi khóa chung, tương tự như khóa SSH.
  • Nó gán địa chỉ IP đường hầm tĩnh (static tunnel IP addresses) cho các máy khách VPN. Một số người có thể không thích nó, nhưng nó có thể hữu ích trong một số trường hợp.
  • Các thiết bị di động có thể chuyển đổi giữa Wi-Fi và mạng di động một cách liền mạch mà không bị mất bất kỳ kết nối nào.
  • Nó nhằm mục đích thay thế OpenVPN và IPSec trong hầu hết các trường hợp sử dụng.

Yêu cầu

Để làm theo hướng dẫn này, bạn sẽ cần một VPS (Máy chủ riêng ảo) có thể truy cập các trang web bị chặn một cách tự do (Bên ngoài quốc gia của bạn hoặc hệ thống lọc Internet). Tôi khuyên dùng Kamatera VPS, có tính năng:

  • 30 ngày dùng thử miễn phí.
  • Bắt đầu ở mức $4/tháng (RAM 1GB).
  • VPS dựa trên KVM hiệu suất cao.
  • 9 trung tâm dữ liệu trên khắp thế giới, bao gồm Hoa Kỳ, Canada, Anh, Đức, Hà Lan, Hồng Kông và Israel.

Khi bạn có VPS chạy Debian, hãy làm theo hướng dẫn bên dưới. Hướng dẫn này giả định rằng máy chủ VPN và máy khách VPN đều đang chạy hệ điều hành Debian.

Bước 1: Cài đặt WireGuard trên máy chủ và máy tính để bàn Debian

Đăng nhập vào máy chủ Debian của bạn. WireGuard được bao gồm trong kho lưu trữ Debian 11 (Bullseye), vì vậy bạn có thể chạy các lệnh sau để cài đặt nó.

sudo apt update 
sudo apt install wireguard wireguard-tools linux-headers-$(uname -r)

Người dùng Debian 10 cần thêm kho lưu trữ backport bằng lệnh sau. Sau đó cài đặt WireGuard.

echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.list
sudo apt update
sudo apt -t buster-backports install wireguard wireguard-tools wireguard-dkms linux-headers-$(uname -r)

Sử dụng các lệnh tương tự để cài đặt WireGuard trên máy tính Debian cục bộ của bạn (máy khách VPN). Lưu ý rằng bạn cũng cần cài đặt gói openresolv trên máy khách để định cấu hình máy chủ DNS.

sudo apt install openresolv

Bước 2: Tạo cặp khóa công khai/riêng tư

Server

Chạy lệnh sau trên máy chủ Debian để tạo cặp khóa chung/riêng, cặp khóa này sẽ được lưu trong thư mục /etc/wireguard/.

wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

Client

Chạy lệnh sau để tạo cặp khóa chung/riêng trên máy tính Debian cục bộ (máy khách VPN).

wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key

Bước 3: Tạo tập tin cấu hình WireGuard

Server

Sử dụng trình soạn thảo văn bản dòng lệnh như Nano để tạo tệp cấu hình WireGuard trên máy chủ Debian.wg0 sẽ là tên giao diện mạng.

sudo nano /etc/wireguard/wg0.conf

Sao chép văn bản sau và dán vào tệp cấu hình của bạn. Bạn cần sử dụng khóa riêng của máy chủ và khóa chung của máy khách. Ví dụ.

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=

[Peer]
PublicKey = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=
AllowedIPs = 10.10.10.2/32

Ở đây:

  • Address: Chỉ định địa chỉ IP riêng của máy chủ VPN. Ở đây tôi đang sử dụng dải mạng 10.10.10.0/24 nên nó sẽ không xung đột với dải mạng gia đình của bạn. (Hầu hết các bộ định tuyến gia đình sử dụng 192.168.0.0/24 hoặc 192.168 .1.0/24). 10.10.10.1 là địa chỉ IP riêng cho máy chủ VPN.
  • PrivateKey: Khóa riêng của máy chủ VPN, có thể tìm thấy trong tệp /etc/wireguard/server_private.key trên máy chủ.
  • ListenPort: Máy chủ WireGuard VPN sẽ lắng nghe trên cổng UDP 51820, đây là cổng mặc định.
  • PublicKey: Khóa chung của máy khách VPN, có thể tìm thấy trong tệp /etc/wireguard/client_public.key trên máy khách.
  • AllowedIPs: Địa chỉ IP mà máy khách VPN được phép sử dụng. Trong ví dụ này, máy khách chỉ có thể sử dụng địa chỉ IP 10.10.10.2 bên trong đường hầm VPN (VPN tunnel).

Lưu và đóng tệp. (Để lưu tệp trong trình soạn thảo văn bản Nano, nhấn Ctrl+O, sau đó nhấn Enter để xác nhận. Nhấn Ctrl+X để thoát.).

Thay đổi chế độ cấp phép tệp để chỉ người dùng root mới có thể đọc tệp.

sudo chmod 600 /etc/wireguard/ -R

Client

Sử dụng trình soạn thảo văn bản dòng lệnh như Nano để tạo tệp cấu hình WireGuard trên máy tính Debian cục bộ của bạn. wg-client0 sẽ là tên giao diện mạng.

sudo nano /etc/wireguard/wg-client0.conf

Sao chép văn bản sau và dán vào tệp cấu hình của bạn. Bạn cần sử dụng khóa riêng của máy khách và khóa chung của máy chủ.

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=

[Peer]
PublicKey = kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

Ở đây:

  • Address: Specify the private IP address of the VPN client.
  • DNS: chỉ định 10.10.10.1 (máy chủ VPN) làm máy chủ DNS. Nó sẽ được cấu hình thông qua lệnh resolvconf. Bạn cũng có thể chỉ định nhiều máy chủ DNS để dự phòng như sau: DNS = 10.10.10.1 8.8.8.8
  • PrivateKey: Khóa riêng của máy khách, có thể tìm thấy trong tệp /etc/wireguard/client_private.key trên máy khách.
  • PublicKey: Khóa chung của máy chủ, có thể tìm thấy trong tệp /etc/wireguard/server_public.key trên máy chủ.
  • AllowedIPs: 0.0.0.0/0 đại diện cho toàn bộ Internet, có nghĩa là tất cả lưu lượng truy cập vào Internet phải được định tuyến qua VPN.
  • Endpoint: Địa chỉ IP công cộng và số cổng của máy chủ VPN. Thay thế 12.34.56.78 bằng địa chỉ IP công cộng thực sự của máy chủ của bạn.
  • PersistentKeepalive: Gửi một gói trống đã được xác thực đến thiết bị ngang hàng cứ sau 25 giây để duy trì kết nối. Nếu PersistentKeepalive không được bật, máy chủ VPN có thể không ping được máy khách VPN.

Lưu và đóng tập tin.

Thay đổi chế độ tập tin để chỉ người dùng root mới có thể đọc tệp.

sudo chmod 600 /etc/wireguard/ -R

Bước 4: Kích hoạt chuyển tiếp IP trên máy chủ

Để máy chủ VPN định tuyến các gói giữa máy khách VPN và Internet, chúng ta cần kích hoạt chuyển tiếp IP. Chỉnh sửa tệp sysctl.conf.

sudo nano /etc/sysctl.conf

Thêm dòng sau vào cuối tập tin này.

net.ipv4.ip_forward = 1

Lưu và đóng tệp. Sau đó áp dụng các thay đổi bằng lệnh bên dưới. Tùy chọn -p sẽ tải cài đặt sysctl từ tệp /etc/sysctl.conf. Lệnh này sẽ duy trì các thay đổi của chúng tôi trong suốt quá trình khởi động lại hệ thống.

sudo sysctl -p

Bước 5: Định cấu hình làm mờ IP (IP Masquerading) trên máy chủ

Chúng ta cần thiết lập tính năng giả mạo IP trong tường lửa máy chủ để máy chủ trở thành bộ định tuyến ảo cho các máy khách VPN. Tôi sẽ sử dụng UFW, một giao diện người dùng của tường lửa iptables. Cài đặt UFW trên Debian với:

sudo apt install ufw

Trước tiên, bạn cần cho phép lưu lượng SSH.

sudo ufw allow 22/tcp

Tiếp theo, tìm tên giao diện mạng chính của máy chủ của bạn.

ip addr

Như bạn có thể thấy, nó có tên là enp1s0 trên máy chủ Debian của tôi.

Để định cấu hình làm mờ IP, chúng ta phải thêm lệnh iptables vào tệp cấu hình UFW.

sudo nano /etc/ufw/before.rules

Theo mặc định, có một số quy tắc cho bảng lọc. Thêm các dòng sau vào cuối tệp này. Thay thế ens3 bằng tên giao diện mạng của riêng bạn.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o enp1s0 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Trong trình soạn thảo văn bản Nano, bạn có thể đi đến cuối tệp bằng cách nhấn Ctrl+W, sau đó nhấn Ctrl+V.

Các dòng trên sẽ thêm một quy tắc (-A) vào cuối chuỗi POSTROUTING của bảng nat. Nó sẽ liên kết mạng riêng ảo của bạn với Internet. Và cũng ẩn mạng của bạn với thế giới bên ngoài. Vì vậy, Internet chỉ có thể nhìn thấy bạn IP của máy chủ VPN, nhưng không thể thấy IP của máy khách VPN của bạn, giống như bộ định tuyến gia đình của bạn ẩn mạng gia đình riêng của bạn.

Theo mặc định, UFW cấm chuyển tiếp gói. Chúng tôi có thể cho phép chuyển tiếp cho mạng riêng của mình. Tìm chuỗi ufw-Before-forward trong tệp này và thêm 3 dòng sau, sẽ chấp nhận chuyển tiếp gói nếu IP nguồn hoặc IP đích nằm trong Phạm vi 10.10.10.0/24.

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

Lưu và đóng tệp, sau đó kích hoạt UFW.

sudo ufw enable

Nếu bạn đã bật UFW thì bạn có thể sử dụng systemctl để khởi động lại UFW.

sudo systemctl restart ufw

Bây giờ nếu bạn liệt kê các quy tắc trong chuỗi POSTROUTING của bảng NAT bằng cách sử dụng lệnh sau:

sudo iptables -t nat -L POSTROUTING

Bạn có thể thấy quy tắc Masquerade.

Bước 6: Cài đặt Trình phân giải DNS trên Máy chủ

Vì chúng ta đã chỉ định máy chủ VPN làm máy chủ DNS cho máy khách nên chúng ta cần chạy trình phân giải DNS trên máy chủ VPN và có thể cài đặt máy chủ DNS bind9.

sudo apt install bind9

Sau khi cài đặt xong, BIND sẽ tự động khởi động. Bạn có thể kiểm tra trạng thái của nó bằng:

systemctl status bind9

Đầu ra mẫu:

● named.service - BIND Domain Name Server
     Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2020-05-17 08:11:26 UTC; 37s ago
       Docs: man:named(8)
   Main PID: 13820 (named)
      Tasks: 5 (limit: 1074)
     Memory: 14.3M
     CGroup: /system.slice/named.service
             └─13820 /usr/sbin/named -f -u bind

Nếu nó không chạy, hãy khởi động nó bằng:

sudo systemctl start bind9

Chỉnh sửa tệp cấu hình của máy chủ BIND DNS.

sudo nano /etc/bind/named.conf.options

Thêm dòng sau để cho phép máy khách VPN gửi truy vấn DNS đệ quy.

allow-recursion { 127.0.0.1; 10.10.10.0/24; };

Lưu và đóng tệp, sau đó chỉnh sửa tệp /etc/default/named.

sudo nano /etc/default/named

Thêm -4 vào TÙY CHỌN để đảm bảo BIND có thể truy vấn máy chủ DNS gốc.

OPTIONS="-u bind -4"

Lưu và đóng tập tin.

Theo mặc định, BIND kích hoạt DNSSEC để đảm bảo rằng các phản hồi DNS là chính xác và không bị giả mạo. Tuy nhiên, nó có thể không hoạt động bình thường do chuyển đổi neo tin cậy (trust anchor rollover) và các lý do khác. Để làm cho nó hoạt động bình thường, chúng ta có thể xây dựng lại khóa được quản lý cơ sở dữ liệu bằng các lệnh sau.

sudo rndc managed-keys destroy
sudo rdnc reconfig

Khởi động lại BIND9 để những thay đổi có hiệu lực.

sudo systemctl restart bind9

Sau đó, bạn cần chạy lệnh sau để cho phép máy khách VPN kết nối với cổng 53.

sudo ufw insert 1 allow in from 10.10.10.0/24

Bước 7: Mở cổng WireGuard trong tường lửa

Chạy lệnh sau để mở cổng UDP 51820 trên máy chủ.

sudo ufw allow 51820/udp

Bước 8: Khởi động WireGuard

server

Chạy lệnh sau trên máy chủ để khởi động WireGuard.

sudo wg-quick up /etc/wireguard/wg0.conf

Để dừng nó, thì chạy

sudo wg-quick down /etc/wireguard/wg0.conf

Bạn cũng có thể sử dụng dịch vụ systemd để khởi động WireGuard.

sudo systemctl start wg-quick@wg0.service

Kích hoạt tính năng tự động khởi động khi khởi động hệ thống.

sudo systemctl enable wg-quick@wg0.service

Kiểm tra trạng thái của nó bằng lệnh sau. Trạng thái của nó phải là active (exited).

systemctl status wg-quick@wg0.service

Bây giờ máy chủ WireGuard đã sẵn sàng chấp nhận kết nối máy khách.

Client

Khởi động WireGuard.

sudo systemctl start wg-quick@wg-client0.service

Kích hoạt tính năng tự động khởi động khi khởi động hệ thống.

sudo systemctl enable wg-quick@wg-client0.service

Kiểm tra trạng thái của nó:

systemctl status wg-quick@wg-client0.service

Bây giờ hãy truy cập trang web này: http://icanhazip.com/ để kiểm tra địa chỉ IP công cộng của bạn. Nếu mọi thứ suôn sẻ, nó sẽ hiển thị địa chỉ IP công cộng của máy chủ VPN của bạn thay vì địa chỉ IP công cộng của máy khách của bạn.

Bạn cũng có thể chạy lệnh sau để lấy địa chỉ IP công cộng hiện tại.

curl https://icanhazip.com

Những mẹo xử lí sự cố

Kiểm tra xem cổng UDP 51820 có mở không

Cài đặt bộ phân tích lưu lượng mạng tshark trên máy chủ. Tshark là phiên bản dòng lệnh của Wireshark.

sudo apt install tshark

Nếu bạn được hỏi “Những người không phải là supperuser có thể chụp các gói không?”, hãy trả lời Yes. Sau khi cài đặt xong, hãy chạy lệnh sau để thêm tài khoản người dùng của bạn vào nhóm wireshark để bạn có thể chụp các gói.

sudo adduser your-username wireshark

Sau đó, khởi động tshark để chụp các gói trên cổng UDP 51820. Thay thế enp1s0 bằng giao diện mạng chính của bạn.

tshark -i enp1s0 -f "udp port 51820"

Nếu máy khách WireGuard có thể kết nối với cổng UDP 51820 của máy chủ thì bạn sẽ thấy các gói được tshark bắt giữ như bên dưới. Như bạn có thể thấy, máy khách bắt đầu bắt đầu bắt tay và máy chủ đã gửi lại phản hồi bắt tay. kết nối được thiết lập, máy khách sẽ gửi các gói lưu giữ. Ví dụ.

Capturing on 'enp1s0'
** (tshark:902085) 02:47:41.865227 [Main MESSAGE] -- Capture started.
** (tshark:902085) 02:47:41.866056 [Main MESSAGE] -- File: "/tmp/wireshark_eth0JVEWT1.pcapng"
  1 105.092578905 11.22.33.44 → 12.34.56.78 WireGuard 190 Handshake Initiation, sender=0x3F1A04AB
  2 110.464628716 12.34.56.78 → 11.22.33.44 WireGuard 134 Handshake Response, sender=0x34ED7471, receiver=0xD4B23800
  3 110.509517074 11.22.33.44 → 12.34.56.78 WireGuard 74 Keepalive, receiver=0x34ED7471, counter=0

Nếu máy khách WireGuard không thể kết nối với cổng UDP 51820 của máy chủ thì bạn sẽ chỉ thấy các gói khởi tạo bắt tay và không có phản hồi bắt tay.

Ping test

Bạn có thể ping từ máy chủ VPN đến máy khách VPN (ping 10.10.10.2) để xem đường hầm có hoạt động hay không. Nếu bạn thấy thông báo lỗi sau trong ping,

ping: sendmsg: Required key not available

có thể tham số AllowedIPs sai, giống như lỗi đánh máy.

Nếu thông báo lỗi ping là

ping: sendmsg: Destination address required

có thể khóa riêng/chung bị sai trong tệp cấu hình của bạn.

Không thể duyệt Internet

Nếu đường hầm VPN được thiết lập thành công nhưng địa chỉ IP công cộng của máy khách không thay đổi, đó là do quy tắc giả mạo hoặc chuyển tiếp trong tệp cấu hình UFW của bạn không hoạt động. khiến máy tính của tôi không thể duyệt Internet.

Lưu ý rằng tôi không khuyên bạn nên sử dụng SaveConfig=true trong phần [Giao diện] của tệp cấu hình WireGuard. SaveConfig yêu cầu WireGuard lưu cấu hình thời gian chạy khi tắt máy. Vì vậy, nếu bạn thêm [Peer] bổ sung vào tệp cấu hình rồi khởi động lại WireGuard , cấu hình mới thêm của bạn sẽ bị ghi đè.

Cho phép ghi nhật ký gỡ lỗi trong hạt nhân Linux

Nếu bạn sử dụng nhân Linux 5.6+, bạn có thể bật ghi nhật ký gỡ lỗi cho WireGuard bằng lệnh sau.

sudo su -
echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control

Sau đó, bạn có thể xem nhật ký gỡ lỗi với

sudo dmesg -wH

hoặc

sudo journalctl -kf

Restart

Nếu VPN của bạn vẫn không hoạt động, hãy thử khởi động lại máy chủ VPN.

sudo systemctl restart wg-quick@wg0.service

Sau đó dừng máy khách VPN.

sudo systemctl stop wg-quick@wg-client0.service

Và nâng cấp các gói phần mềm trên máy khách VPN.

sudo apt update; sudo apt upgrade

Tiếp theo, khởi động lại máy khách VPN.

sudo shutdown -r now
sudo systemctl start wg-quick@wg-client0.service

Thêm máy khách VPN

WireGuard được thiết kế để liên kết một địa chỉ IP với một máy khách VPN. Để thêm nhiều máy khách VPN hơn, bạn cần tạo một cặp khóa riêng/chung duy nhất cho mỗi máy khách, sau đó thêm khóa chung của từng máy khách VPN vào tệp cấu hình của máy chủ (/etc/ wireguard/wg0.conf) giống như thế này:

[Interface]
Address = 10.10.10.1/24
PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA=
ListenPort = 51820

[Peer]
PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA=
AllowedIPs = 10.10.10.2/32

[Peer]
PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=
AllowedIPs = 10.10.10.3/32

[Peer]
PublicKey = EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8=
AllowedIPs = 10.10.10.4/32

Mỗi máy khách VPN sẽ có một địa chỉ IP riêng tĩnh (10.10.10.2, 10.10.10.3, 10.10.10.4, v.v.). Khởi động lại máy chủ WireGuard để các thay đổi có hiệu lực.

sudo systemctl restart wg-quick@wg0.service

Sau đó thêm cấu hình WireGuard trên mỗi máy khách VPN như bình thường.

Định cấu hình máy khách VPN trên iOS/Android

Vì tôi có iPhone nên tôi sẽ hướng dẫn bạn cách định cấu hình ứng dụng khách WireGuard trên iOS. Cài đặt ứng dụng WireGuard từ App store. Sau đó, mở ứng dụng này và nhấp vào nút Thêm đường hầm (Add a tunnel).

Bạn có 3 phương pháp để tạo đường hầm WireGuard mới.

  • Tạo từ tập tin hoặc kho lưu trữ
  • Tạo từ mã QR
  • Tạo từ scratch

Chọn phương thức mã QR vì nó dễ dàng hơn. Chạy lệnh sau trên máy chủ để tạo khóa công khai/riêng tư WireGuard cho máy khách iOS.

Tiếp theo, tạo tệp cấu hình WireGuard cho ứng dụng khách iOS.

sudo nano /etc/wireguard/ios.conf

Thêm các dòng sau vào tập tin mới tạo.

[Interface]
Address = 10.10.10.3/24
DNS = 10.10.10.1
PrivateKey = mNiZvB+sASN/+ZiJkMyan1ZZOzCXkrjYPlbg7rZJ7Fc=

[Peer]
PublicKey = OMaXX7XD+wEYWfYyFcZZBN4vFSC16A1e8t80ONiJKWY=
AllowedIPs = 0.0.0.0/0
Endpoint = 202.182.107.159:51820
PersistentKeepalive = 25

Ở đây:

  • Address: Chỉ định địa chỉ IP riêng cho máy khách iOS.
  • DNS: Chỉ định 10.10.10.1 (máy chủ VPN) làm máy chủ DNS. Bạn cũng có thể chỉ định nhiều máy chủ DNS để dự phòng như sau: DNS = 10.10.10.1,8.8.8.8. Lưu ý rằng ứng dụng iOS không hỗ trợ DNS = Cú pháp 10.10.10.1 8.8.8.8.
  • PrivateKey: Khóa riêng của ứng dụng khách iOS, có thể tìm thấy trong tệp /etc/wireguard/ios_private.key.
  • PublicKey: Khóa chung của máy chủ, có thể tìm thấy trong tệp /etc/wireguard/server_public.key trên máy chủ.
  • AllowedIPs: 0.0.0.0/0 0.0.0.0/0 Đại diện cho toàn bộ Internet, có nghĩa là tất cả lưu lượng truy cập vào Internet phải được định tuyến qua VPN.
  • Endpoint: Địa chỉ IP công cộng và số cổng của máy chủ VPN. Thay thế 202.182.107.159 bằng địa chỉ IP công cộng thực sự của máy chủ của bạn.
  • PersistentKeepalive: Gửi một gói trống đã được xác thực đến thiết bị ngang hàng cứ sau 25 giây để duy trì kết nối. Nếu PersistentKeepalive không được bật, máy chủ VPN có thể không ping được máy khách VPN.

Lưu và đóng tệp, sau đó chạy lệnh sau trên máy chủ WireGuard VPN để tạo mã QR từ tệp cấu hình iOS.

sudo apt install qrencode
sudo cat /etc/wireguard/ios.conf | qrencode -t ansiutf8

Tiếp theo, quét mã QR từ ứng dụng WireGuard trên iOS để nội dung trong tệp /etc/wireguard/ios.conf sẽ được nhập vào ứng dụng khách WireGuard iOS.

Screenshot
Screenshot
Screenshot

Sau khi thêm đường hầm trên máy khách iOS, chúng tôi cũng cần thêm [peer] trong tệp cấu hình máy chủ WireGaurd.

sudo nano /etc/wireguard/wg0.conf

Giống như thế này:

[Interface]
Address = 10.10.10.1/24
PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA=
ListenPort = 51820

[Peer]
PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA=
AllowedIPs = 10.10.10.2/32

[Peer]
# iOS client
PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=
AllowedIPs = 10.10.10.3/32

Lưu và đóng tệp, sau đó khởi động lại máy chủ WireGuard VPN.

sudo systemctl restart wg-quick@wg0.service

Bây giờ bạn có thể thiết lập kết nối WireGuard VPN từ ứng dụng iOS.

Cấu hình máy khách Windows

Tải xuống trình cài đặt WireGuard installer for Windows.

Sau khi cài đặt xong, hãy khởi động chương trình WireGuard. Bạn cần nhấp chuột phải vào thanh bên trái để tạo một đường hầm trống mới (Add empty tunnel… hoặc Ctrl+N). Nó sẽ tự động tạo khóa chung/riêng cho máy khách Windows.

Bây giờ bạn cần thêm thông tin khác.

[Interface]
PrivateKey = mNiZvB+sASN/+ZiJkMyan1ZZOzCXkrjYPlbg7rZJ7Fc=
Address = 10.10.10.4/24 
DNS = 10.10.10.1

[Peer]
# VPN server
PublicKey = OMaXX7XD+wEYWfYyFcZZBN4vFSC16A1e8t80ONiJKWY=
AllowedIPs = 0.0.0.0/0
Endpoint = 202.182.107.159:51820
PersistentKeepalive = 25

Where:

  • PrivateKey: Khóa riêng của máy khách Windows, được tạo tự động.
  • Address: Chỉ định địa chỉ IP riêng cho máy khách Windows.
  • DNS: chỉ định 10.10.10.1 (máy chủ VPN) làm máy chủ DNS. Bạn cũng có thể chỉ định nhiều máy chủ DNS để dự phòng như sau: DNS = 10.10.10.1,8.8.8.8. Lưu ý rằng ứng dụng Windows không hỗ trợ DNS = Cú pháp 10.10.10.1 8.8.8.8.
  • PublicKey: Khóa chung của máy chủ, có thể tìm thấy trong tệp /etc/wireguard/server_public.key trên máy chủ.
  • AllowedIPs: 0.0.0.0/0 0.0.0.0/0 Đại diện cho toàn bộ Internet, có nghĩa là tất cả lưu lượng truy cập vào Internet phải được định tuyến qua VPN.
  • Endpoint: Địa chỉ IP công cộng và số cổng của máy chủ VPN. Thay thế 202.182.107.159 bằng địa chỉ IP công cộng thực sự của máy chủ của bạn.
  • PersistentKeepalive: Gửi một gói trống đã được xác thực đến thiết bị ngang hàng cứ sau 25 giây để duy trì kết nối. Nếu PersistentKeepalive không được bật, máy chủ VPN có thể không ping được máy khách VPN.

Gợi ý: Trên Windows, bạn có thể sử dụng chương trình PowerShell để SSH vào máy chủ Linux của mình. use the PowerShell program to SSH into your Linux server.

Lưu cấu hình.

Sau khi đường hầm được thêm vào máy khách Windows, chúng tôi cũng cần thêm [peer] trong tệp cấu hình máy chủ WireGaurd.

sudo nano /etc/wireguard/wg0.conf

Giống như vầy:

[Interface]
Address = 10.10.10.1/24
PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA=
ListenPort = 51820

[Peer]
PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA=
AllowedIPs = 10.10.10.2/32

[Peer]
# iOS client
PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=
AllowedIPs = 10.10.10.3/32

[Peer]
# Windows client
PublicKey = wJpwC/gCWXZTGa5lQReKowRvymaaEUav0N1qeK74HlQ=
AllowedIPs = 10.10.10.4/32

Lưu và đóng tệp, sau đó khởi động lại máy chủ WireGuard VPN.

sudo systemctl restart wg-quick@wg0.service

Bây giờ bạn có thể thiết lập kết nối WireGuard VPN trên Windows.

Định tuyến chính sách, phân chia đường hầm và chuyển đổi VPN Kill

Bây giờ tôi sẽ chỉ cho bạn cách sử dụng định tuyến chính sách (policy routing), tạo đường hầm phân chia (split tunneling) và chuyển đổi tiêu diệt VPN (VPN kill switch) với WireGuard VPN. Lưu ý rằng không nên sử dụng chúng kết hợp với nhau. Nếu bạn sử dụng định tuyến chính sách thì bạn không nên kích hoạt tính năng chia đường hầm hoặc VPN kill switch và ngược lại.

Policy Routing

Theo mặc định, tất cả lưu lượng truy cập trên máy khách VPN sẽ được định tuyến thông qua máy chủ VPN. Đôi khi, bạn có thể chỉ muốn định tuyến một loại lưu lượng cụ thể, dựa trên giao thức lớp vận chuyển và cổng đích. Điều này được gọi là định tuyến chính sách.

Định tuyến chính sách được định cấu hình trên máy khách và chúng tôi cần dừng quá trình máy khách WireGuard.

sudo systemctl stop wg-quick@wg-client0.service

Sau đó chỉnh sửa tập tin cấu hình máy khách.

sudo nano /etc/wireguard/wg-client0.conf

Ví dụ: nếu bạn thêm 3 dòng sau vào phần [interface] thì WireGuard sẽ tạo bảng định tuyến có tên là “1234” và thêm quy tắc ip vào bảng định tuyến. Trong ví dụ này, lưu lượng truy cập sẽ chỉ được định tuyến qua máy chủ VPN khi TCP được sử dụng làm giao thức lớp vận chuyển và cổng đích là 25, tức là khi máy khách gửi email.

Table = 1234
PostUp = ip rule add ipproto tcp dport 25 table 1234
PreDown = ip rule delete ipproto tcp dport 25 table 1234

Lưu và đóng tệp. Sau đó khởi động lại ứng dụng khách WireGuard.

sudo systemctl start wg-quick@wg-client0.service

Split Tunneling

Theo mặc định, tất cả lưu lượng truy cập trên máy khách VPN sẽ được định tuyến qua máy chủ VPN. Dưới đây là cách bật tính năng tạo đường hầm phân chia, do đó, chỉ lưu lượng truy cập đến dải IP 10.10.10.0/24 mới được định tuyến qua WireGuard VPN. Điều này rất hữu ích khi bạn muốn xây dựng mạng riêng cho một số máy chủ đám mây, vì máy khách VPN sẽ chạy trên máy chủ đám mây và nếu bạn sử dụng đường hầm VPN đầy đủ thì có thể bạn sẽ mất kết nối với máy chủ đám mây.

Chỉnh sửa tập tin cấu hình máy khách.

sudo nano /etc/wireguard/wg-client0.conf

Thay đổi

AllowedIPs = 0.0.0.0/0

Thành

AllowedIPs = 10.10.10.0/24

Vì vậy, lưu lượng truy cập sẽ chỉ được định tuyến qua VPN khi địa chỉ đích nằm trong dải IP 10.10.10.0/24. Hãy lưu và đóng tệp. Sau đó khởi động lại ứng dụng khách WireGuard.

sudo systemctl restart wg-quick@wg-client0.service

VPN Kill Switch

Theo mặc định, máy tính của bạn có thể truy cập Internet qua cổng thông thường khi kết nối VPN bị gián đoạn. Bạn có thể muốn bật tính năng kill switch, tính năng này ngăn chặn luồng gói tin không được mã hóa qua các giao diện không phải WireGuard.

Dừng tiến trình máy khách WireGuard.

sudo systemctl stop wg-quick@wg-client0.service

Chỉnh sửa tập tin cấu hình máy khách.

sudo nano /etc/wireguard/wg-client0.conf

Thêm hai dòng sau vào phần [interface].

PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

Giống như thế này:

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

[Peer]
PublicKey = kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0=
AllowedIPs = 0.0.0.0/0
Endpoint = 202.182.107.159:51820
PersistentKeepalive = 25

Lưu và đóng tệp, sau đó khởi động ứng dụng khách WireGuard.

sudo systemctl start wg-quick@wg-client0.service

Cài đặt Linux Kernel 5.x trên Debian 10

Phiên bản nhân Linux hiện tại trên Debian 10 là 4.19. Ở bước 1, chúng tôi đã thêm kho lưu trữ backport trên Debian 10. Tại thời điểm viết bài này, kho lưu trữ backport bao gồm nhân Linux 5.10. Bạn có thể biết rằng mô-đun Wireguard được bao gồm trong nhân Linux bắt đầu từ phiên bản 5.4. Nếu cài đặt nhân Linux 5.10 trên Debian 10, chúng ta không cần xây dựng mô-đun wireguard khi hệ thống đang nâng cấp nhân Linux. Thực tế là máy chủ Debian 10 của tôi đã từng có một vấn đề trong việc xây dựng mô-đun wireguard với wireguard-dkms.

Lưu ý rằng vào thời điểm bạn đọc bài viết này, kho lưu trữ backport Debian 10 có thể đã loại bỏ kernel 5.10 và bao gồm kernel 5.11. Bạn chỉ cần thay thế 5.8 bằng 5.9 trong các lệnh sau.

Để cài đặt Linux kernel 5.8 trên máy chủ đám mây Debian 10, hãy chạy lệnh sau.

sudo apt install linux-image-5.10.0-0.bpo.7-cloud-amd64 linux-headers-5.10.0-0.bpo.7-cloud-amd64

Để cài đặt Linux kernel 5.8 trên PC Debian 10, hãy chạy lệnh sau.

 sudo apt install linux-image-5.10.0-0.bpo.7-amd64 linux-headers-5.10.0-0.bpo.7-amd64

Sau đó khởi động lại hộp Debian 10 của bạn.

sudo shutdown -r now

Kiểm tra phiên bản hạt nhân Linux của bạn.

uname -r

Đầu ra mẫu:

5.10.0-0.bpo.7-cloud-amd64

Mặc dù chúng ta không cần gói wireguard-dkms nữa nhưng nó phụ thuộc vào gói wireguard nên không thể xóa nó khỏi hệ thống, có thể bạn sẽ gặp lỗi sau khi nâng cấp gói wireguard.

Error! The dkms.conf for this module includes a BUILD_EXCLUSIVE directive which
does not match this kernel/arch. This indicates that it should not be built

Điều này cho thấy wireguard-dkms đang cố gắng xây dựng mô-đun wireguard vào nhân Linux, nhưng Linux 5.10 bao gồm mô-đun wireguard gốc, do đó hoạt động xây dựng bị ngăn chặn và bạn có thể bỏ qua lỗi này.

Kết thúc

Vậy đó! Tôi hy vọng hướng dẫn này đã giúp bạn cài đặt và định cấu hình WireGuard trên Debian. 🙂

Bình luận

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *