Trong bài viết này, tôi sẽ hướng dẫn bạn, từng bước một, quy trình thiết lập VPN WireGuard trên máy chủ Linux. Nó cho phép bạn truy cập tài nguyên Internet an toàn từ nơi không an toàn như quán cà phê.
Tại sao cần VPN? Và tại sao WireGuard?
Bất cứ khi nào bạn kết nối với, nói, trang web ngân hàng từ vị trí từ xa, bạn rơi vào rủi ro lộ mật khẩu và thông tin nhạy cảm khác cho bất kỳ ai nghe lén trên mạng.
Hy vọng, trang web ngân hàng chính nó sẽ được mã hóa, nghĩa là dữ liệu then chốt giữa ngân hàng và PC hoặc điện thoại của bạn sẽ không đọc được bởi bất kỳ ai nghe lén dọc đường.
Và nếu bạn kết nối từ nhà hoặc văn phòng? Với VPN, bạn có thể yên tâm rằng các yếu tố dữ liệu không bị che khuất bởi mã hóa thông thường sẽ không bị nhìn thấy bởi người xấu.
Nhưng nếu bạn kết nối qua router WiFi công cộng tại sân bay hoặc quán cà phê? Bạn có chắc mạng không bị xâm nhập hoặc có hacker quan sát ngầm?
Để chống lại mối đe dọa thực này, bạn có thể mở kết nối trên laptop hoặc điện thoại đến máy chủ VPN. Cách này tất cả truyền dữ liệu của bạn diễn ra qua một đường hầm ảo. Mọi phần của kết nối nhạy cảm sẽ vô hình đối với bất kỳ ai trên mạng cục bộ bạn đang kết nối.
WireGuard là mới nhất trong ba người chơi lớn trong thế giới VPN mã nguồn mở, hai cái kia là IPsec và OpenVPN.
WireGuard được xây dựng để đơn giản, nhanh, và linh hoạt hơn các cái khác. Nó là sample mới, nhưng nhanh chóng có bạn quan trọng. Nhờ sự đề nghị của chính Linus Torvalds - người tạo ra Linux, WireGuard gần đây đã được tích hợp vào nhân Linux.
Đâu là nơi xây dựng máy chủ VPN?
Chắc chắn, bạn luôn có thể lắp ráp máy chủ VPN tại nhà và cấu hình chuyển tiếp cổng qua router của ISP. Nhưng thường thì chạy nó trên đám mây (cloud) sẽ thực tế hơn.
Đừng lo. Tôi bảo đảm cách này sẽ gần hơn với cấu hình "thiết lập và quên" (set it and forget it) nhanh chóng và không đau đầu. Và rất khó để bất cứ thứ bạn xây tại nhà tin cậy – hoặc an toàn – như cơ sở hạ tầng từ các nhà cung cấp đám mây lớn như AWS.
Tuy nhiên, nếu bạn có một máy chủ Internet được bảo mật chuyên nghiệp đặt ở nhà (hoặc bạn sẵn sàng mạo hiểm với Raspberry Pi dự phòng) thì nó sẽ hoạt động giống hệt nhau.
Nhờ WireGuard, dù trên đám mây hay máy chủ vật lý, tự làm VPN tại nhà chưa bao giờ dễ dàng như vậy. Toàn bộ thiết lập có thể xong trong nửa giờ.
Chuẩn bị
Khởi động instance đám mây của bạn, có thể dùng hướng dẫn từ đây.
Đảm bảo cổng 51820 mở cho máy chủ. Điều này làm với Security groups trên AWS và VPC network firewall trên Google Cloud.
Với các bản Debian/Ubuntu hiện đại, Wireguard có sẵn để cài từ trình quản lý gói như sau:
sudo apt install wireguard Hoặc với yum, từ kho EPEL:
sudo yum install kmod-wireguard wireguard-tools Bước một: tạo khóa mã hóa
Trong bất kỳ thư mục nào trên máy chủ nơi bạn muốn tạo tệp chứa khóa công khai và riêng tư, dùng lệnh này:
umask 077; wg genkey | tee privatekey | wg pubkey > publickey Làm tương tự cho client trong thư mục khác hoặc trên máy cục bộ. Chỉ đảm bảo bạn có thể phân biệt các bộ khóa sau này.
Để thiết lập nhanh, bạn có thể dùng trình tạo khóa trực tuyến. Tuy nhiên tôi khuyên làm thủ công lần đầu. Đảm bảo tệp được tạo với hash khóa vì bạn sẽ dùng chúng ở bước sau.
Bước hai: tạo cấu hình máy chủ
Bạn cần tạo tệp .conf trong thư mục /etc/wireguard. Bạn thậm chí có thể chạy nhiều VPN cùng lúc dùng cổng khác nhau.
Dán mã sau vào tệp mới:
sudo nano /etc/wireguard/wg0.conf [Interface] Address = 10.0.0.1/24 ListenPort = 51820 # dùng PrivateKey của máy chủ PrivateKey = GPAtRSECRETLONGPRIVATEKEYB0J/GDbNQg6V0s= # bạn có thể có bao nhiêu peer tùy ý # nhớ thay giá trị dưới bằng PublicKey của peer [Peer] PublicKey = NwsVexamples4sBURwFl6HVchellou6o63r2B0s= AllowedIPs = 10.0.0.2/32 [Peer] PublicKey = NwsexampleNbw+s4sBnotFl6HrealxExu6o63r2B0s= AllowedIPs = 10.0.0.3/32 Khởi động VPN
sudo systemctl start wg-quick@wg0 Nếu bạn không có systemd (có thể đúng nếu instance chạy Amazon Linux) bạn có thể dùng sudo wg-quick up wg0.
Bước ba: tạo cấu hình client
Trước tiên cài Wireguard trên máy client, giống như trên Linux hoặc qua cửa hàng ứng dụng nếu bạn dùng Windows, macOS, Android, hoặc iPhone.
Nếu bạn dùng trình tạo khóa trực tuyến hoặc script QR ở Bước Một, bạn có thể kết nối điện thoại bằng cách chụp ảnh mã QR.
Khi WireGuard đã cài trên client, cấu hình nó với các giá trị sau:
# Thay giá trị PrivateKey bằng khóa từ giao diện client của bạn [Interface] Address = 10.0.0.2/24 ListenPort = 51820 PrivateKey = CNNjIexAmple4A6NMkrDt4iyKeYD1BxSstzer49b8EI= # dùng PublicKey của máy chủ VPN và Endpoint IP của instance đám mây [Peer] PublicKey = WbdIAnOTher1208Uwu9P17ckEYxI1OFAPZ8Ftu9kRQw= AllowedIPs = 0.0.0.0/0 Endpoint = 34.69.57.99:51820 Có nhiều tùy chọn bổ sung bạn có thể muốn tùy theo trường hợp dùng, như chỉ định DNS hoặc khóa chia sẻ trước (pre-shared keys) cho lớp bảo mật thêm.
Khởi động client giống như máy chủ nếu bạn dùng Linux hoặc qua chính ứng dụng trên các hệ thống khác.
Kiểm tra VPN
Gõ "my ip" vào trình duyệt để khám phá địa chỉ IP công cộng của bạn. Nếu IP bạn nhận được khác địa chỉ máy tính trước khi bật VPN, thì bạn thành công!
(Và nếu bạn quên IP trước đó, thử sudo systemctl stop wg-quick@wg0, kiểm tra và bật lại.)
Hướng Dẫn Khắc Phục Sự Cố
Đảm bảo máy chủ được cấu hình cho chuyển tiếp IP. Kiểm tra tệp /etc/sysctl.conf, hoặc chạy:
echo 1 > /proc/sys/net/ipv4/ip_forward Kết nối thường bị đứt? Thêm này vào phần peer của cấu hình client:
PersistentKeepalive = 25 Không chắc tại sao không hoạt động? Thử sudo tcpdump -i eth trên máy chủ khi thử dùng client.
Cảm ơn bạn đã đọc hướng dẫn này.
Nếu bạn muốn đi sâu hơn, hãy cân nhắc khóa học Manning có phí của tôi về WireGuard VPN.