Thiết lập VPN tự lưu trữ bằng Wireguard
Một VPN (Virtual Private Network) cho phép người dùng kết nối với một mạng riêng từ xa như thể máy tính của người dùng đã được kết nối trực tiếp đến mạng riêng. Công nghệ này ban đầu được phát triển để cho phép truy cập từ xa vào mạng riêng nội bộ của công ty, đối với những nhân viên không thực sự có mặt tại vị trí của mạng nội bộ.
Máy chủ VPN được triển khai tại vị trí của mạng nội bộ. Máy chủ này nằm trên mạng công cộng và nhân viên có thể truy cập bằng máy khách VPN. Xác thực là cần thiết để kết nối với Máy chủ VPN. Giao tiếp giữa Máy chủ VPN và Máy khách VPN được bảo mật bằng giao thức đường hầm. Lưu ý rằng giao tiếp này có thể được mã hóa hoặc không, nhưng thông thường trong hầu hết các giao thức VPN, nó được mã hóa.
Một cách sử dụng khác của VPN là để ẩn danh khi truy cập Internet hoặc để vượt qua các giới hạn địa lý được áp đặt khi truy cập một số trang web. Trong những trường hợp như vậy, mạng mà người dùng muốn kết nối không phải là mạng riêng, mà thay vào đó, nó là Internet.
Nhiều giao thức VPN đã được phát triển trong nhiều năm. Các giao thức này sử dụng các giao thức đường hầm khác nhau và các thuật toán mã hóa để giao tiếp giữa máy chủ và máy khách.
Một giao thức như vậy, đang được sử dụng rộng rãi gần đây, là Wireguard . Wireguard nhẹ hơn, đơn giản hơn và hiệu suất hơn các giao thức VPN truyền thống được sử dụng phổ biến như OpenVPN, IPSec. Nó đã được triển khai cho Windows, Mac OS và một số lượng lớn các bản phân phối Linux. Trong Linux, nó được thực hiện như một mô-đun hạt nhân. Nó có sẵn trong kho lưu trữ chính thức của Ubuntu 20.04.
Trong bài viết này, chúng ta sẽ xem cách thiết lập Máy chủ và Máy khách Wireguard VPN trong Ubuntu 20.04.
Cài đặt
Đối với bài viết này, tôi đang thiết lập Máy chủ Wireguard trên Ubuntu 20.04 Linode và Máy khách Wireguard trên máy cục bộ của tôi với Ubuntu 20.04.
Gói wireguard
cài đặt cả Máy chủ và Máy khách Wireguard. Chạy lệnh sau trên cả máy chủ và máy khách.
sudo apt install wireguard
Cấu hình máy chủ
Khóa bảo mật
Chúng tôi cần tạo một tập hợp các cặp khóa công khai / riêng tư để xác thực và bảo mật kết nối Wireguard. Điều này có thể được thực hiện bằng cách sử dụng các lệnh sau:
sudo su
cd /etc/wireguard
umask 077
wg genkey | tee private_key | wg pubkey > public_key
Lưu ý rằng chúng tôi đang thực hiện tất cả các tác vụ cấu hình với tư cách là một siêu người dùng. Lý do là quyền truy cập vào thư mục /etc/wireguard
bị ngăn chặn đối với người dùng bình thường và không thể đạt được quyền truy cập thư mục chỉ với các đặc quyền sudo cho người dùng bình thường.
Tiếp theo, chúng tôi đặt mặt nạ tạo tệp thành077
. Điều này có nghĩa là bất cứ khi nào một tệp mới được tạo trong thư mục này bằng bất kỳ quá trình nào, quyền của nó sẽ tự động được che bằng 077. Ví dụ: nếu tệp được tạo trong thư mục này với quyền 777, tệp đó sẽ tự động bị che và quyền có hiệu lực trở thành 700. Điều này được thực hiện để chỉ chủ sở hữu tệp mới có tất cả quyền đối với tệp và những người khác không có quyền.
Trên dòng tiếp theo, chúng tôi tạo cặp khóa công khai / riêng tư cho máy chủ. Chúng được lưu trong các tệp private_key
và public_key
. Để xem các phím, hãy chạy:
cat private_key
cat public_key
Sao chép khóa cá nhân, chúng ta cần nó trong bước tiếp theo.
Lưu ý: Không bao giờ chia sẻ khóa riêng tư của bạn một cách công khai!
Tập tin cấu hình
Hãy tạo một tệp cấu hình cho Máy chủ Wireguard. Bạn có thể chọn bất kỳ tên nào cho tệp. Chúng tôi sẽ tạo một tệp wg0.conf
trong ví dụ này.
vim wg0.conf
Thêm phần sau vào tệp.
[Interface]
Address = 10.20.43.1/24
SaveConfig = true
ListenPort = 51190
PrivateKey =
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -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 -j MASQUERADE
Dán Khóa cá nhân mà chúng tôi đã sao chép trước đó vào dòng 5 trong đoạn mã trên.
Chúng ta phải định cấu hình Wireguard trên một mạng con (ảo) khác với Địa chỉ IP của máy chủ. Ở đây, tôi đã sử dụng 10.20.43.1 cho máy chủ và sẽ sử dụng 10.20.43.2 cho máy khách. Bất kỳ mạng con nào cũng có thể được sử dụng tại đây. Để lấy Địa chỉ IP của máy chủ và giao diện, hãy chạy:
ifconfig
Phần được đánh dấu là Địa chỉ IP
Lưu ý Địa chỉ IP của máy chủ. Điều này là bắt buộc trong quá trình cấu hình máy khách.
Giao diện được sử dụng bởi máy chủ, như trong hình trên, là eth0
. Tên giao diện có thể khác nhau tùy theo mạng của người dùng, có thể là wlan0
hoặc wlp2s0
trong trường hợp người dùng được kết nối với mạng WiFi bằng thẻ không dây.
Thay thế trong PostUp
và PostDown
bằng giao diện của bạn; trong ví dụ này là như vậy eth0
. PostUp
và các PostDown
chỉ thị được sử dụng để chỉ định các lệnh nào sẽ được chạy khi máy chủ khởi động và dừng tương ứng. Trong ví dụ của chúng tôi, chúng tôi sử dụng iptables
lệnh để đặt các quy tắc IP sao cho Địa chỉ IP của máy chủ được chia sẻ bởi các máy khách. Các quy tắc sẽ giảm xuống khi máy chủ dừng.
Lưu và thoát khỏi tệp. Khi sử dụng vim, nhấn Esc , sau đó gõ :wq
và nhấn Enter để lưu và thoát.
Nếu bạn đang sử dụng ufw
tường lửa trên máy chủ, chúng tôi cần cho phép kết nối UDP tới cổng dành cho máy chủ VPN, 51190.
ufw allow 51190/udp
Bắt đầu dịch vụ
Bây giờ khi cấu hình xong, chúng ta có thể bắt đầu dịch vụ Wireguard VPN.
Để cho phép dịch vụ bắt đầu lúc khởi động, hãy chạy:
systemctl enable [email protected]
Lưu ý rằng đây wg0
là tên của tệp cấu hình.
Để bắt đầu dịch vụ, hãy chạy:
service [email protected] start
Xác minh rằng dịch vụ đã bắt đầu thành công:
service [email protected] status
Xác minh rằng giao diện chúng tôi tạo trong tệp cấu hình đã bắt đầu bằng cách sử dụng lệnh IP.
ip a show wg0
Máy chủ Wireguard VPN hiện đã được thiết lập và đang chạy. Hãy cấu hình máy khách ngay bây giờ.
Cấu hình máy khách
Cấu hình máy khách cho Wireguard ít nhiều giống với cấu hình máy chủ. Chúng tôi tạo các khóa cho máy khách, sau đó tạo tệp cấu hình.
Khóa bảo mật
Để tạo cặp khóa công khai / riêng tư cho máy khách, hãy chạy:
sudo su
cd /etc/wireguard
umask 077
wg genkey | tee client_private_key | wg pubkey > client_public_key
Các khóa công khai và riêng tư cho máy khách hiện được tạo tương ứng trong các tệp client_private_key
và client_public_key
.
Kiểm tra xem chúng đã được tạo bằng cat
lệnh.
cat client_private_key
cat client_public_key
Sao chép khóa cá nhân được hiển thị khi chúng tôi cần thêm nó vào tệp cấu hình cho ứng dụng khách.
Tập tin cấu hình
Tạo tệp cấu hình với bất kỳ tên nào bạn muốn. Chúng tôi sẽ tạo nó với tên wg0-client
cho ví dụ này.
vim wg0-client.conf
Thêm cấu hình sau.
[Interface]
# IP Address and Private Key of the Client
Address = 10.20.43.2/24
PrivateKey =
[Peer]
# Public key, IP Address and Port of the Server
PublicKey =
Endpoint = :51190
AllowedIPs = 0.0.0.0/0, ::/0
Nhập địa chỉ mạng con cho máy khách. Như đã mô tả trước đây, chúng tôi sử dụng 10.20.43.2
cho máy khách trong ví dụ này.
Thêm khóa cá nhân của ứng dụng khách đã tạo ở bước trước vào dòng 4 trong mã cấu hình ở trên.
Trong 'Peer', chúng tôi thêm thông tin về máy chủ Wireguard VPN mà chúng tôi muốn kết nối.
Nhập khóa công khai của máy chủ. Nhập Địa chỉ IP của máy chủ , mà chúng tôi đã lưu ý trước đó và cổng ở định dạng nhất định đối với Điểm cuối . Đây là cổng mà chúng tôi đã chỉ định trong tệp cấu hình máy chủ và trên đó dịch vụ VPN trên máy chủ đã bắt đầu.
Các IP được phép phải được nhập như đã cho (0.0.0.0/0) để mọi yêu cầu về IP công cộng động được ứng dụng khách sử dụng sẽ luôn chuyển tiếp đến máy chủ VPN.
Lưu và thoát khỏi tệp. Khi sử dụng vim, nhấn Esc , sau đó gõ :wq
và nhấn Enter để lưu và thoát.
Cho phép dịch vụ khách chạy với mỗi lần khởi động và khởi động nó.
systemctl enable [email protected]
service [email protected] start
Xác minh xem dịch vụ đã bắt đầu chưa.
service [email protected] status
Thêm ngang hàng vào máy chủ
Bây giờ chúng ta có máy chủ và máy khách VPN đang hoạt động. Tuy nhiên, một đường hầm an toàn giữa cả hai sẽ không được thiết lập trừ khi chúng tôi thiết lập một kết nối ngang hàng giữa máy chủ và máy khách.
Quay lại máy chủ. Đầu tiên, dừng dịch vụ VPN .
service [email protected] stop
Tiếp theo, mở tệp cấu hình để thêm cấu hình cho ngang hàng (máy khách).
vim /etc/wireguard/wg0.conf
Nối các dòng sau vào tệp.
[Peer]
PublicKey =
AllowedIPs = 10.20.43.2/32
Bây giờ, hãy khởi động lại dịch vụ VPN .
service [email protected] start
Đó là nó! Đây là tất cả cấu hình cần thiết để thiết lập máy khách và máy chủ Wireguard VPN. Bây giờ hãy thử nghiệm VPN của chúng tôi.
Kiểm tra VPN
Đầu tiên, hãy thực hiện một ping đơn giản từ máy khách đến máy chủ để đảm bảo giao tiếp đường hầm VPN hoạt động. Chạy phần sau trên máy khách :
ping 10.20.43.1
Tiếp theo, mở trình duyệt web và mở bất kỳ trang web nào để kiểm tra xem bạn có thể kết nối Internet từ máy khách hay không. Bạn cũng có thể kiểm tra kết nối internet của mình từ dòng lệnh bằng cách sử dụng wget
.
wget
Bây giờ, chúng tôi đã kiểm tra kết nối đường hầm và kết nối Internet. Nếu cả hai đều hoạt động, bây giờ chúng ta cần đảm bảo rằng tất cả lưu lượng truy cập internet đến máy khách đều đi qua máy chủ.
Đối với điều này, chúng tôi chỉ cần kiểm tra Địa chỉ IP của máy khách như đã thấy trên Internet. Một cách để làm điều đó là truy cập whatsmyip.org . Hoặc từ dòng lệnh khác, chúng ta có thể truy vấn một dịch vụ tương tự khác được gọi là thông tin IP, sử dụng Curl.
Chạy phần sau trên máy khách
curl https://ipinfo.io/ip
Đúng. Đây là Địa chỉ IP công khai của Linode nơi máy chủ VPN được lưu trữ. Đây là cách đạt được tính ẩn danh khi sử dụng VPN, vì trên Internet giờ đây IP của máy chủ VPN được nhìn thấy chứ không phải của máy tính của bạn.
Phần kết luận
Dễ dàng thiết lập là một trong những lợi thế quan trọng nhất của Wireguard so với phần mềm VPN truyền thống như OpenVPN, phần mềm này cần kiến thức mạng và định tuyến cao hơn để thiết lập. Tuy nhiên, thiếu tài liệu chính thức chi tiết về Wireguard, điều này có thể gây ra sự cố nếu thiết lập Wireguard của bạn gặp lỗi hoặc không hoạt động như mong đợi.
Tuy nhiên, Wireguard là một lựa chọn tuyệt vời nếu bạn muốn có một VPN tự lưu trữ để liên lạc an toàn qua Internet. Để tìm hiểu thêm về Wireguard cũng như các giao thức và công nghệ mà nó sử dụng, bạn có thể xem trang web chính thức .