Cấu hình VPN Client trên Linux: Kinh nghiệm ‘xương máu’ với WireGuard, OpenVPN và IPsec

Network tutorial - IT technology blog
Network tutorial - IT technology blog

Chuyện lúc 2 giờ sáng và bài toán VPN trên Linux

Đồng hồ điểm 2 giờ sáng. Điện thoại mình rung liên hồi: ‘Server backup tại datacenter không đẩy được dữ liệu về, VPN sập rồi!’. Quản lý network cho văn phòng 50 nhân sự và một cụm datacenter nhỏ, chuyện này với mình xảy ra như cơm bữa. Máy chủ backup chạy Ubuntu Server, không giao diện đồ họa. Trong khi đó, file cấu hình VPN đối tác gửi sang lại đủ mọi định dạng.

Kết nối VPN trên Linux không đơn giản là click chuột như Windows. Bạn sẽ phải làm việc trực tiếp với route, interface và những lỗi checksum khó chịu. Để anh em không phải thức trắng đêm, mình tổng hợp cách xử lý 3 loại VPN phổ biến nhất: OpenVPN, WireGuard và IPsec ngay trên terminal.

Chọn ‘vũ khí’ nào cho hệ thống của bạn?

Mỗi giao thức có ưu nhược điểm riêng. Việc chọn đúng công cụ giúp hệ thống chạy ổn định và tiết kiệm tài nguyên CPU đáng kể.

  • WireGuard: Hiện đại và cực nhanh. Mã nguồn chỉ khoảng 4.000 dòng, trong khi OpenVPN lên tới hơn 100.000 dòng. Nếu được quyền lựa chọn, hãy ưu tiên WireGuard.
  • OpenVPN: Linh hoạt và bền bỉ. Nó có thể chạy trên TCP port 443 để giả dạng HTTPS, giúp vượt qua những firewall khắt khe nhất. Điểm yếu là độ trễ cao và tốn tài nguyên.
  • IPsec (StrongSwan): Tiêu chuẩn cho thiết bị Enterprise như Cisco, Juniper. Cấu hình IPsec khá phức tạp, nhưng lại là bắt buộc khi kết nối với hệ thống của các tập đoàn lớn.

So sánh hiệu năng thực tế

Tiêu chí WireGuard OpenVPN IPsec (IKEv2)
Throughput ~95% tốc độ mạng ~60-70% tốc độ mạng ~85-90% tốc độ mạng
Độ phức tạp Thấp Trung bình Rất cao
Tích hợp Kernel Có (từ bản 5.6) Không (User space)

1. WireGuard: Tốc độ và sự tinh gọn

WireGuard xử lý interface VPN như một card mạng vật lý. Cấu hình xong là chạy, rất ít khi gặp lỗi vặt trong quá trình vận hành.

Cài đặt nhanh

sudo apt update && sudo apt install wireguard -y

Thiết lập Client

Copy file wg0.conf từ server vào thư mục /etc/wireguard/. Một file chuẩn thường có nội dung như sau:

[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = 1.2.3.4:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Kích hoạt kết nối

Sử dụng công cụ wg-quick để khởi tạo interface:

sudo wg-quick up wg0

Kiểm tra bằng lệnh sudo wg show. Nếu thấy dòng latest handshake xuất hiện trong vòng 1-2 phút qua, kết nối đã thông suốt.

2. OpenVPN: Giải pháp vượt firewall

Nhiều datacenter chặn toàn bộ port lạ, chỉ mở 80 và 443. Lúc này, OpenVPN chạy trên TCP port 443 trở thành cứu cánh duy nhất để duy trì kết nối.

Cài đặt

sudo apt install openvpn -y

Chạy OpenVPN dưới dạng Service

Để đảm bảo VPN tự khởi động cùng hệ thống, bạn nên thực hiện các bước sau:

  1. Đổi tên file cấu hình: sudo cp client.ovpn /etc/openvpn/client.conf
  2. Mở file /etc/default/openvpn, tìm và bỏ dấu comment (#) ở dòng AUTOSTART="all".
  3. Khởi chạy service: sudo systemctl enable --now openvpn@client

Lưu ý về Routing: Nếu đã kết nối nhưng không ping được IP nội bộ, hãy kiểm tra bảng định tuyến bằng lệnh ip route. Bạn có thể phải thêm route thủ công: sudo ip route add 192.168.1.0/24 dev tun0.

3. IPsec/StrongSwan: Làm việc với thiết bị Enterprise

Kết nối với router Cisco hay Fortinet thường yêu cầu IPsec. Đây là phần khó nhất vì chỉ cần sai một thông số mã hóa là kết nối sẽ thất bại.

Cài đặt StrongSwan

sudo apt install strongswan libcharon-extra-plugins -y

Cấu hình IKEv2

Chỉnh sửa file /etc/ipsec.conf. Dưới đây là cấu hình mẫu cho kết nối dùng EAP (Username/Password):

conn my-vpn
    keyexchange=ikev2
    dpdaction=clear
    eap_identity=user_nghiep_vu
    leftauth=eap-mschapv2
    left=%defaultroute
    leftsourceip=%config
    right=vpn.company.com
    rightauth=pubkey
    rightsubnet=0.0.0.0/0
    auto=add

Khai báo mật khẩu trong file /etc/ipsec.secrets: user_nghiep_vu : EAP "password_cua_ban".

Xử lý lỗi: Tại sao có VPN nhưng không có Internet?

Đây là tình trạng phổ biến: VPN báo Connected nhưng không thể truy cập bất kỳ trang web nào. Hãy kiểm tra 3 yếu tố sau:

1. DNS bị kẹt

Thử ping 8.8.8.8. Nếu ping thành công nhưng không vào được google.com, DNS của bạn đang lỗi. Hãy cài gói resolvconf hoặc thêm thủ công nameserver 8.8.8.8 vào /etc/resolv.conf.

2. Kích thước gói tin (MTU)

Gói tin VPN thường lớn hơn bình thường do phải gánh thêm header mã hóa. Nếu MTU quá lớn, router trung gian sẽ drop gói tin. Thử giảm MTU xuống 1300 để khắc phục:

sudo ifconfig wg0 mtu 1300
# Hoặc thêm "mssfix 1300" vào file config OpenVPN

3. IP Forwarding

Nếu dùng máy Linux này làm gateway cho các máy khác, bạn buộc phải bật forwarding:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Lời kết

Làm chủ VPN trên Linux là hiểu cách dòng dữ liệu đi qua các interface. WireGuard luôn là ưu tiên hàng đầu của mình nhờ sự ổn định. OpenVPN là phương án dự phòng tuyệt vời, còn IPsec giúp bạn giao tiếp với các hệ thống cũ. Khi gặp sự cố, hãy bình tĩnh kiểm tra theo thứ tự: Interface -> Routing -> DNS -> MTU. Chúc các bạn cấu hình thành công!

Share: