WireGuard là một Mạng riêng ảo (Virtual Private Network - VPN) nhẹ hỗ trợ các kết nối IPv4 và IPv6. VPN cho phép bạn duyệt qua các mạng không đáng tin cậy như thể bạn đang ở trên một mạng riêng. Nó cho phép bạn tự do truy cập internet một cách an toàn và bảo mật từ điện thoại thông minh hoặc máy tính xách tay của mình khi được kết nối với một mạng không đáng tin cậy, chẳng hạn như WiFi tại khách sạn hoặc quán cà phê.
Mã hóa của WireGuard dựa trên các khóa công khai và khóa riêng dành cho các peer để thiết lập một đường hầm được mã hóa giữa họ. Mỗi phiên bản của WireGuard sử dụng một bộ mật mã cụ thể để đảm bảo tính đơn giản, bảo mật và khả năng tương thích với các peer.
Để so sánh, các phần mềm VPN khác như OpenVPN và IPSec sử dụng Transport Layer Security (TLS) và các chứng chỉ để xác thực và thiết lập các đường hầm được mã hóa giữa các hệ thống. Các phiên bản TLS khác nhau bao gồm hỗ trợ cho hàng trăm bộ mã hóa và thuật toán khác nhau, và mặc dù điều này cho phép hỗ trợ các máy khách khác nhau rất linh hoạt, nhưng nó cũng khiến việc thiết lập cấu hình VPN sử dụng TLS tốn nhiều thời gian hơn, phức tạp hơn và dễ xảy ra lỗi.
Trong hướng dẫn này, bạn sẽ thiết lập WireGuard trên máy chủ Ubuntu 20.04, sau đó thiết lập cấu hình một máy khác để kết nối với nó như một máy ngang hàng sử dụng cả kết nối IPv4 và IPv6 (thường được gọi là kết nối ngăn xếp kép). Bạn cũng sẽ tìm hiểu cách định tuyến lưu lượng truy cập Internet ngang hàng thông qua WireGuard Server trong cấu hình cổng, ngoài việc sử dụng VPN cho đường hầm peer-to-peer được mã hóa.
Với mục đích của hướng dẫn này, chúng tôi sẽ thiết lập cấu hình một hệ thống Ubuntu 20.04 khác làm máy ngang hàng (còn được gọi là máy khách) với WireGuard Server. Các hướng dẫn tiếp theo trong loạt bài này sẽ giải thích cách cài đặt và chạy WireGuard trên các hệ thống và thiết bị Windows, macOS, Android và iOS.
Để làm theo hướng dẫn này, bạn sẽ cần:
Bước đầu tiên trong hướng dẫn này là cài đặt WireGuard trên máy chủ của bạn. Để bắt đầu, hãy cập nhật chỉ mục gói của WireGuard Server của bạn và cài đặt WireGuard bằng các lệnh sau. Bạn có thể được nhắc cung cấp mật khẩu sudo user của mình nếu đây là lần đầu tiên bạn sử dụng sudo
trong phiên này:
- sudo apt update
- sudo apt install wireguard
Bây giờ bạn đã cài đặt WireGuard, bước tiếp theo là tạo cặp khóa riêng và chung cho máy chủ. Bạn sẽ sử dụng các lệnh wg genkey
và wg pubkey
tích hợp sẵn để tạo khóa, sau đó thêm khóa riêng vào tệp cấu hình của WireGuard.
Bạn cũng sẽ cần thay đổi các quyền trên khóa mà bạn vừa tạo bằng lệnh chmod
, vì theo mặc định, bất kỳ người dùng nào trên máy chủ của bạn đều có thể đọc được tệp này.
Tạo khóa riêng cho WireGuard và thay đổi quyền của nó bằng các lệnh sau:
- wg genkey | sudo tee /etc/wireguard/private.key
- sudo chmod go= /etc/wireguard/private.key
Lệnh sudo chmod go=...
xóa mọi quyền trên tệp đối với người dùng và nhóm không phải root user để đảm bảo rằng chỉ họ mới có thể truy cập khóa riêng.
Bạn sẽ nhận được một dòng đầu ra được mã hóa base64
, đó là khóa riêng tư. Một bản sao của đầu ra cũng được lưu trữ trong tệp /etc/wireguard/private.key
để tham khảo trong tương lai bởi phần tee
của lệnh. Cẩn thận ghi lại khóa riêng tư được xuất ra vì bạn sẽ cần thêm nó vào tệp cấu hình của WireGuard ở phần sau trong phần này.
Bước tiếp theo là tạo khóa chung tương ứng, được lấy từ khóa riêng. Sử dụng lệnh sau để tạo tệp khóa công khai:
- sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
Lệnh này bao gồm ba lệnh riêng lẻ được liên kết với nhau bằng cách sử dụng |
(pipe) nhà điều hành:
sudo cat /etc/wireguard/private.key
: lệnh này đọc tệp khóa riêng và xuất nó ra luồng đầu ra tiêu chuẩn.wg pubkey
: lệnh thứ hai lấy đầu ra từ lệnh đầu tiên làm đầu vào tiêu chuẩn và xử lý nó để tạo khóa chung.sudo tee /etc/wireguard/public.key
: lệnh cuối cùng lấy đầu ra của lệnh tạo khóa công khai và chuyển hướng nó vào tệp có tên /etc/wireguard/public.key
.Khi bạn chạy lệnh, bạn sẽ lại nhận được một dòng đầu ra được mã hóa base64
, đây là khóa chung cho WireGuard Server của bạn. Sao chép nó ở đâu đó để tham khảo, vì bạn sẽ cần phân phối khóa chung cho bất kỳ peer nào kết nối với máy chủ.
Trong phần trước, bạn đã cài đặt WireGuard và tạo một cặp khóa sẽ được sử dụng để mã hóa lưu lượng đến và đi từ máy chủ. Trong phần này, bạn sẽ tạo một tệp cấu hình cho máy chủ và thiết lập WireGuard để tự động khởi động khi máy chủ của bạn khởi động lại. Bạn cũng sẽ xác định địa chỉ IPv4 và IPv6 riêng để sử dụng với WireGuard Server và các peer của mình.
Nếu bạn định sử dụng cả địa chỉ IPv4 và IPv6 thì hãy làm theo cả hai phần này. Nếu không, hãy làm theo hướng dẫn trong phần thích hợp cho nhu cầu mạng VPN của bạn.
Nếu bạn đang sử dụng máy chủ WireGuard của mình với các IPv4 peers, thì máy chủ cần một dải địa chỉ IPv4 riêng để sử dụng cho máy khách và cho giao diện đường hầm của nó. Bạn có thể chọn bất kỳ dải địa chỉ IP nào từ các khối địa chỉ dành riêng sau đây (nếu bạn muốn tìm hiểu thêm về cách phân bổ các khối này, hãy truy cập RFC 1918 specification):
10.0.0.0
đến 10.255.255.255
(tiền tố 10/8)172.16.0.0
đến 172.31.255.255
(tiền tố 172.16/12)192.168.0.0
đến 192.168.255.255
(tiền tố 192.168/16)Với mục đích của hướng dẫn này, chúng tôi sẽ sử dụng 10.8.0.0/24
làm khối địa chỉ IP từ dãy IP dành riêng đầu tiên. Dải này sẽ cho phép tối đa 255 kết nối ngang hàng khác nhau và thường không có địa chỉ chồng chéo hoặc xung đột với các dải IP riêng khác. Vui lòng chọn dải địa chỉ phù hợp với cấu hình mạng của bạn nếu dải ví dụ này không tương thích với mạng của bạn.
WireGuard Server sẽ sử dụng một địa chỉ IP duy nhất trong phạm vi cho địa chỉ private tunnel IPv4 của nó. Chúng tôi sẽ sử dụng 10.8.0.1/24
ở đây, nhưng bất kỳ địa chỉ nào trong phạm vi 10.8.0.1
đến 10.8.0.255
đều có thể được sử dụng. Ghi lại địa chỉ IP mà bạn chọn nếu bạn sử dụng thứ gì đó khác với 10.8.0.1/24
. Bạn sẽ thêm địa chỉ IPv4 này vào tệp cấu hình mà bạn xác định trong Bước 3 — Tạo Cấu hình Máy chủ WireGuard.
Nếu bạn đang sử dụng WireGuard với IPv6 thì bạn sẽ cần tạo tiền tố địa chỉ IPv6 unicast cục bộ duy nhất dựa trên thuật toán trong RFC 4193. Các địa chỉ bạn sử dụng với WireGuard sẽ được liên kết với giao diện đường hầm ảo. Bạn sẽ cần hoàn thành một số bước để tạo tiền tố IPv6 ngẫu nhiên, duy nhất trong khối fd00::/8
dành riêng cho địa chỉ IPv6 riêng tư.
Theo RFC, cách được khuyến nghị để có được tiền tố IPv6 duy nhất là kết hợp thời gian trong ngày với giá trị nhận dạng duy nhất từ hệ thống như số sê-ri hoặc ID thiết bị. Các giá trị đó sau đó được băm và cắt bớt, dẫn đến một tập hợp các bit có thể được sử dụng làm địa chỉ duy nhất trong khối IP riêng fd00::/8
.
Để bắt đầu tạo phạm vi IPv6 cho WireGuard Server của bạn, hãy thu thập 64-bit timestamp bằng tiện ích date
bằng lệnh sau:
- date +%s%N
Bạn sẽ nhận được một số như sau, là số giây (%s
trong lệnh date
) và nano giây (%N
) kể từ 1970-01-01 00:00:00 UTC được kết hợp với nhau:
Output1628101352127592197
Ghi lại giá trị ở đâu đó để sử dụng sau trong phần này. Tiếp theo, sao chép giá trị machine-id
cho máy chủ của bạn từ tệp /var/lib/dbus/machine-id
. Số nhận dạng này là duy nhất cho hệ thống của bạn và sẽ không thay đổi miễn là máy chủ còn tồn tại.
- cat /var/lib/dbus/machine-id
Bạn sẽ nhận được đầu ra như sau:
/var/lib/dbus/machine-id
20086c25853947c7aeee2ca1ea849d7d
Bây giờ, bạn cần kết hợp timestamp với machine-id
và hash giá trị kết quả bằng thuật toán SHA-1. Lệnh sẽ sử dụng định dạng sau:
printf <timestamp><machine-id> | sha1sum
Chạy lệnh thay thế trong timestamp và giá trị nhận dạng máy của bạn:
- printf 162810135212759219720086c25853947c7aeee2ca1ea849d7d | sha1sum
Bạn sẽ nhận được một giá trị hash như sau:
Output4f267c51857d6dc93a0bca107bca2f0d86fac3bc -
Lưu ý rằng đầu ra của lệnh sha1sum
ở dạng thập lục phân, vì vậy đầu ra sử dụng hai ký tự để biểu thị một byte dữ liệu. Ví dụ 4f
và 26
trong đầu ra của ví dụ là hai byte đầu tiên của dữ liệu được băm.
Thuật toán trong RFC chỉ yêu cầu 40 bit nhỏ nhất (ở cuối) hoặc 5 byte của đầu ra được băm. Sử dụng lệnh cut
để in 5 byte được mã hóa thập lục phân cuối cùng từ hash:
- printf 4f267c51857d6dc93a0bca107bca2f0d86fac3bc | cut -c 31-
Đối số -c
yêu cầu lệnh cut
chỉ chọn một bộ ký tự được chỉ định. Đối số 31-
yêu cầu cut
in tất cả các ký tự từ vị trí 31 đến cuối dòng nhập.
Bạn sẽ nhận được đầu ra như sau:
Output0d86fac3bc
Trong đầu ra ví dụ này, tập hợp các byte là: 0d 86 fa c3 bc
.
Giờ đây, bạn có thể tạo tiền tố mạng IPv6 duy nhất của mình bằng cách nối thêm 5 byte bạn đã tạo với tiền tố fd
, phân tách mỗi 2 byte bằng dấu hai chấm :
để dễ đọc. Vì mỗi subnet trong tiền tố duy nhất của bạn có thể chứa tổng cộng 18.446.744.073.709.551.616 địa chỉ IPv6 có thể có, nên bạn có thể hạn chế subnet ở kích thước tiêu chuẩn là /64
để đơn giản.
Sử dụng các byte được tạo trước đó với kích thước subnet /64
, tiền tố kết quả sẽ như sau:
Unique Local IPv6 Address Prefix
fd0d:86fa:c3bc::/64
Phạm vi fd0d:86fa:c3bc::/64
này là những gì bạn sẽ sử dụng để gán các địa chỉ IP riêng lẻ cho các giao diện đường hầm WireGuard của bạn trên máy chủ và các peer. Để phân bổ IP cho máy chủ, hãy thêm 1 sau ký tự ::
cuối cùng. Địa chỉ kết quả sẽ là fd0d:86fa:c3bc::1/64
. Các peer có thể sử dụng bất kỳ IP nào trong phạm vi, nhưng thông thường, bạn sẽ tăng giá trị lên một giá trị mỗi khi bạn thêm một peer, ví dụ: fd0d:86fa:c3bc::2/64
. Ghi lại IP và tiến hành thiết lập cấu hình WireGuard Server trong phần tiếp theo của hướng dẫn này.
Trước khi tạo cấu hình WireGuard Server của bạn, bạn sẽ cần những thông tin sau:
Đảm bảo rằng bạn có sẵn khóa riêng từ Bước 1 — Cài đặt WireGuard và Tạo Key Pair.
Nếu đang sử dụng WireGuard với IPv4, bạn sẽ cần địa chỉ IP mà bạn đã chọn cho máy chủ ở Bước 2(a) — Chọn Phạm vi IPv4, trong ví dụ này là 10.8.0.1/24
.
Nếu đang sử dụng WireGuard với IPv6, bạn sẽ cần địa chỉ IP cho máy chủ mà bạn đã tạo ở Bước 2(b) — Chọn Phạm vi IPv6. Trong ví dụ này, IP là fd0d:86fa:c3bc::1/64
.
Khi bạn có (các) khóa riêng tư và địa chỉ IP được yêu cầu, hãy tạo một tệp cấu hình mới bằng cách sử dụng nano
hoặc trình chỉnh sửa ưa thích của bạn bằng cách chạy lệnh sau:
- sudo nano /etc/wireguard/wg0.conf
Thêm các dòng sau vào tệp, thay thế khóa riêng tư của bạn thay cho giá trị base64_encoded_private_key_goes_here
được đánh dấu và (các) địa chỉ IP trên dòng Address
. Bạn cũng có thể thay đổi dòng ListenPort
nếu muốn WireGuard khả dụng trên một cổng khác:
[Interface]
PrivateKey = base64_encoded_private_key_goes_here
Address = 10.8.0.1/24, fd0d:86fa:c3bc::1/64
ListenPort = 51820
SaveConfig = true
Dòng SaveConfig
đảm bảo rằng khi tắt giao diện WireGuard, mọi thay đổi sẽ được lưu vào tệp cấu hình.
Lưu và đóng tệp /etc/wireguard/wg0.conf
. Nếu bạn đang sử dụng nano
, bạn có thể làm như vậy bằng CTRL+X
, sau đó Y
và ENTER
để xác nhận. Bây giờ bạn đã có cấu hình máy chủ ban đầu mà bạn có thể xây dựng tùy thuộc vào cách bạn dự định sử dụng máy chủ WireGuard VPN của mình.
Nếu bạn đang sử dụng WireGuard để kết nối một thiết bị ngang hàng với WireGuard Server để chỉ truy cập các dịch vụ trên máy chủ thì bạn không cần phải hoàn thành phần này. Nếu bạn muốn định tuyến lưu lượng truy cập Internet của WireGuard Peer thông qua WireGuard Server thì bạn sẽ cần thiết lập cấu hình chuyển tiếp IP bằng cách làm theo phần này của hướng dẫn.
Để thiết lập cấu hình chuyển tiếp, hãy mở tệp /etc/sysctl.conf
bằng nano
hoặc trình chỉnh sửa ưa thích của bạn:
- sudo nano /etc/sysctl.conf
Nếu bạn đang sử dụng IPv4 với WireGuard, hãy thêm dòng sau vào cuối tệp:
net.ipv4.ip_forward=1
Nếu bạn đang sử dụng IPv6 với WireGuard, hãy thêm dòng này vào cuối tệp:
net.ipv6.conf.all.forwarding=1
Nếu bạn đang sử dụng cả IPv4 và IPv6, hãy đảm bảo rằng bạn bao gồm cả hai dòng. Lưu và đóng tệp khi bạn hoàn tất.
Để đọc tệp và tải các giá trị mới cho phiên cuối hiện tại của bạn, hãy chạy:
- sudo sysctl -p
Outputnet.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
Giờ đây, WireGuard Server của bạn sẽ có thể chuyển tiếp lưu lượng truy cập đến từ thiết bị ethernet VPN ảo tới các thiết bị khác trên máy chủ và từ đó tới Internet công cộng. Sử dụng cấu hình này sẽ cho phép bạn định tuyến tất cả lưu lượng truy cập web từ WireGuard Peer của bạn thông qua địa chỉ IP của máy chủ và địa chỉ IP công khai của khách hàng của bạn sẽ được ẩn một cách hiệu quả.
Tuy nhiên, trước khi lưu lượng truy cập có thể được định tuyến chính xác qua máy chủ của bạn, bạn sẽ cần thiết lập cấu hình một số quy tắc tường lửa. Các quy tắc này sẽ đảm bảo rằng lưu lượng truy cập đến và đi từ WireGuard Server và Peers của bạn diễn ra đúng cách.
Trong phần này, bạn sẽ chỉnh sửa cấu hình của WireGuard Server để thêm các quy tắc tường lửa nhằm đảm bảo lưu lượng đến và đi từ máy chủ và máy khách được định tuyến chính xác. Giống như phần trước, hãy bỏ qua bước này nếu bạn chỉ sử dụng WireGuard VPN cho kết nối máy với máy để truy cập các tài nguyên bị hạn chế đối với VPN của bạn.
Để cho phép lưu lượng truy cập WireGuard VPN thông qua tường lửa của Máy chủ, bạn sẽ cần bật masquerading, đây là một khái niệm iptables cung cấp on-the-fly dynamic network address translation (NAT) nhanh chóng để định tuyến chính xác các kết nối của máy khách.
Trước tiên, hãy tìm giao diện mạng công cộng của WireGuard Server của bạn bằng lệnh phụ ip route
:
- ip route list default
Giao diện chung là chuỗi được tìm thấy trong đầu ra của lệnh này theo sau từ “dev”. Ví dụ: kết quả này hiển thị giao diện có tên eth0
, được đánh dấu bên dưới:
Outputdefault via 203.0.113.1 dev eth0 proto static
Lưu ý tên thiết bị của bạn vì bạn sẽ thêm nó vào quy tắc iptables
trong bước tiếp theo.
Để thêm các quy tắc tường lửa vào WireGuard Server của bạn, hãy mở lại tệp /etc/wireguard/wg0.conf
bằng nano
hoặc trình chỉnh sửa ưa thích của bạn.
- sudo nano /etc/wireguard/wg0.conf
Ở cuối tệp sau dòng SaveConfig = true
, hãy dán các dòng sau:
. . .
PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Các dòng PostUp
sẽ chạy khi WireGuard Server khởi động đường hầm VPN ảo. Trong ví dụ ở đây, nó sẽ thêm ba quy tắc ufw
và iptables
:
ufw route allow in on wg0 out on eth0
- Quy tắc này sẽ cho phép chuyển tiếp lưu lượng IPv4 và IPv6 đến trên giao diện wg0
VPN sang giao diện mạng eth0
trên máy chủ. Nó hoạt động cùng với các giá trị sysctl net.ipv4.ip_forward
và net.ipv6.conf.all.forwarding
mà bạn đã cấu hình trong phần trước.iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
- Quy tắc này thiết lập cấu hình giả mạo và ghi lại lưu lượng IPv4 đi vào giao diện wg0
VPN để làm cho nó có vẻ như bắt nguồn trực tiếp từ địa chỉ IPv4 công cộng của WireGuard Server.ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
- Quy tắc này thiết lập cấu hình giả mạo và ghi lại lưu lượng IPv6 đi vào giao diện wg0
VPN để làm cho nó có vẻ như bắt nguồn trực tiếp từ địa chỉ IPv6 công cộng của WireGuard Server.Quy tắc PreDown
chạy khi WireGuard Server dừng đường hầm VPN ảo. Các quy tắc này ngược lại với quy tắc PostUp
và có chức năng hoàn tác các quy tắc chuyển tiếp và giả mạo cho giao diện VPN khi VPN bị dừng.
Trong cả hai trường hợp, hãy chỉnh sửa cấu hình để bao gồm hoặc loại trừ các quy tắc IPv4 và IPv6 phù hợp với VPN của bạn. Ví dụ: nếu bạn chỉ đang sử dụng IPv4, thì bạn có thể loại trừ các dòng bằng lệnh ip6tables
.
Ngược lại, nếu bạn chỉ sử dụng IPv6, thì hãy chỉnh sửa cấu hình để chỉ bao gồm các lệnh ip6tables
. Các dòng ufw
phải tồn tại cho bất kỳ sự kết hợp nào của mạng IPv4 và IPv6. Lưu và đóng tệp khi bạn hoàn tất.
Phần cuối cùng của việc thiết lập cấu hình tường lửa trên WireGuard Server của bạn là cho phép lưu lượng truy cập đến và đi từ chính cổng WireGuard UDP. Nếu bạn không thay đổi cổng trong tệp /etc/wireguard/wg0.conf
của máy chủ, cổng mà bạn sẽ mở là 51820
. Nếu bạn chọn một cổng khác khi chỉnh sửa cấu hình, hãy đảm bảo thay thế cổng đó trong lệnh UFW sau.
Trong trường hợp bạn quên mở cổng SSH khi làm theo hướng dẫn điều kiện tiên quyết, hãy thêm nó vào đây:
- sudo ufw allow 51820/udp
- sudo ufw allow OpenSSH
Lưu ý: Nếu bạn đang sử dụng một tường lửa khác hoặc đã tùy chỉnh cấu hình UFW của mình, bạn có thể cần thêm các quy tắc tường lửa bổ sung. Ví dụ: nếu bạn quyết định tạo đường hầm tất cả lưu lượng truy cập mạng của mình qua kết nối VPN, bạn sẽ cần đảm bảo rằng lưu lượng truy cập cổng 53
được phép cho các yêu cầu DNS và các cổng như 80
và 443
tương ứng cho lưu lượng HTTP và HTTPS. Nếu có các giao thức khác mà bạn đang sử dụng qua VPN thì bạn cũng sẽ cần thêm các quy tắc cho chúng.
Sau khi thêm các quy tắc đó, hãy tắt và bật lại UFW để khởi động lại và tải các thay đổi từ tất cả các tệp bạn đã sửa đổi:
- sudo ufw disable
- sudo ufw enable
Bạn có thể xác nhận các quy tắc được áp dụng bằng cách chạy lệnh ufw status
. Chạy nó và bạn sẽ nhận được đầu ra như sau:
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
51280/udp ALLOW Anywhere
22/tcp ALLOW Anywhere
51280/udp (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
WireGuard Server của bạn hiện được thiết lập cấu hình để xử lý chính xác lưu lượng của VPN, bao gồm chuyển tiếp và giả mạo cho các peer. Với các quy tắc tường lửa đã có, bạn có thể tự khởi động dịch vụ WireGuard để lắng nghe các kết nối ngang hàng.
WireGuard có thể được thiết lập cấu hình để chạy dưới dạng dịch vụ systemd
bằng cách sử dụng tập lệnh wg-quick
tích hợp sẵn. Mặc dù bạn có thể sử dụng lệnh wg
theo cách thủ công để tạo đường hầm mỗi khi bạn muốn sử dụng VPN, nhưng làm như vậy là một quy trình thủ công lặp đi lặp lại và dễ xảy ra lỗi. Thay vào đó, bạn có thể sử dụng systemctl
để quản lý đường hầm với sự trợ giúp của tập lệnh wg-quick
.
Sử dụng dịch vụ systemd
có nghĩa là bạn có thể thiết lập cấu hình WireGuard khởi động khi khởi động để bạn có thể kết nối với VPN của mình bất kỳ lúc nào miễn là máy chủ đang chạy. Để thực hiện việc này, hãy bật dịch vụ wg-quick
cho đường hầm wg0
mà bạn đã xác định bằng cách thêm nó vào systemctl
:
- sudo systemctl enable wg-quick@wg0.service
Lưu ý rằng lệnh chỉ định tên của tên thiết bị đường hầm wg0
là một phần của tên dịch vụ. Tên này ánh xạ tới tệp cấu hình /etc/wireguard/wg0.conf
. Cách tiếp cận đặt tên này có nghĩa là bạn có thể tạo bao nhiêu đường hầm VPN riêng tùy thích khi sử dụng máy chủ của mình.
Ví dụ: bạn có thể có một thiết bị đường hầm và tên của prod
và tệp cấu hình của nó sẽ là /etc/wireguard/prod.conf
. Mỗi cấu hình đường hầm có thể chứa các cài đặt tường lửa IPv4, IPv6 và máy khách khác nhau. Bằng cách này, bạn có thể hỗ trợ nhiều kết nối ngang hàng khác nhau, mỗi kết nối có địa chỉ IP và quy tắc định tuyến riêng.
Bây giờ bắt đầu dịch vụ:
- sudo systemctl start wg-quick@wg0.service
Kiểm tra kỹ xem dịch vụ WireGuard có đang hoạt động hay không bằng lệnh sau. Bạn sẽ thấy active (running)
trong đầu ra:
- sudo systemctl status wg-quick@wg0.service
Output● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2021-08-25 15:24:14 UTC; 5s ago
Docs: man:wg-quick(8)
man:wg(8)
https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
Process: 3245 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
Main PID: 3245 (code=exited, status=0/SUCCESS)
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] wg setconf wg0 /dev/fd/63
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip -4 address add 10.8.0.1/24 dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip -6 address add fd0d:86fa:c3bc::1/64 dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip link set mtu 1420 up dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ufw route allow in on wg0 out on eth0
Aug 25 15:24:14 wg0 wg-quick[3279]: Rule added
Aug 25 15:24:14 wg0 wg-quick[3279]: Rule added (v6)
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Aug 25 15:24:14 wg0 systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
Đầu ra hiển thị các lệnh ip
được sử dụng để tạo thiết bị ảo wg0
và gán cho nó các địa chỉ IPv4 và IPv6 mà bạn đã thêm vào tệp cấu hình. Bạn có thể sử dụng các quy tắc này để khắc phục sự cố đường hầm hoặc bằng chính lệnh wg
nếu bạn muốn thử thiết lập cấu hình giao diện VPN theo cách thủ công.
Với máy chủ đã được thiết lập cấu hình và đang chạy, bước tiếp theo là thiết lập cấu hình máy khách của bạn dưới dạng WireGuard Peer và kết nối với WireGuard Server.
Thiết lập cấu hình WireGuard Peer tương tự như thiết lập WireGuard Server. Khi bạn đã cài đặt phần mềm máy khách, bạn sẽ tạo cặp khóa công khai và khóa riêng, quyết định địa chỉ IP hoặc địa chỉ cho peer, xác định tệp cấu hình cho peer, sau đó bắt đầu đường hầm bằng cách sử dụng tập lệnh wg-quick
.
Bạn có thể thêm bao nhiêu peer tùy thích vào VPN của mình bằng cách tạo một cặp khóa và cấu hình theo các bước sau. Nếu bạn thêm nhiều peer vào VPN, hãy nhớ theo dõi địa chỉ IP riêng của họ để tránh xung đột.
Để thiết lập cấu hình WireGuard Peer, hãy đảm bảo rằng bạn đã cài đặt gói WireGuard bằng các lệnh apt
dưới đây. Trên mạng WireGuard Peer chạy:
- sudo apt update
- sudo apt install wireguard
Tiếp theo, bạn sẽ cần tạo cặp khóa trên peer bằng các bước tương tự như bạn đã sử dụng trên máy chủ. Từ máy cục bộ hoặc máy chủ từ xa sẽ hoạt động như một peer, hãy tiếp tục và tạo khóa riêng cho peer bằng cách sử dụng các lệnh sau:
- wg genkey | sudo tee /etc/wireguard/private.key
- sudo chmod go= /etc/wireguard/private.key
Một lần nữa, bạn sẽ nhận được một dòng đầu ra được mã hóa base64
, đó là khóa riêng. Một bản sao của đầu ra cũng được lưu trữ trong /etc/wireguard/private.key
. Cẩn thận ghi lại khóa riêng tư được xuất ra vì bạn sẽ cần thêm nó vào tệp cấu hình của WireGuard ở phần sau trong phần này.
Tiếp theo, sử dụng lệnh sau để tạo tệp khóa chung:
- sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
Bạn sẽ lại nhận được một dòng đầu ra được mã hóa base64
, đây là khóa chung cho WireGuard Peer của bạn. Sao chép nó ở đâu đó để tham khảo, vì bạn sẽ cần phân phối khóa chung cho WireGuard Server để thiết lập kết nối được mã hóa.
Bây giờ bạn đã có một cặp khóa, bạn có thể tạo tệp cấu hình cho peer chứa tất cả thông tin cần thiết để thiết lập kết nối với WireGuard Server.
Bạn sẽ cần một vài thông tin cho tệp cấu hình:
base64
mà bạn đã tạo trên peer.base64
từ WireGuard Server.Với tất cả thông tin này trong tay, hãy mở tệp /etc/wireguard/wg0.conf
mới trên máy WireGuard Peer bằng nano
hoặc trình chỉnh sửa ưa thích của bạn:
- sudo nano /etc/wireguard/wg0.conf
Thêm các dòng sau vào tệp, thay thế các dữ liệu khác nhau vào các phần được đánh dấu theo yêu cầu:
[Interface]
PrivateKey = base64_encoded_peer_private_key_goes_here
Address = 10.8.0.2/24
Address = fd0d:86fa:c3bc::2/64
[Peer]
PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
AllowedIPs = 10.8.0.0/24, fd0d:86fa:c3bc::/64
Endpoint = 203.0.113.1:51820
Lưu ý cách dòng Address
đầu tiên sử dụng địa chỉ IPv4 từ subnet 10.8.0.0/24
mà bạn đã chọn trước đó. Địa chỉ IP này có thể là bất cứ thứ gì trong subnet miễn là nó khác với IP của máy chủ. Tăng địa chỉ lên 1 mỗi lần bạn thêm một peer thường là cách dễ nhất để phân bổ IP.
Tương tự như vậy, hãy lưu ý cách dòng Address
thứ hai sử dụng địa chỉ IPv6 từ subnet mà bạn đã tạo trước đó và tăng địa chỉ của máy chủ lên một. Một lần nữa, bất kỳ IP nào trong phạm vi đều hợp lệ nếu bạn quyết định sử dụng một địa chỉ khác.
Phần đáng chú ý khác của tệp là dòng AllowedIPs
cuối cùng. Hai phạm vi IPv4 và IPv6 này hướng dẫn peer chỉ gửi lưu lượng qua VPN nếu hệ thống đích có địa chỉ IP trong cả hai phạm vi. Sử dụng chỉ thị AllowedIPs
, bạn có thể hạn chế VPN trên peer chỉ kết nối với các peer và dịch vụ khác trên VPN, hoặc bạn có thể thiết lập cấu hình cài đặt để tạo đường hầm cho tất cả lưu lượng truy cập qua VPN và sử dụng WireGuard Server làm cổng.
Nếu bạn chỉ đang sử dụng IPv4, hãy bỏ qua phạm vi fd0d:86fa:c3bc::/64
ở cuối (bao gồm cả dấu phẩy ,
). Ngược lại, nếu bạn chỉ sử dụng IPv6 thì chỉ bao gồm tiền tố fd0d:86fa:c3bc::/64
và bỏ qua phạm vi 10.8.0.0/24
IPv4.
Trong cả hai trường hợp, nếu bạn muốn gửi tất cả lưu lượng truy cập của peer qua VPN và sử dụng WireGuard Server làm cổng cho tất cả lưu lượng, thì bạn có thể sử dụng 0.0.0.0/0
, đại diện cho toàn bộ không gian địa chỉ IPv4 và :: /0
cho toàn bộ không gian địa chỉ IPv6.
Nếu bạn đã chọn định tuyến tất cả lưu lượng truy cập của peer qua đường hầm bằng cách sử dụng các tuyến 0.0.0.0/0
hoặc ::/0
và peer là một hệ thống từ xa, thì bạn sẽ cần phải hoàn thành các bước trong phần này. Nếu peer của bạn là một hệ thống cục bộ thì tốt nhất là bỏ qua phần này.
Đối với các peer từ xa mà bạn truy cập qua SSH hoặc một số giao thức khác bằng địa chỉ IP công cộng, bạn sẽ cần thêm một số quy tắc bổ sung vào tệp wg0.conf
của peer. Các quy tắc này sẽ đảm bảo rằng bạn vẫn có thể kết nối với hệ thống từ bên ngoài đường hầm khi nó được kết nối. Mặt khác, khi đường hầm được thiết lập, tất cả lưu lượng truy cập thường được xử lý trên giao diện mạng công cộng sẽ không được định tuyến chính xác để bỏ qua giao diện đường hầm wg0
, dẫn đến hệ thống từ xa không thể truy cập được.
Trước tiên, bạn cần xác định địa chỉ IP mà hệ thống sử dụng làm cổng mặc định. Chạy lệnh ip route
sau:
- ip route list table main default
Bạn sẽ nhận được đầu ra như sau:
Outputdefault via 203.0.113.1 dev eth0 proto static
Lưu ý địa chỉ IP được đánh dấu của cổng 203.0.113.1
để sử dụng sau này và thiết bị eth0
. Tên thiết bị của bạn có thể khác. Nếu vậy, hãy thay thế nó ở vị trí của eth0
trong các lệnh dưới đây.
Tiếp theo tìm IP public cho hệ thống bằng cách kiểm tra thiết bị bằng lệnh ip address show
:
- ip -brief address show eth0
Bạn sẽ nhận được đầu ra như sau:
Outputeth0 UP 203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64
Trong kết quả ví dụ này, IP 203.0.113.5
được đánh dấu (không có /20
) là địa chỉ công khai được gán cho thiết bị eth0
mà bạn sẽ cần thêm vào cấu hình WireGuard.
Bây giờ, hãy mở tệp /etc/wireguard/wg0.conf
của WireGuard Peer bằng nano
hoặc trình chỉnh sửa ưa thích của bạn.
- sudo nano /etc/wireguard/wg0.conf
Trước dòng [Peer]
thêm 4 dòng sau:
PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1
[Peer]
. . .
Những dòng này sẽ tạo quy tắc định tuyến tùy chỉnh và thêm tuyến đường tùy chỉnh để đảm bảo rằng lưu lượng truy cập công cộng vào hệ thống sử dụng cổng mặc định.
PostUp = ip rule add table 200 from 203.0.113.5
- Lệnh này tạo quy tắc kiểm tra mọi mục định tuyến trong bảng được đánh số 200
khi IP khớp với địa chỉ công cộng 203.0.113.5
của hệ thống.PostUp = ip route add table 200 default via 203.0.113.1
- Lệnh này đảm bảo rằng mọi lưu lượng đang được xử lý bởi bảng 200
sẽ sử dụng cổng 203.0.113.1
để định tuyến, thay vì giao diện WireGuard.Các dòng PreDown
loại bỏ quy tắc tùy chỉnh và định tuyến khi tắt đường hầm.
Lưu ý: Bảng số 200
là tùy ý khi xây dựng các quy tắc này. Bạn có thể sử dụng giá trị từ 2 đến 252 hoặc bạn có thể sử dụng tên tùy chỉnh bằng cách thêm nhãn vào tệp /etc/iproute2/rt_tables
, sau đó tham chiếu tên thay vì giá trị số.
Để biết thêm thông tin về cách hoạt động của bảng định tuyến trong Linux, hãy truy cập Routing Tables Section của Hướng dẫn IP Layer Network Administration với Linux.
Nếu bạn đang định tuyến tất cả lưu lượng truy cập ngang hàng qua VPN, hãy đảm bảo rằng bạn đã thiết lập cấu hình đúng quy tắc sysctl
và iptables
trên WireGuard Server ở Bước 4 — Điều chỉnh Cấu hình Mạng của WireGuard Server và Bước 5 — Thiết lập cấu hình Tường lửa của WireGuard Server.
Nếu bạn đang sử dụng WireGuard Server làm cổng VPN cho tất cả lưu lượng truy cập ngang hàng của mình, bạn sẽ cần thêm một dòng vào phần [Interface]
chỉ định DNS resolvers. Nếu bạn không thêm cài đặt này thì các yêu cầu DNS của bạn có thể không được VPN bảo mật hoặc chúng có thể được tiết lộ cho Nhà cung cấp dịch vụ Internet của bạn hoặc các bên thứ ba khác.
Nếu bạn chỉ sử dụng WireGuard để truy cập tài nguyên trên mạng VPN hoặc trong cấu hình ngang hàng thì bạn có thể bỏ qua phần này.
Để thêm DNS resolvers vào cấu hình ngang hàng của bạn, trước tiên hãy xác định máy chủ DNS nào mà WireGuard Server của bạn đang sử dụng. Chạy lệnh sau trên WireGuard Server, thay thế tên thiết bị ethernet của bạn bằng eth0
nếu nó khác với ví dụ này:
- resolvectl dns eth0
Bạn sẽ nhận được đầu ra như sau:
OutputLink 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888
Địa chỉ IP xuất ra là DNS resolvers mà máy chủ đang sử dụng. Bạn có thể chọn sử dụng bất kỳ hoặc tất cả chúng, hoặc chỉ IPv4 hoặc IPv6 tùy thuộc vào nhu cầu của bạn. Ghi lại các trình giải quyết mà bạn sẽ sử dụng.
Tiếp theo, bạn sẽ cần thêm các trình phân giải đã chọn vào tệp cấu hình của WireGuard Peer. Quay lại WireGuard Peer, mở tệp /etc/wireguard/wg0.conf
bằng nano
hoặc trình chỉnh sửa ưa thích của bạn:
- sudo nano /etc/wireguard/wg0.conf
Trước dòng [Peer]
, hãy thêm vào như sau:
DNS = 67.207.67.2 2001:4860:4860::8844
[Peer]
. . .
Một lần nữa, tùy thuộc vào sở thích hoặc yêu cầu của bạn đối với IPv4 và IPv6, bạn có thể chỉnh sửa danh sách theo nhu cầu của mình.
Khi bạn đã kết nối với VPN ở bước sau, bạn có thể kiểm tra xem bạn có đang gửi truy vấn DNS qua VPN hay không bằng cách sử dụng trang web như DNS leak test.com.
Bạn cũng có thể kiểm tra xem peer của mình có đang sử dụng trình phân giải được thiết lập cấu hình hay không bằng lệnh resolvectl dns
giống như bạn đã chạy trên máy chủ. Bạn sẽ nhận được kết quả như sau, hiển thị các trình phân giải DNS mà bạn đã thiết lập cấu hình cho đường hầm VPN:
OutputGlobal: 67.207.67.2 67.207.67.3
. . .
Với tất cả các cài đặt DNS resolver này, giờ đây bạn đã sẵn sàng thêm khóa công khai của peer vào máy chủ, sau đó bắt đầu đường hầm WireGuard trên peer.
Trước khi kết nối peer với máy chủ, điều quan trọng là phải thêm khóa công khai của peer vào WireGuard Server. Bước này đảm bảo rằng bạn sẽ có thể kết nối và định tuyến lưu lượng truy cập qua VPN. Nếu không hoàn thành bước này, máy chủ WireGuard sẽ không cho phép peer gửi hoặc nhận bất kỳ lưu lượng truy cập nào qua đường hầm.
Đảm bảo rằng bạn có một bản sao của khóa công khai được mã hóa base64
cho WireGuard Peer bằng cách chạy:
- sudo cat /etc/wireguard/public.key
OutputPeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
Bây giờ hãy đăng nhập vào máy chủ WireGuard và chạy lệnh sau:
- sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd0d:86fa:c3bc::2
Lưu ý rằng phần allowed-ips
của lệnh có danh sách địa chỉ IPv4 và IPv6 được phân tách bằng dấu phẩy. Bạn có thể chỉ định các IP riêng lẻ nếu bạn muốn hạn chế địa chỉ IP mà một peer có thể tự gán hoặc một dải như trong ví dụ nếu các peer của bạn có thể sử dụng bất kỳ địa chỉ IP nào trong dải VPN. Cũng lưu ý rằng không có hai peer nào có thể có cùng cài đặt allowed-ips
.
Nếu bạn muốn cập nhật các allowed-ips
cho một peer hiện có, bạn có thể chạy lại lệnh tương tự, nhưng thay đổi địa chỉ IP. Nhiều địa chỉ IP được hỗ trợ. Ví dụ: để thay đổi WireGuard Peer mà bạn vừa thêm để thêm một IP như 10.8.0.100
vào các IP 10.8.0.2
và fd0d:86fa:c3bc::2
hiện có, bạn sẽ chạy như sau:
- sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd0d:86fa:c3bc::2
Khi bạn đã chạy lệnh để thêm peer, hãy kiểm tra trạng thái của đường hầm trên máy chủ bằng lệnh wg
:
- sudo wg
Outputinterface: wg0
public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
private key: (hidden)
listening port: 51820
peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
allowed ips: 10.8.0.2/32, fd0d:86fa:c3bc::/128
Lưu ý cách đường peer
hiển thị khóa công khai của WireGuard Peer và địa chỉ IP hoặc dải địa chỉ mà nó được phép sử dụng để gán cho mình một IP.
Bây giờ bạn đã xác định các tham số kết nối của peer trên máy chủ, bước tiếp theo là bắt đầu đường hầm trên peer.
Giờ đây, cả máy chủ và peer của bạn đều được thiết lập cấu hình để hỗ trợ lựa chọn IPv4, IPv6, chuyển tiếp gói và độ phân giải DNS của bạn, đã đến lúc kết nối peer với đường hầm VPN.
Vì bạn có thể chỉ muốn bật VPN cho một số trường hợp sử dụng nhất định, nên chúng ta sẽ sử dụng lệnh wg-quick
để thiết lập kết nối theo cách thủ công. Nếu bạn muốn tự động khởi động đường hầm giống như bạn đã làm trên máy chủ, hãy làm theo các bước trong Bước 6 — Khởi động WireGuard Server thay vì sử dụng lệnh wq-quick
.
Trong trường hợp bạn đang định tuyến tất cả lưu lượng thông qua VPN và đã thiết lập chuyển tiếp DNS, bạn sẽ cần cài đặt tiện ích resolvconf
trên WireGuard Peer trước khi bắt đầu đường hầm. Chạy lệnh sau để thiết lập:
- sudo apt install resolvconf
Để bắt đầu đường hầm, hãy chạy phần sau trên WireGuard Peer:
- sudo wg-quick up wg0
Bạn sẽ nhận được đầu ra như sau:
Output[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x
Lưu ý các địa chỉ IPv4 và IPv6 được đánh dấu mà bạn đã gán cho peer.
Nếu bạn đặt AllowedIPs
trên peer thành 0.0.0.0/0
và ::/0
(hoặc sử dụng các dải ô khác với dải ô mà bạn đã chọn cho VPN), thì đầu ra của bạn sẽ giống như sau:
Output[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] ip6tables-restore -n
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n
Trong ví dụ này, hãy lưu ý các tuyến được đánh dấu mà lệnh đã thêm, tương ứng với AllowedIPs
trong cấu hình ngang hàng.
Bạn có thể kiểm tra trạng thái của đường hầm trên peer bằng lệnh wg
:
- sudo wg
Outputinterface: wg0
public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
private key: (hidden)
listening port: 49338
fwmark: 0xca6c
peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
endpoint: 203.0.113.1:51820
allowed ips: 10.8.0.0/24, fd0d:86fa:c3bc::/64
latest handshake: 1 second ago
transfer: 6.50 KiB received, 15.41 KiB sent
Bạn cũng có thể kiểm tra lại trạng thái trên máy chủ và bạn sẽ nhận được kết quả tương tự.
Xác minh rằng peer của bạn đang sử dụng VPN bằng cách sử dụng lệnh ip route
và ip -6 route
. Nếu bạn đang sử dụng VPN làm cổng cho tất cả lưu lượng truy cập Internet của mình, hãy kiểm tra xem giao diện nào sẽ được sử dụng cho lưu lượng truy cập đến các trình phân giải DNS 1.1.1.1
và 2606:4700:4700::1111
của CloudFlare.
Nếu bạn chỉ sử dụng WireGuard để truy cập tài nguyên trên VPN, hãy thay thế địa chỉ IPv4 hoặc IPv6 hợp lệ như chính cổng vào các lệnh này. Ví dụ 10.8.0.1
hoặc fd0d:86fa:c3bc::1
.
- ip route get 1.1.1.1
Output1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
cache
Lưu ý rằng thiết bị wg0
được sử dụng và địa chỉ IPv4 10.8.0.2
mà bạn đã gán cho peer. Tương tự như vậy, nếu bạn đang sử dụng IPv6, hãy chạy như sau:
- ip -6 route get 2606:4700:4700::1111
Output2606:4700:4700::1111 from :: dev wg0 table 51820 src fd0d:86fa:c3bc::2 metric 1024 pref medium
Lưu ý lại giao diện wg0
và địa chỉ IPv6 fd0d:86fa:c3bc::2
mà bạn đã gán cho máy ngang hàng.
Nếu đồng nghiệp của bạn đã cài đặt trình duyệt, bạn cũng có thể truy cập ipleak.net và ipv6-test.com để xác nhận rằng peer của bạn đang định tuyến lưu lượng truy cập qua VPN.
Khi bạn đã sẵn sàng ngắt kết nối khỏi VPN trên peer, hãy sử dụng lệnh wg-quick
:
- sudo wg-quick down wg0
Bạn sẽ nhận được đầu ra như sau cho biết rằng đường hầm VPN đã bị tắt:
Output[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f
Nếu bạn đặt AllowedIPs
trên peer thành 0.0.0.0/0
và ::/0
(hoặc sử dụng các dải ô khác với dải ô mà bạn đã chọn cho VPN), thì đầu ra của bạn sẽ giống như sau:
Output[#] ip rule delete table 200 from 203.0.113.5
[#] ip route delete table 200 default via 203.0.113.1
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f
[#] iptables-restore -n
[#] ip6tables-restore -n
Để kết nối lại với VPN, hãy chạy lại lệnh wg-quick up wg0
trên peer. Nếu bạn muốn xóa hoàn toàn cấu hình của một peer khỏi WireGuard Server, bạn có thể chạy lệnh sau, đảm bảo thay thế khóa công khai chính xác cho peer mà bạn muốn xóa:
- sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove
Thông thường, bạn sẽ chỉ cần xóa cấu hình peer nếu peer không còn tồn tại hoặc nếu các khóa mã hóa của nó bị xâm phạm hoặc thay đổi. Nếu không, tốt hơn là giữ nguyên cấu hình để peer có thể kết nối lại với VPN mà không yêu cầu bạn thêm khóa và allowed-ips
mỗi lần.
Trong hướng dẫn này, bạn đã cài đặt gói và công cụ WireGuard trên cả hệ thống Ubuntu 20.04 của máy chủ và máy khách. Bạn đã thiết lập quy tắc tường lửa cho WireGuard và cài đặt hạt nhân đã thiết lập cấu hình để cho phép chuyển tiếp gói bằng cách sử dụng lệnh sysctl
trên máy chủ. Bạn đã học cách tạo các khóa mã hóa WireGuard riêng tư và công khai cũng như cách thiết lập cấu hình máy chủ và peer (hoặc các peer) để kết nối với nhau.
Nếu mạng của bạn sử dụng IPv6, bạn cũng đã học cách tạo một dải địa chỉ cục bộ duy nhất để sử dụng với các kết nối ngang hàng. Cuối cùng, bạn đã học cách giới hạn lưu lượng nào sẽ đi qua VPN bằng cách hạn chế tiền tố mạng mà peer có thể sử dụng, cũng như cách sử dụng WireGuard Server làm cổng VPN để xử lý tất cả lưu lượng truy cập Internet cho peer.
Nếu bạn muốn tìm hiểu thêm về WireGuard, bao gồm cách thiết lập cấu hình các đường hầm nâng cao hơn hoặc sử dụng WireGuard với bộ chứa, hãy truy cập tài liệu chính thức của WireGuard.