Bài 5: Cài đặt host-to-net VPN với OpenVPN
Trong bài này, giả sử một nhân viên công ty di chuyển ra ngoài văn phòng công ty và kết nối Internet từ một máy trạm (Cx) có địa chỉ 205.192.25.17/24. Nhân viên này muốn kết nối về mạng nội bộ của công ty (có địa chỉ 192.168.3.0/24) để trao đổi dữ liệu với một người dùng khác đang làm việc tại công ty trên máy trạm C3 có địa chỉ 192.168.3.7. Hiển nhiên, từ máy trạm Cx không thể truy cập đến C3 do địa chỉ mạng riêng 192.168.3.0/24 không tồn tại trên mạng công cộng Internet. Hơn nữa, router R4 với chức năng là Gateway của mạng nội bộ công ty ra ngoài Internet cũng ngăn cản tất cả các truy nhập không được phép từ ngoài mạng Internet vào mạng nội bộ của công ty. Giải pháp VPN ở đây là tạo ra một mạng riêng ảo (giả sử có địa chỉ 172.27.234.0/24) gắn vào R4 và cho phép các máy trạm bên ngoài Internet dạng Cx kết nối vào mạng VPN này thông qua mạng công cộng Internet. Sau khi kết nối thành công, một đường hầm được tạo ra giữa trạm Cx và R4 để người sử dụng trên trạm Cx tham gia vào mạng VPN 172.27.234.0/24 như một thành viên của mạng này (với địa chỉ IP tương ứng là 172.27.234.x). Ngoài ra, R4 cũng được cấu hình sẵn để các trạm trong mạng riêng ảo có thể kết nối sang mạng nội bộ 192.168.3.0, qua đó Cx sẽ kết nối được với C3. Các bước thực hiện như sau:
- Download & cài đặt máy chủ OpenVPN trên R4.
- Download & cài đặt phần mềm hỗ trợ OpenVPN trên máy trạm Cx.
- Cầu hình và thực hiện kết nối VPN từ Cx vào R4.
Bước 1: Download, cài đặt OpenVPN Access Server
Download OpenVPN Access Server cho CentOS 6 (có thể vào OpenVPN web site để download phiên bản phù hợp) và cài đặt:
Chạy script ovpn-init để khởi tạo các tham số ban đầu cho OpenVNP AS. Lưu ý chọn giao diện cấu hình web tại địa chỉ 203.162.5.11.
Quản trị OpenVPN có thể được thực hiện thông qua giao diện web, tại địa chỉ khi khởi tạo các thônng số cấu hình với ovpn-init. Tuy nhập vào https://203.162.5.11/admin để bắt đầu cấu hình. Account quản trị của OpenVPN có tên openvpn. Cần sử dụng lệnh passwd openvpn để thiết lập mật khẩu. Dùng tài khoản openvpn và mật khẩu đã thiết lập để login vào trang admin quản trị OpenVPN, giao diện web để quản trị máy chủ OpenVPN trên router R4 có dạng như sau:
Các thông số có thể giữ nguyên theo thiết lập mặc định khi chạy ovpn-init. Một số thông số cần kiểm tra và thiết lập lại. Đầu tiên là dải địa chỉ sẽ được cấp tự động mỗi khi một trạm kết nối vào mạng VPN. Chọn “VPN Settings” và thiết lập dải địa chỉ này là 172.27.224.0/24.
Sau khi thiết lập dải địa chỉ IP cho mạng riêng ảo, khởi động lại server để cấu hình mới được thực thi. Tiến trình máy chủ openvpn được khởi động lại và thiết lập các kết nối mạng as0t0 và as0t1 để R4 đóng vai trò là Gateway của mạng VPN 172.27.224.0:
Bước 2: Download, cài đặt OpenVPN client
Cài đặt OpenVPN trên trạm client bằng lệnh yum. Sau khi cài đặt thành công, chương trình openvpn đã sẵn sang để kết nối VPN đến server.
Để phục vụ kết nối VPN đến server, cần chuẩn bị các tài khoản user trên server này và thiết lập cấu hình kết nối. OpenVPN chấp nhận nhiều phương án xác thực user, trong đó phương án sử dụng Pluggable Authentication Modules (PAM) là đơn giản nhất. PAM là phương pháp mặc định để xác thực tài khoản login trong Linux, khi hệ thống vừa khởi động. Danh sách các tài khoản đang có của hệ thống có thể được xem trong file /etc/passwd. Để tạo thêm tài khoản, dùng lệnh adduser, để thiết lập mật khẩu cho user này, dùng passwd. Giả sử cần tạo thêm một tài khoản hoangph để phục vụ kết nối từ client OpenVPN:
Bước cuối cùng là chuẩn bị cấu hình kết nối đến OpenVPN server cho client. Có thể tạo file cấu hình bằng các lệnh trên server nhưng đơn giản nhất là sử dụng giao diện web. Truy nhập vào server theo địa chỉ https://203.162.5.11 (chú ý là không có đường dẫn /admin), login bằng tài khoản hoangph vừa tạo, server sẽ cho phép thực hiện một số các lựa chọn sau:
File cấu hình kết nối VPN từ client có thể được tải xuống từ server qua đường link “Yourself (user-locked profile)”. Tải file này về client với tên gọi client.ovpn. Nội dung file bao gồm các thông số kết nối cũng như phương pháp xác thực cho user hoangph:
Bước 3: Kết nối VPN
Sau khi đã chuẩn bị đầy đủ các dữ liệu cấu hình, bước cuối cùng là tạo kênh kết nối đến VPN server. Khi tạo kết nối, mặc dù file cấu hình đã được thiết lập riêng cho user hoangph nhưng vì lý do an ninh, người sử dụng một lần nữa phải nhập vào tên và mật khẩu của user này. Nếu tên và mật khẩu nhập vào không khớp với thông tin user đã được cấu hình trong file client.ovpn, kết nối sẽ không được thiết lập.
Sau khi cung cấp user name và mật khẩu để xác thực người dùng thành công, chương trình OpenVPN trên máy trạm client mở một đường hầm kết nối đến server thông qua một kết nối ảo có tên là tun0:
Kết nối mạng tun0 (viết tắt của tunnel - đường hầm) được tự động gán địa chỉ 172.27.224.130 như đã được cấu hình trên server. Ngoài ra, bảng routing được cập nhật thêm các liên kết trực tiếp trong mạng riêng ảo 172.27.224.0 và một Gateway mặc định của mạng riêng ảo này (có địa chỉ 172.27.224.130) được thêm vào:
Kiểm tra kết nối thành công từ trạm Cx đến C3 bằng lệnh ping. Nếu ping không thành công, cần kiểm tra lại các cấu hình tường lửa (iptables) trên các trạm và router trung gian. Giải pháp đơn giản là tắt các dịch vụ iptables trên các trạm và router trung gian này.
Kiểm tra đường đi của gói tin giữa Cx và C3 bằng lệnh traceroute. Có thể thấy đường đi được thể hiện như là trạm Cx đang kết nối trực tiếp trong mạng 172.27.244.0 và để gói tin đi đến C3, nó chỉ cần qua một router duy nhất là R4 (địa chỉ 172.27.224.129):
Sử dụng Wireshark chạy trên Cx để kiểm tra các gói tin ICMP của lệnh ping giữa Cx và C3. Có thể thấy các gói tin chạy trên TCP/IP protocol stack giống hệt như Cx đang kết nối trực tiếp với C3 thông qua router R4:
Tuy nhiên, đứng trên router trung gian R5, sử dụng Wireshark để kiểm tra các gói tin trung chuyển giữa Cx và C3. Hoàn toàn không thấy các gói tin ICMP mà thay vào đó là các gói UDP đã được mã hóa, gửi qua lại giữa 2 đầu đường hầm 203.162.5.11 và 203.192.25.17: