CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Trang chủHướng dẫnHướng dẫn thiết lập VPN IKEv2 với StrongSwan trên Ubuntu 22.04

Hướng dẫn thiết lập VPN IKEv2 với StrongSwan trên Ubuntu 22.04

CyStack blog 22 phút để đọc
CyStack blog16/10/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 22 minutes

Mạng riêng ảo (VPN) là một công cụ mạnh mẽ cho phép bạn mã hóa an toàn lưu lượng truy cập khi đi qua các mạng không tin cậy, ví dụ như ở quán cà phê, hội nghị, hay sân bay. Với một VPN, bạn có thể duy trì quyền riêng tư và bảo mật dữ liệu của mình, bất kể bạn đang ở đâu.

thiết lập VPN IKEv2 với StrongSwan

Trong số các giao thức VPN, Internet Key Exchange v2 (IKEv2) nổi bật với khả năng hoạt động ổn định và hiệu quả. IKEv2 là một giao thức cho phép thiết lập đường hầm IPSec trực tiếp giữa máy chủ và máy khách.

Trong các triển khai VPN IKEv2, IPSec cung cấp mã hóa cho toàn bộ lưu lượng mạng, đảm bảo rằng dữ liệu của bạn được bảo vệ toàn diện. Một ưu điểm lớn của IKEv2 là nó được hỗ trợ nguyên bản trên một số nền tảng phổ biến như OS X 10.11+, iOS 9.1+, và Windows 10 mà không cần ứng dụng bổ sung, đồng thời xử lý các sự cố kết nối từ phía máy khách (như mất sóng di động tạm thời) khá mượt mà.

Trong hướng dẫn chi tiết này, chúng ta sẽ xây dựng một máy chủ VPN IKEv2 sử dụng StrongSwan – một daemon IPSec mã nguồn mở mạnh mẽ – trên hệ điều hành Ubuntu 22.04. Sau khi hoàn tất việc thiết lập máy chủ, tôi sẽ hướng dẫn bạn cách kết nối tới VPN từ nhiều loại máy khách khác nhau, bao gồm Windows, macOS, Ubuntu, iOS và Android.

Chuẩn bị

  • Một máy chủ Ubuntu 22.04 với người dùng không phải root với quyền sudo và có cài sẵn tường lửa.

Bước 1: Cài đặt StrongSwan

Đầu tiên, bạn sẽ cài đặt StrongSwan, một daemon IPSec mã nguồn mở mà chúng ta sẽ cấu hình làm máy chủ VPN của mình. Bạn cũng sẽ cài đặt thành phần hạ tầng khóa công khai (PKI) để có thể tạo Certificate Authority (CA – Tổ chức cấp chứng chỉ) nhằm cung cấp thông tin xác thực cho hạ tầng của bạn.

Bắt đầu bằng cách cập nhật bộ đệm gói cục bộ:

sudo apt update

Sau đó, cài đặt phần mềm bằng cách gõ:

sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

Gói bổ sung libcharon-extauth-plugins được sử dụng để đảm bảo rằng nhiều máy khách khác nhau có thể xác thực với máy chủ của bạn bằng cách sử dụng tên người dùng và mật khẩu chia sẻ. Gói libstrongswan-extra-plugins được bao gồm để StrongSwan hỗ trợ các bộ mã hóa đường cong elip sử dụng bộ mật mã Curve25519.

Giờ đây, mọi thứ đã được cài đặt, hãy chuyển sang tạo chứng chỉ của bạn.

Bước 2: Tạo Certificate Authority

Một máy chủ IKEv2 yêu cầu một chứng chỉ để xác định chính nó với các máy khách. Để giúp tạo chứng chỉ cần thiết, gói strongswan-pki đi kèm với một tiện ích có tên pki để tạo Certificate Authority và chứng chỉ máy chủ.

Để bắt đầu, hãy tạo một vài thư mục để lưu trữ tất cả các tệp mà bạn sẽ làm việc. Cấu trúc thư mục này khớp với một số thư mục trong /etc/ipsec.d .

mkdir -p ~/pki/{cacerts,certs,private}

Sau đó, hãy khóa quyền hạn để các tệp riêng tư của chúng ta không thể bị người dùng khác nhìn thấy:

chmod 700 ~/pki

Giờ đây, bạn đã có một cấu trúc thư mục để lưu trữ mọi thứ, bạn có thể tạo một khóa gốc. Đây sẽ là một khóa RSA 4096-bit sẽ được sử dụng để ký chứng chỉ Certificate Authority gốc của bạn.

Thực thi các lệnh sau để tạo khóa:

pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

Sau đó, bạn có thể chuyển sang tạo Certificate Authority gốc của mình, sử dụng khóa bạn vừa tạo để ký chứng chỉ gốc:

pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \\\\
    --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

Tùy chọn --lifetime 3650 được sử dụng để đảm bảo rằng chứng chỉ gốc của tổ chức cấp chứng chỉ sẽ có hiệu lực trong 10 năm. Chứng chỉ gốc cho một tổ chức thường không thay đổi, vì nó sẽ phải được phân phối lại cho mọi máy chủ và máy khách dựa vào nó, vì vậy 10 năm là một giá trị mặc định an toàn.

Bạn có thể thay đổi giá trị “tên phân biệt” (distinguished name – DN) thành thứ khác nếu muốn. Trường tên chung (CN) ở đây chỉ là một chỉ báo, vì vậy nó không nhất thiết phải khớp với bất kỳ thứ gì trong hạ tầng của bạn.

Giờ đây, bạn đã có Certificate Authority gốc hoạt động, bạn có thể tạo một chứng chỉ mà máy chủ VPN sẽ sử dụng.

Bước 3: Tạo chứng chỉ cho máy chủ VPN

Bạn sẽ tạo một chứng chỉ và khóa cho máy chủ VPN. Chứng chỉ này sẽ cho phép máy khách xác minh tính xác thực của máy chủ bằng cách sử dụng chứng chỉ CA mà chúng ta vừa tạo.

Đầu tiên, tạo một khóa riêng tư cho máy chủ VPN với lệnh sau:

pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

Bây giờ, hãy tạo và ký chứng chỉ máy chủ VPN bằng khóa của Certificate Authority mà bạn đã tạo ở bước trước. Thực thi lệnh sau, nhưng hãy thay đổi trường Common Name (CN) và Subject Alternate Name (SAN) thành tên miền DNS hoặc địa chỉ IP của máy chủ VPN của bạn:

pki --pub --in ~/pki/private/server-key.pem --type rsa \\\\
    | pki --issue --lifetime 1825 \\\\
        --cacert ~/pki/cacerts/ca-cert.pem \\\\
        --cakey ~/pki/private/ca-key.pem \\\\
        --dn "CN=server_domain_or_IP" --san server_domain_or_IP \\\\
        --flag serverAuth --flag ikeIntermediate --outform pem \\\\
    >  ~/pki/certs/server-cert.pem

Lưu ý: Nếu bạn sử dụng địa chỉ IP thay vì tên miền DNS, bạn sẽ cần chỉ định nhiều --san entries. Dòng trong khối lệnh trước đó nơi bạn chỉ định tên phân biệt (--dn ...) sẽ cần được sửa đổi với mục bổ sung như đoạn trích sau:

--dn "CN=IP address" --san @IP_address --san IP_address \\\\

Lý do cho mục --san @IP_address bổ sung này là một số máy khách sẽ kiểm tra xem chứng chỉ TLS có cả mục nhập DNS và mục nhập Địa chỉ IP cho một máy chủ khi chúng xác minh danh tính của nó.

Tùy chọn --flag serverAuth được sử dụng để chỉ ra rằng chứng chỉ sẽ được sử dụng rõ ràng để xác thực máy chủ, trước khi đường hầm mã hóa được thiết lập. Tùy chọn --flag ikeIntermediate được sử dụng để hỗ trợ các máy khách macOS cũ hơn.

Giờ đây, bạn đã tạo tất cả các tệp TLS/SSL mà StrongSwan cần, bạn có thể di chuyển các tệp vào vị trí trong thư mục /etc/ipsec.d bằng cách gõ:

sudo cp -r ~/pki/* /etc/ipsec.d/

Trong bước này, bạn đã tạo một cặp chứng chỉ sẽ được sử dụng để bảo mật thông tin liên lạc giữa máy khách và máy chủ.

Bạn cũng đã ký các chứng chỉ bằng khóa CA, vì vậy máy khách sẽ có thể xác minh tính xác thực của máy chủ VPN bằng chứng chỉ CA. Với tất cả các chứng chỉ này đã sẵn sàng, bạn đã sẵn sàng chuyển sang cấu hình StrongSwan.

Bước 4: Cấu hình StrongSwan

StrongSwan có một tệp cấu hình mặc định với một số ví dụ, nhưng chúng ta sẽ phải tự cấu hình phần lớn. Hãy sao lưu tệp để tham khảo trước khi bắt đầu lại từ đầu:

sudo mv /etc/ipsec.conf{,.original}

Tạo và mở một tệp cấu hình mới trống bằng trình soạn thảo văn bản ưa thích của bạn. Ở đây, bạn sẽ sử dụng nano:

sudo nano /etc/ipsec.conf

Đầu tiên, chúng ta sẽ yêu cầu StrongSwan ghi lại trạng thái daemon để gỡ lỗi và cho phép các kết nối trùng lặp. Thêm các dòng này vào tệp:

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

Sau đó, chúng ta sẽ tạo một phần cấu hình cho VPN của chúng ta. Chúng ta cũng sẽ yêu cầu StrongSwan tạo IKEv2 VPN Tunnels và tự động tải phần cấu hình này khi nó khởi động.

. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

Chúng ta cũng sẽ cấu hình phát hiện “peer chết” (dead-peer detection) để xóa bất kỳ kết nối “treo” nào trong trường hợp máy khách ngắt kết nối đột ngột. Thêm các dòng này:

. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

Tiếp theo, chúng ta sẽ cấu hình các tham số IPSec phía “left” của máy chủ. Mỗi tham số sau đây đảm bảo rằng máy chủ được cấu hình để chấp nhận các kết nối từ máy khách và tự xác định chính xác. Bạn sẽ thêm từng cài đặt này vào tệp /etc/ipsec.conf sau khi bạn đã quen thuộc với chúng và lý do chúng được sử dụng:

  • left=%any: Giá trị %any đảm bảo rằng máy chủ sẽ sử dụng giao diện mạng nơi nó nhận các kết nối đến cho các giao tiếp tiếp theo với máy khách. Ví dụ, nếu bạn đang kết nối máy khách qua một mạng riêng, máy chủ sẽ sử dụng địa chỉ IP riêng nơi nó nhận lưu lượng truy cập cho phần còn lại của kết nối.
  • leftid=@server_domain_or_IP: Tùy chọn này kiểm soát tên mà máy chủ hiển thị cho máy khách. Khi kết hợp với tùy chọn leftcert tiếp theo, tùy chọn leftid đảm bảo rằng tên được cấu hình của máy chủ và Distinguished Name (DN) có trong chứng chỉ công khai khớp nhau.
  • leftcert=server-cert.pem: Tùy chọn này là đường dẫn đến chứng chỉ công khai cho máy chủ mà bạn đã cấu hình ở Bước 3. Nếu không có nó, máy chủ sẽ không thể tự xác thực với máy khách, hoặc hoàn tất việc đàm phán thiết lập IKEv2.
  • leftsendcert=always: Giá trị always đảm bảo rằng bất kỳ máy khách nào kết nối với máy chủ sẽ luôn nhận được một bản sao chứng chỉ công khai của máy chủ như một phần của thiết lập kết nối ban đầu.
  • leftsubnet=0.0.0.0/0: Tùy chọn phía “left” cuối cùng mà bạn sẽ thêm cho máy khách biết về các mạng con có thể truy cập phía sau máy chủ. Trong trường hợp này, 0.0.0.0/0 được sử dụng để đại diện cho toàn bộ tập hợp các địa chỉ IPv4, có nghĩa là máy chủ sẽ yêu cầu máy khách gửi tất cả lưu lượng của chúng qua VPN theo mặc định.

Giờ đây bạn đã quen thuộc với từng tùy chọn phía “left” có liên quan, hãy thêm tất cả chúng vào tệp như sau:

. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

Lưu ý: Khi cấu hình ID máy chủ (leftid), chỉ bao gồm ký tự @ nếu máy chủ VPN của bạn sẽ được xác định bằng một tên miền:

. . .    leftid=@vpn.example.com
    . . .

Nếu máy chủ sẽ được xác định bằng địa chỉ IP của nó, chỉ cần đặt địa chỉ IP vào:


. . .
    leftid=your_server_ip
    . . .

Tiếp theo, chúng ta có thể cấu hình các tham số IPSec phía “right” của máy khách. Mỗi tham số sau đây cho máy chủ biết cách chấp nhận các kết nối từ máy khách, cách máy khách nên xác thực với máy chủ, và các dải địa chỉ IP riêng và máy chủ DNS mà máy khách sẽ sử dụng. Thêm từng cài đặt này vào tệp /etc/ipsec.conf sau khi bạn đã quen thuộc với chúng và lý do chúng được sử dụng:

  • right=%any: Tùy chọn %any cho phía “right” của kết nối chỉ thị máy chủ chấp nhận các kết nối đến từ bất kỳ máy khách từ xa nào.
  • rightid=%any: Tùy chọn này đảm bảo rằng máy chủ sẽ không từ chối các kết nối từ máy khách cung cấp danh tính trước khi đường hầm mã hóa được thiết lập.
  • rightauth=eap-mschapv2: Tùy chọn này cấu hình phương thức xác thực mà máy khách sẽ sử dụng để xác thực với máy chủ. eap-mschapv2 được sử dụng ở đây để tương thích rộng rãi, hỗ trợ các máy khách như Windows, macOS và thiết bị Android.
  • rightsourceip=10.10.10.0/24: Tùy chọn này chỉ thị máy chủ gán địa chỉ IP riêng cho máy khách từ pool IP 10.10.10.0/24 đã chỉ định.
  • rightdns=8.8.8.8,8.8.4.4: Các địa chỉ IP này là các bộ phân giải DNS công khai của Google. Chúng có thể được thay đổi để sử dụng các bộ phân giải công khai khác, bộ phân giải của máy chủ VPN, hoặc bất kỳ bộ phân giải nào khác mà máy khách có thể truy cập.
  • rightsendcert=never: Tùy chọn này chỉ thị máy chủ rằng máy khách không cần gửi chứng chỉ để xác thực chính chúng.

Giờ đây bạn đã quen thuộc với các tùy chọn phía “right” cần thiết cho VPN, hãy thêm các dòng sau vào /etc/ipsec.conf:

. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

Bây giờ chúng ta sẽ yêu cầu StrongSwan hỏi thông tin đăng nhập của người dùng khi họ kết nối:

. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

Cuối cùng, thêm các dòng sau để hỗ trợ máy khách Linux, Windows, macOS, iOS và Android. Các dòng này chỉ định các thuật toán trao đổi khóa, băm, xác thực và mã hóa khác nhau (thường được gọi là Cipher Suites) mà StrongSwan sẽ cho phép các máy khách khác nhau sử dụng:

. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Mỗi bộ mã hóa được hỗ trợ được phân định với các bộ khác bằng dấu phẩy. Ví dụ, chacha20poly1305-sha512-curve25519-prfsha512 là một bộ, và aes256gcm16-sha384-prfsha384-ecp384 là một bộ khác. Các bộ mã hóa được liệt kê ở đây được chọn để đảm bảo phạm vi tương thích rộng nhất trên các máy khách Windows, macOS, iOS, Android và Linux.

Tệp cấu hình hoàn chỉnh sẽ trông như thế này:

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Lưu và đóng tệp sau khi bạn đã xác minh rằng bạn đã thêm từng dòng một cách chính xác. Nếu bạn sử dụng nano, hãy nhấn CTRL + X, Y, sau đó ENTER.

Giờ đây bạn đã cấu hình các tham số VPN, bạn có thể chuyển sang tạo một tài khoản để người dùng có thể kết nối với máy chủ.

Bước 5: Cấu hình xác thực VPN

Máy chủ VPN của bạn hiện đã được cấu hình để chấp nhận các kết nối máy khách, nhưng chưa có thông tin đăng nhập nào được cấu hình. Bạn sẽ cần cấu hình một vài thứ trong một tệp cấu hình đặc biệt có tên ipsec.secrets:

  • Bạn cần cho StrongSwan biết nơi tìm khóa riêng tư cho chứng chỉ máy chủ của chúng ta, để máy chủ có thể xác thực với máy khách.
  • Bạn cũng cần thiết lập danh sách người dùng được phép kết nối với VPN.

Hãy mở tệp secrets để chỉnh sửa:

sudo nano /etc/ipsec.secrets

Đầu tiên, cho StrongSwan biết nơi tìm khóa riêng tư và cách phân tích nó.

: RSA "server-key.pem"

Đảm bảo rằng dòng bắt đầu bằng ký tự : và có một khoảng trắng sau nó để toàn bộ dòng đọc là : RSA "server-key.pem".

Sau đó, bạn sẽ xác định thông tin đăng nhập của người dùng. Bạn có thể tạo bất kỳ sự kết hợp tên người dùng hoặc mật khẩu nào bạn muốn:

your_username : EAP "your_password"

Lưu và đóng tệp. Giờ đây bạn đã hoàn tất làm việc với các tham số VPN, hãy khởi động lại dịch vụ VPN để cấu hình của chúng ta được áp dụng:

sudo systemctl restart strongswan-starter

Giờ đây, máy chủ VPN đã được cấu hình đầy đủ với cả tùy chọn máy chủ và thông tin đăng nhập của người dùng, đã đến lúc chuyển sang cấu hình phần quan trọng nhất: tường lửa.

Bước 6: Cấu hình tường lửa & chuyển tiếp IP Kernel

Với cấu hình StrongSwan đã hoàn tất, bạn cần cấu hình tường lửa để cho phép lưu lượng VPN đi qua và chuyển tiếp nó.

Nếu bạn đã làm theo hướng dẫn thiết lập máy chủ ban đầu, bạn sẽ có một tường lửa UFW được bật. Nếu bạn chưa cấu hình UFW, bạn nên bắt đầu bằng cách thêm một quy tắc để cho phép các kết nối SSH qua tường lửa để phiên hiện tại của bạn không bị đóng khi bạn bật UFW:

sudo ufw allow OpenSSH

Sau đó bật tường lửa bằng cách gõ:

sudo ufw enable

Sau đó, thêm một quy tắc để cho phép lưu lượng UDP đến các cổng IPSec tiêu chuẩn, 5004500:

sudo ufw allow 500,4500/udp

Tiếp theo, bạn sẽ mở một trong các tệp cấu hình của UFW để thêm một vài chính sách cấp thấp cho việc định tuyến và chuyển tiếp các gói IPSec. Tuy nhiên, trước khi làm điều này, bạn cần tìm giao diện mạng nào trên máy chủ của chúng ta được sử dụng để truy cập internet. Tìm giao diện này bằng cách truy vấn thiết bị được liên kết với tuyến mặc định:

ip route show default

Giao diện công cộng của bạn sẽ nằm sau từ “dev”. Ví dụ, kết quả này hiển thị giao diện có tên eth0, được tô sáng trong ví dụ sau:

Output
default via your_server_ip dev eth0 proto static

Khi bạn có giao diện mạng công cộng của mình, hãy mở tệp /etc/ufw/before.rules trong trình soạn thảo văn bản của bạn. Các quy tắc trong tệp này được thêm vào tường lửa trước phần còn lại của các quy tắc input và output thông thường. Chúng được sử dụng để cấu hình dịch địa chỉ mạng (NAT) để máy chủ có thể định tuyến chính xác các kết nối đến và đi từ máy khách và Internet.

sudo nano /etc/ufw/before.rules

Gần đầu tệp (trước dòng *filter), thêm khối cấu hình sau. Thay đổi mỗi trường hợp eth0 trong cấu hình trên để khớp với tên giao diện bạn tìm thấy bằng ip route. Các dòng *nat tạo ra các quy tắc để tường lửa có thể định tuyến và thao tác lưu lượng giữa các máy khách VPN và internet một cách chính xác. Dòng *mangle điều chỉnh kích thước phân đoạn gói tối đa để ngăn ngừa các sự cố tiềm ẩn với một số máy khách VPN:

*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

Tiếp theo, sau dòng *filter và định nghĩa chuỗi, thêm một khối cấu hình nữa:

. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

Các dòng này yêu cầu tường lửa chuyển tiếp lưu lượng ESP (Encapsulating Security Payload) để các máy khách VPN có thể kết nối. ESP cung cấp bảo mật bổ sung cho các gói VPN của chúng ta khi chúng đi qua các mạng không tin cậy.

Khi bạn hoàn tất, lưu và đóng tệp sau khi bạn đã xác minh rằng bạn đã thêm từng dòng một cách chính xác. Nếu bạn sử dụng nano, hãy nhấn CTRL + X, Y, sau đó ENTER.

Trước khi khởi động lại tường lửa, bạn cũng cần thay đổi một số tham số kernel mạng để cho phép định tuyến từ giao diện này sang giao diện khác. Tệp kiểm soát các cài đặt này được gọi là /etc/ufw/sysctl.conf. Bạn sẽ cần cấu hình một vài thứ trong tệp.

Đầu tiên, chuyển tiếp gói IPv4 cần được bật để lưu lượng có thể di chuyển giữa VPN và các giao diện mạng hướng ra công cộng trên máy chủ. Tiếp theo, bạn sẽ tắt tính năng phát hiện Path MTU để ngăn ngừa các vấn đề phân mảnh gói. Cuối cùng, chúng ta sẽ không chấp nhận chuyển hướng ICMP cũng như không gửi chuyển hướng ICMP để ngăn chặn các cuộc tấn công man-in-the-middle.

Mở tệp cấu hình tham số kernel của UFW bằng nano hoặc trình soạn thảo văn bản ưa thích của bạn:

sudo nano /etc/ufw/sysctl.conf

Bây giờ thêm cài đặt net/ipv4/ip_forward=1 sau cùng của tệp để bật chuyển tiếp gói giữa các giao diện:

. . .
net/ipv4/ip_forward=1

Tiếp theo, chặn việc gửi và nhận các gói chuyển hướng ICMP bằng cách thêm các dòng sau vào cuối tệp:

. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

Cuối cùng, tắt tính năng phát hiện Path MTU bằng cách thêm dòng này vào cuối tệp:

. . .
net/ipv4/ip_no_pmtu_disc=1

Lưu tệp khi bạn hoàn tất. Bây giờ bạn có thể kích hoạt tất cả các thay đổi của mình bằng cách tắt và bật lại tường lửa, vì UFW áp dụng các cài đặt này bất cứ khi nào nó khởi động lại:

sudo ufw disable
sudo ufw enable

Bạn sẽ được nhắc xác nhận quá trình. Gõ Y để bật lại UFW với các cài đặt mới.

Bước 7: Kiểm tra kết nối VPN trên Windows, macOS, Ubuntu, iOS và Android

Giờ đây bạn đã thiết lập mọi thứ, đã đến lúc thử nghiệm. Đầu tiên, bạn sẽ cần sao chép chứng chỉ CA bạn đã tạo và cài đặt nó trên (các) thiết bị máy khách của bạn sẽ kết nối với VPN. Cách dễ nhất để làm điều này là đăng nhập vào máy chủ của bạn và xuất nội dung của tệp chứng chỉ:

cat /etc/ipsec.d/cacerts/ca-cert.pem

Bạn sẽ thấy đầu ra tương tự như sau:

Output
-----BEGIN CERTIFICATE-----
MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE

. . .

H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ
dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA==
-----END CERTIFICATE-----

Sao chép đầu ra này vào máy tính của bạn, bao gồm các dòng -----BEGIN CERTIFICATE----------END CERTIFICATE-----, và lưu nó vào một tệp với tên dễ nhận biết, chẳng hạn như ca-cert.pem. Đảm bảo tệp bạn tạo có phần mở rộng .pem.

Ngoài ra, hãy sử dụng SFTP để chuyển tệp sang máy tính của bạn.

Sau khi bạn có tệp ca-cert.pem được tải xuống máy tính của bạn, bạn có thể thiết lập kết nối tới VPN.

Kết nối từ Windows

Có nhiều cách để nhập chứng chỉ gốc và cấu hình Windows để kết nối với VPN. Phương pháp đầu tiên sử dụng các công cụ đồ họa cho mỗi bước. Phương pháp thứ hai sử dụng các lệnh PowerShell, có thể được script hóa và sửa đổi để phù hợp với cấu hình VPN của bạn.

Lưu ý: Các hướng dẫn này đã được kiểm tra trên các cài đặt Windows 10 chạy phiên bản 1903 và 1909.

Cấu hình Windows bằng Công cụ Đồ họa

Đầu tiên, nhập chứng chỉ gốc bằng cách làm theo các bước sau:

  • Nhấn WINDOWS+R để mở hộp thoại Run, và nhập mmc.exe để khởi chạy Windows Management Console.
  • Từ menu File, điều hướng đến Add or Remove Snap-in, chọn Certificates từ danh sách các snap-in có sẵn, và nhấp Add.
  • Chúng ta muốn VPN hoạt động với bất kỳ người dùng nào, vì vậy chọn Computer Account và nhấp Next.
  • Chúng ta đang cấu hình mọi thứ trên máy tính cục bộ, vì vậy chọn Local Computer, sau đó nhấp Finish.
  • Dưới nút Console Root, mở rộng mục Certificates (Local Computer), mở rộng Trusted Root Certification Authorities, và sau đó chọn mục Certificates:

thiết lập VPN IKEv2 với StrongSwan

  • Từ menu Action, chọn All Tasks và nhấp Import để hiển thị Trình hướng dẫn nhập chứng chỉ (Certificate Import Wizard). Nhấp Next để bỏ qua phần giới thiệu.
  • Trên màn hình File to Import, nhấn nút Browse, đảm bảo rằng bạn thay đổi loại tệp từ “X.509 Certificate (.cer;.crt)” thành “All Files (.)”, và chọn tệp ca-cert.pem mà bạn đã lưu. Sau đó nhấp Next.
  • Đảm bảo rằng Certificate Store được đặt thành Trusted Root Certification Authorities, và nhấp Next.
  • Nhấp Finish để nhập chứng chỉ.

Sau đó cấu hình VPN với các bước sau:

  • Khởi chạy Control Panel, sau đó điều hướng đến Network and Sharing Center.
  • Nhấp vào Set up a new connection or network, sau đó chọn Connect to a workplace.
  • Chọn Use my Internet connection (VPN).
  • Nhập chi tiết máy chủ VPN. Nhập tên miền hoặc địa chỉ IP của máy chủ vào trường Internet address, sau đó điền Destination name với một cái tên mô tả kết nối VPN của bạn. Sau đó nhấp Done.

Cấu hình Windows bằng PowerShell:

Để nhập chứng chỉ CA gốc bằng PowerShell, trước tiên hãy mở một dấu nhắc PowerShell với quyền quản trị. Để làm như vậy, nhấp chuột phải vào biểu tượng Start menu và chọn Windows PowerShell (Admin). Bạn cũng có thể mở một dấu nhắc lệnh với quyền quản trị và gõ powershell.

Tiếp theo, chúng ta sẽ nhập chứng chỉ bằng cmdlet Import-Certificate của PowerShell. Trong lệnh sau, đối số -CertStoreLocation đầu tiên sẽ đảm bảo rằng chứng chỉ được nhập vào kho Trusted Root Certification Authorities của máy tính để tất cả các chương trình và người dùng có thể xác minh chứng chỉ của máy chủ VPN.

Đối số -FilePath nên trỏ đến vị trí bạn đã sao chép chứng chỉ. Trong ví dụ sau, đường dẫn là C:\\\\Users\\\\sammy\\\\Documents\\\\ca-cert.pem. Đảm bảo rằng bạn chỉnh sửa lệnh để khớp với vị trí bạn đã sử dụng.

Import-Certificate `
    -CertStoreLocation cert:\\\\LocalMachine\\\\Root\\\\ `
    -FilePath C:\\\\users\\\\sammy\\\\Documents\\\\ca-cert.pem

Lệnh sẽ xuất ra một cái gì đó như sau:

Output
   PSParentPath: Microsoft.PowerShell.Security\\\\Certificate::LocalMachine\\\\Root

Thumbprint                                Subject
----------                                -------
DB00813B4087E9367861E8463A60CEA0ADC5F002  CN=VPN root CA

Bây giờ để cấu hình VPN bằng PowerShell, hãy chạy lệnh sau. Thay thế tên miền hoặc địa chỉ IP của máy chủ của bạn trên dòng -ServerAddress. Các cờ khác nhau sẽ đảm bảo rằng Windows được cấu hình đúng với các tham số bảo mật thích hợp khớp với các tùy chọn bạn đã đặt trong /etc/ipsec.conf.

Add-VpnConnection -Name "VPN Connection" `
    -ServerAddress "server_domain_or_IP" `
    -TunnelType "IKEv2" `
    -AuthenticationMethod "EAP" `
    -EncryptionLevel "Maximum" `
    -RememberCredential `

Nếu lệnh thành công sẽ không có bất kỳ đầu ra nào. Để xác nhận VPN được cấu hình đúng, hãy sử dụng cmdlet Get-VPNConnection:

Get-VpnConnection -Name "VPN Connection"

Bạn sẽ nhận được đầu ra như sau:

Output
Name                  : VPN Connection
ServerAddress         : your_server_ip
AllUserConnection     : False
Guid                  : {B055A1AB-175C-4028-B4A8-D34309A2B20E}
TunnelType            : Ikev2
AuthenticationMethod  : {Eap}
EncryptionLevel       : Maximum
L2tpIPsecAuth         :
UseWinlogonCredential : False
EapConfigXmlStream    : #document
ConnectionStatus      : Disconnected
RememberCredential    : True
SplitTunneling        : False
DnsSuffix             :
IdleDisconnectSeconds : 0

Theo mặc định, Windows chọn các thuật toán cũ hơn và chậm hơn. Chạy cmdlet Set-VpnConnectionIPsecConfiguration để nâng cấp các tham số mã hóa mà Windows sẽ sử dụng cho trao đổi khóa IKEv2 và để mã hóa các gói:

Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
    -AuthenticationTransformConstants GCMAES256 `
    -CipherTransformConstants GCMAES256 `
    -DHGroup ECP384 `
    -IntegrityCheckMethod SHA384 `
    -PfsGroup ECP384 `
    -EncryptionMethod GCMAES256

Lưu ý: Nếu bạn muốn xóa kết nối VPN và cấu hình lại nó với các tùy chọn khác, bạn có thể chạy cmdlet Remove-VpnConnection.

Remove-VpnConnection -Name "VPN Connection" -Force

Cờ -Force sẽ bỏ qua việc nhắc bạn xác nhận việc xóa. Bạn phải ngắt kết nối khỏi VPN nếu bạn cố gắng xóa nó bằng lệnh này.

Sau khi bạn đã nhập chứng chỉ và cấu hình VPN bằng một trong hai phương pháp, kết nối VPN mới của bạn sẽ hiển thị trong danh sách các mạng. Chọn VPN và nhấp Connect. Bạn sẽ được nhắc nhập tên người dùng và mật khẩu của mình. Nhập chúng vào, nhấp OK, và bạn sẽ được kết nối.

Kết nối từ macOS

Làm theo các bước sau để nhập chứng chỉ:

  • Nhấp đúp vào tệp chứng chỉ. Keychain Access sẽ bật lên với một hộp thoại có nội dung “Keychain Access đang cố gắng sửa đổi chuỗi khóa hệ thống. Nhập mật khẩu của bạn để cho phép điều này.”
  • Nhập mật khẩu của bạn, sau đó nhấp vào Modify Keychain.
  • Nhấp đúp vào chứng chỉ VPN mới nhập. Thao tác này sẽ mở một cửa sổ thuộc tính nhỏ nơi bạn có thể chỉ định mức độ tin cậy. Đặt IP Security (IPSec) thành Always Trust và bạn sẽ được nhắc nhập mật khẩu một lần nữa. Cài đặt này sẽ tự động lưu sau khi nhập mật khẩu.

Giờ đây chứng chỉ đã được nhập và tin cậy, hãy cấu hình kết nối VPN với các bước sau:

  • Đi tới System Preferences và chọn Network.
  • Nhấp vào nút “cộng” nhỏ ở phía dưới bên trái của danh sách mạng.
  • Trong cửa sổ bật lên xuất hiện, đặt Interface thành VPN, đặt VPN Type thành IKEv2, và đặt tên cho kết nối.
  • Trong trường Server và Remote ID, nhập tên miền hoặc địa chỉ IP của máy chủ. Để trống Local ID.
  • Nhấp vào Authentication Settings, chọn Username, và nhập tên người dùng và mật khẩu bạn đã cấu hình cho người dùng VPN của mình. Sau đó nhấp OK.

Cuối cùng, nhấp vào Connect để kết nối với VPN. Bạn bây giờ sẽ được kết nối với VPN.

Kết nối từ Ubuntu

Để kết nối từ máy Ubuntu, bạn có thể thiết lập và quản lý StrongSwan dưới dạng một dịch vụ hoặc sử dụng lệnh một lần mỗi khi bạn muốn kết nối. Hướng dẫn được cung cấp cho cả hai.

Để quản lý StrongSwan dưới dạng một dịch vụ, bạn sẽ cần thực hiện các bước cấu hình sau. Đầu tiên, cập nhật bộ đệm gói cục bộ của bạn bằng cách sử dụng apt

sudo apt update

Tiếp theo, cài đặt StrongSwan và các plugin cần thiết để xác thực:

sudo apt install strongswan libcharon-extra-plugins

Bây giờ bạn sẽ cần một bản sao của chứng chỉ CA trong thư mục /etc/ipsec.d/cacerts để máy khách của bạn có thể xác minh danh tính của máy chủ. Chạy lệnh sau để sao chép tệp ca-cert.pem vào đúng vị trí:

sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Để đảm bảo VPN chỉ chạy theo yêu cầu, hãy sử dụng systemctl để tắt StrongSwan khỏi việc tự động chạy:

sudo systemctl disable --now strongswan-starter

Tiếp theo, cấu hình tên người dùng và mật khẩu mà bạn sẽ sử dụng để xác thực với máy chủ VPN. Chỉnh sửa /etc/ipsec.secrets bằng nano hoặc trình soạn thảo ưa thích của bạn:

sudo nano /etc/ipsec.secrets

Thêm dòng sau, chỉnh sửa các giá trị tên người dùng và mật khẩu được tô sáng để khớp với những gì bạn đã cấu hình trên máy chủ:

your_username : EAP "your_password"

Cuối cùng, chỉnh sửa tệp /etc/ipsec.conf để cấu hình máy khách của bạn khớp với cấu hình của máy chủ:

config setup

conn ikev2-rw
    right=server_domain_or_IP
    # This should match the `leftid` value on your server's configuration
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

Để kết nối với VPN, gõ:

sudo systemctl start strongswan-starter

Để ngắt kết nối lại, gõ:

sudo systemctl stop strongswan-starter

Để quản lý StrongSwan dưới dạng một dịch vụ, bạn sẽ cần thực hiện các bước cấu hình sau. Đầu tiên, cập nhật bộ đệm gói cục bộ của bạn bằng cách sử dụng apt

sudo apt update

Tiếp theo, cài đặt StrongSwan và các plugin cần thiết để xác thực:

sudo apt install strongswan libcharon-extra-plugins

Bây giờ bạn sẽ cần một bản sao của chứng chỉ CA trong thư mục /etc/ipsec.d/cacerts để máy khách của bạn có thể xác minh danh tính của máy chủ. Chạy lệnh sau để sao chép tệp ca-cert.pem vào đúng vị trí:

sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Tại thời điểm này, bạn có thể kết nối với máy chủ VPN bằng charon-cmd bằng cách sử dụng chứng chỉ CA của máy chủ, địa chỉ IP của máy chủ VPN và tên người dùng bạn đã cấu hình.

Chạy lệnh sau bất cứ khi nào bạn muốn kết nối với VPN:

sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

Khi được nhắc, cung cấp mật khẩu người dùng VPN và bạn sẽ được kết nối với VPN. Để ngắt kết nối, nhấn CTRL+C trong terminal và đợi kết nối đóng.

Kết nối từ iOS

Để cấu hình kết nối VPN trên thiết bị iOS, hãy làm theo các bước sau:

  • Gửi email cho chính bạn với chứng chỉ gốc đính kèm.
  • Mở email trên thiết bị iOS của bạn và nhấn vào tệp chứng chỉ đính kèm, sau đó nhấn Install và nhập mật mã của bạn. Khi nó cài đặt xong, nhấn Done.
  • Đi tới Settings, General, VPN và nhấn Add VPN Configuration. Thao tác này sẽ hiển thị màn hình cấu hình kết nối VPN.
  • Nhấn vào Type và chọn IKEv2.
  • Trong trường Description, nhập một tên ngắn gọn cho kết nối VPN. Đây có thể là bất cứ điều gì bạn thích.
  • Trong trường Server và Remote ID, nhập tên miền hoặc địa chỉ IP của máy chủ. Trường Local ID có thể để trống.
  • Nhập tên người dùng và mật khẩu của bạn trong phần Authentication, sau đó nhấn Done.
  • Chọn kết nối VPN mà bạn vừa tạo, nhấn vào nút gạt ở đầu trang, và bạn sẽ được kết nối.

Kết nối từ Android

Làm theo các bước sau để nhập chứng chỉ:

  • Gửi email cho chính bạn với chứng chỉ CA đính kèm. Lưu chứng chỉ CA vào thư mục tải xuống của bạn.
  • Tải xuống ứng dụng StrongSwan VPN client từ Play Store.
  • Mở ứng dụng. Nhấn vào biểu tượng “thêm” (. . .) ở góc trên bên phải và chọn CA certificates.
  • Nhấn vào biểu tượng “thêm” (. . .) ở góc trên bên phải một lần nữa. Chọn Import certificate.
  • Duyệt đến tệp chứng chỉ CA trong thư mục tải xuống của bạn và chọn nó để nhập vào ứng dụng.

Giờ đây chứng chỉ đã được nhập vào ứng dụng StrongSwan, bạn có thể cấu hình kết nối VPN với các bước sau:

  • Trong ứng dụng, nhấn ADD VPN PROFILE ở trên cùng.
  • Điền Server bằng tên miền hoặc địa chỉ IP công cộng của máy chủ VPN của bạn.
  • Đảm bảo IKEv2 EAP (Username/Password) được chọn làm Loại VPN (VPN Type).
  • Điền Username và Password bằng thông tin đăng nhập bạn đã định nghĩa trên máy chủ.
  • Bỏ chọn Select automatically trong phần CA certificates và nhấp Select CA certificate.
  • Nhấn vào tab IMPORTED ở đầu màn hình và chọn CA bạn đã nhập (nó sẽ có tên “VPN root CA” nếu bạn không thay đổi “DN” trước đó).
  • Nếu muốn, hãy điền Profile name (optional) bằng một tên mô tả hơn.

Khi bạn muốn kết nối với VPN, hãy nhấp vào hồ sơ bạn vừa tạo trong ứng dụng StrongSwan.

Khắc phục sự cố kết nối

Nếu bạn không thể nhập chứng chỉ, hãy đảm bảo tệp có phần mở rộng .pem, và không phải .pem.txt.

Nếu bạn không thể kết nối với VPN, hãy kiểm tra tên máy chủ hoặc địa chỉ IP bạn đã sử dụng. Tên miền hoặc địa chỉ IP của máy chủ phải khớp với những gì bạn đã cấu hình làm tên chung (CN) trong khi tạo chứng chỉ.

Nếu chúng không khớp, kết nối VPN sẽ không hoạt động. Ví dụ, nếu bạn thiết lập một chứng chỉ với CN là vpn.example.com, bạn phải sử dụng vpn.example.com khi bạn nhập chi tiết máy chủ VPN. Kiểm tra kỹ lệnh bạn đã sử dụng để tạo chứng chỉ và các giá trị bạn đã sử dụng khi tạo kết nối VPN của mình.

Cuối cùng, kiểm tra kỹ cấu hình VPN để đảm bảo giá trị leftid được cấu hình với ký hiệu @ nếu bạn đang sử dụng tên miền:

leftid=@vpn.example.com

Nếu bạn đang sử dụng địa chỉ IP, đảm bảo rằng ký hiệu @ được bỏ qua. Cũng đảm bảo rằng khi bạn tạo tệp server-cert.pem rằng bạn đã bao gồm cả cờ --san @IP_address--san IP_address.

Kết luận

Trong hướng dẫn này, chúng ta đã cùng nhau xây dựng một máy chủ VPN mạnh mẽ sử dụng giao thức IKEv2. Hơn nữa, bạn cũng đã tự tay cấu hình các máy khách phổ biến như Windows, macOS, iOS, Android và Linux để kết nối thành công với máy chủ VPN của mình.

Việc thêm hoặc xóa người dùng VPN rất đơn giản: bạn chỉ cần quay lại Bước 5 và chỉnh sửa tệp /etc/ipsec.secrets. Mỗi dòng trong tệp này đại diện cho một người dùng, vì vậy việc thêm hoặc xóa người dùng, hay thay đổi mật khẩu, chỉ đơn giản là việc chỉnh sửa tệp này.

Giờ đây, bạn đã trang bị kiến thức và kỹ năng để tự mình triển khai một giải pháp VPN bảo mật.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất