---
title: "Cách thiết lập máy chủ VPN IKEv2 với StrongSwan trên Ubuntu 20.04"
description: "Cách thiết lập máy chủ VPN IKEv2 với StrongSwan trên Ubuntu 20.04"
url: https://cloudfly.vn/techblog/cach-thiet-lap-may-chu-vpn-ikev2-voi-strongswan-tren-ubuntu-2004
image: https://media.cloudfly.vn/posts/cach-thiet-lap-may-chu-VPN-IKEv2-voi-StrongSwan-tren-Ubuntu-20.04.png
---

# Cách thiết lập máy chủ VPN IKEv2 với StrongSwan trên Ubuntu 20.04

## Giới thiệu

Mạng riêng ảo hoặc VPN cho phép bạn mã hóa lưu lượng một cách an toàn khi lưu lượng truy cập đi qua các mạng không đáng tin cậy, chẳng hạn như mạng ở quán cà phê, hội nghị hoặc sân bay.

Internet Key Exchange v2, hay IKEv2, là một giao thức cho phép tạo đường hầm IPSec trực tiếp giữa máy chủ và máy khách. Trong triển khai IKEv2 VPN, IPSec cung cấp mã hóa cho lưu lượng mạng. IKEv2 vốn được hỗ trợ trên một số nền tảng (OS X 10.11+, iOS 9.1+ và Windows 10) mà không cần thêm ứng dụng nào khác và nó xử lý các trục trặc của máy khách khá mượt mà.

Trong hướng dẫn này, bạn sẽ thiết lập máy chủ VPN IKEv2 bằng StrongSwan trên máy chủ Ubuntu 20.04. Sau đó, bạn sẽ tìm hiểu cách kết nối với ứng dụng khách Windows, macOS, Ubuntu, iOS và Android.

## Điều kiện tiên quyết

Để hoàn thành hướng dẫn này, bạn sẽ cần:

* Một máy chủ Ubuntu 20.04 được thiết lập cấu hình bằng cách làm theo hướng dẫn thiết lập máy chủ ban đầu của Ubuntu 20.04, bao gồm `sudo` non-root user và tường lửa.

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

Trước tiên, chúng tôi sẽ cài đặt StrongSwan, một trình nền IPSec mã nguồn mở mà chúng tôi sẽ thiết lập cấu hình làm máy chủ VPN của mình. Chúng tôi cũng sẽ cài đặt thành phần cơ sở hạ tầng khóa công khai (PKI) để có thể tạo Certificate Authority (Tổ chức phát hành chứng chỉ - CA) nhằm cung cấp thông tin xác thực cho cơ sở hạ tầng của chúng tôi.

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

Sau đó cài đặt phần mềm bằng cách gõ:
```command
sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins
```

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

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

## Bước 2 — Tạo một tổ chức phát hành chứng chỉ

Máy chủ IKEv2 yêu cầu chứng chỉ để xác định chính nó cho khách hàng. Để giúp tạo chứng chỉ được yêu cầu, gói `strongswan-pki` đi kèm với một tiện ích có tên là `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ả nội dung mà chúng ta sẽ làm việc. Cấu trúc thư mục khớp với một số thư mục trong `/etc/ipsec.d`, nơi cuối cùng chúng tôi sẽ di chuyển tất cả các mục mà chúng tôi tạo:
```command
mkdir -p ~/pki/{cacerts,certs,private}
```

Sau đó, khóa các quyền để người dùng khác không thể nhìn thấy các tệp riêng tư của chúng tôi:
```command
chmod 700 ~/pki
```

Bây giờ chúng ta có cấu trúc thư mục để lưu trữ mọi thứ, chúng ta có thể tạo khóa gốc. Đây sẽ là khóa 4096-bit RSA sẽ được sử dụng để ký cơ quan cấp chứng chỉ gốc của chúng tôi.

Thực hiện các lệnh này để tạo khóa:
```command
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
```

Sau đó, chúng ta có thể chuyển sang tạo cơ quan cấp chứng chỉ gốc, sử dụng khóa mà chúng ta vừa tạo để ký chứng chỉ gốc:
```command
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
```

Cờ `--lifetime 3650` được sử dụng để đảm bảo rằng chứng chỉ gốc của tổ chức phát hành chứng chỉ sẽ có hiệu lực trong 10 năm. Chứng chỉ gốc cho một cơ quan có thẩm quyền 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à ứng dụng khách dựa vào nó, vì vậy 10 năm là giá trị hết hạn mặc định an toàn.

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

Bây giờ chúng tôi đã thiết lập và chạy cơ quan cấp chứng chỉ gốc, chúng tôi có thể tạo 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ây giờ chúng ta sẽ tạo chứng chỉ và khóa cho máy chủ VPN. Chứng chỉ này sẽ cho phép khách hàng xác minh tính xác thực của máy chủ bằng chứng chỉ CA mà chúng tôi vừa tạo.

Đầu tiên, tạo khóa riêng cho máy chủ VPN bằng lệnh sau:
```command
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 tổ chức phát hành chứng chỉ mà bạn đã tạo ở bước trước. Thực hiện lệnh sau, nhưng thay đổi trường Common Name (CN) và trường Subject Alternate Name (SAN) thành tên DNS hoặc địa chỉ IP của máy chủ VPN của bạn:
```command
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
```

<$>[note]
**Lưu ý:** Nếu bạn đang sử dụng địa chỉ IP thay vì tên DNS, bạn sẽ cần chỉ định nhiều mục nhập `--san`. 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 nhập bổ sung như dòng được trích dẫn sau:
```custom_prefix()
--dn "CN=<^>IP address<^>" --san @<^>IP_address<^> --san <^>IP_address<^> \
```

Lý do cho mục nhập `--san @<^>IP_address<^>` bổ sung này là vì một số khách hàng 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áy chủ hay không khi họ xác minh danh tính của máy chủ.
<$>

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.

Bây giờ chúng tôi đã tạo tất cả các tệp TLS/SSL mà StrongSwan cần, chúng tôi có thể di chuyển các tệp vào vị trí trong thư mục `/etc/ipsec.d` bằng cách nhập:
```command
sudo cp -r ~/pki/* /etc/ipsec.d/
```

Trong bước này, chúng tôi đã 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ủ. Chúng tôi cũng đã ký các chứng chỉ bằng khóa CA, vì vậy, khách hàng 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, chúng tôi sẽ chuyển sang cấu hình phần mềm.

## Bước 4 — Thiết lập cấu hình StrongSwan

StrongSwan có tệp cấu hình mặc định với một số ví dụ, nhưng chúng tôi sẽ phải tự thực hiện hầu hết cấu hình. Hãy sao lưu tệp để tham khảo trước khi bắt đầu lại từ đầu:
```command
sudo mv /etc/ipsec.conf{,.original}
```

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

<$>[note]
**Lưu ý:** Khi bạn thực hiện phần này để thiết lập cấu hình phần máy chủ của VPN, bạn sẽ gặp các cài đặt đề cập đến bên *trái* và bên *phải* của kết nối. Khi làm việc với IPSec VPN, phía bên *trái* theo quy ước đề cập đến hệ thống cục bộ mà bạn đang thiết lập cấu hình, trong trường hợp này là máy chủ. Các chỉ thị bên *phải* trong các cài đặt này sẽ đề cập đến các máy khách từ xa, như điện thoại và các máy tính khác.

Khi bạn chuyển sang cấu hình ứng dụng khách sau trong hướng dẫn này, các tệp cấu hình ứng dụng khách sẽ tự tham chiếu đến chúng bằng cách sử dụng các chỉ thị bên *trái* khác nhau và máy chủ sẽ được tham chiếu bằng cách sử dụng thuật ngữ bên *phải*.
<$>

Trước tiên, chúng tôi sẽ yêu cầu StrongSwan ghi nhật ký trạng thái daemon để gỡ lỗi và cho phép các kết nối trùng lặp. Thêm những dòng này vào tệp:
```nginx
[label /etc/ipsec.conf]
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no
```

Sau đó, chúng tôi sẽ tạo một phần cấu hình cho VPN của chúng tôi. Chúng tôi cũng sẽ yêu cầu StrongSwan tạo Đường hầm VPN IKEv2 và tự động tải phần cấu hình này khi nó khởi động. Nối các dòng sau vào tệp:
```nginx
[label /etc/ipsec.conf]
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
```

Chúng tôi cũng sẽ thiết lập cấu hình tính năng phát hiện dead-peer để xóa mọi kết nối "dangling" trong trường hợp máy khách ngắt kết nối bất ngờ. Thêm những dòng này:
```nginx
[label /etc/ipsec.conf]
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no
```

Tiếp theo, chúng tôi sẽ thiết lập cấu hình các tham số IPSec bên "trái" 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à nhận dạng chính xác. Bạn sẽ thêm từng cài đặt này vào tệp `/etc/ipsec.conf` khi bạn đã quen thuộc với chúng là gì và tại sao 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 để liên lạc tiếp theo với các máy khách. Ví dụ: nếu bạn đang kết nối máy khách qua 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 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 khách hàng. Khi được kết hợp với tùy chọn tiếp theo `leftcert`, tùy chọn `leftid` đảm bảo rằng tên được thiết lập cấu hình của máy chủ và Distinguished Name (DN) có trong chứng chỉ công khai khớp với 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 đã thiết lập cấu hình ở Bước 3. Nếu không có tùy chọn này, máy chủ sẽ không thể tự xác thực với máy khách hoặc hoàn tất thương lượng 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 bản sao chứng chỉ công khai của máy chủ như một phần của kết nối ban đầu được thiết lập.
* `leftsubnet=0.0.0.0/0` Tùy chọn bên "trái" cuối cùng mà bạn sẽ thêm sẽ cho khách hàng biết về các mạng con có thể truy cập được 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ộ bộ địa chỉ IPv4, nghĩa là máy chủ sẽ yêu cầu khách hàng gửi tất cả lưu lượng truy cập của họ qua VPN theo mặc định.

Bây giờ bạn đã quen thuộc với từng tùy chọn bên trái có liên quan, hãy thêm tất cả chúng vào tệp như sau:
```nginx
[label /etc/ipsec.conf]
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=<^>@server_domain_or_IP<^>
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
```

<$>[note]
**Lưu ý:** Khi thiết lập 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ởi một tên miền:
```nginx
[label /etc/ipsec.conf]
    . . .    leftid=@vpn.example.com
    . . .
```

Nếu máy chủ được xác định bằng địa chỉ IP của nó, chỉ cần đặt địa chỉ IP vào:
```nginx
[label /etc/ipsec.conf]
    . . .
    leftid=<^>your_server_ip<^>
    . . .
```
<$>

Tiếp theo, chúng ta có thể thiết lập cấu hình các tham số IPSec bên “phải” của máy khách. Mỗi tham số sau đây cho máy chủ biết cách chấp nhận 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à dải địa chỉ IP riêng cũng như 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 là gì và tại sao chúng được sử dụng:

* `right=%any` Tùy chọn `%any` cho phía bên phải của kết nối hướng dẫn 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ừ các máy khách cung cấp danh tính trước khi thiết lập đường hầm mã hóa.
* `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 để có khả năng tương thích rộng nhằm hỗ trợ các ứng dụng khách như thiết bị Windows, macOS và Android.
* `rightsourceip=10.10.10.0/24` Tùy chọn này hướng dẫn máy chủ gán địa chỉ IP riêng cho máy khách từ nhóm 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à trình phân giải DNS công khai của Google. Chúng có thể được thay đổi để sử dụng các trình phân giải công khai khác, trình phân giải của máy chủ VPN hoặc bất kỳ trình phân giải nào khác mà khách hàng có thể tiếp cận.
* `rightsendcert=never` Tùy chọn này hướng dẫn máy chủ rằng các máy khách không cần gửi chứng chỉ để tự xác thực.

Bây giờ bạn đã quen thuộc với các tùy chọn bên “phải” cần thiết cho VPN, hãy thêm các dòng sau vào `/etc/ipsec.conf`:
```nginx
[label /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 tôi sẽ yêu cầu StrongSwan yêu cầu khách hàng cung cấp thông tin đăng nhập của người dùng khi họ kết nối:
```nginx
[label /etc/ipsec.conf]
. . .
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. Những 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* (Bộ mật mã)) mà StrongSwan sẽ cho phép các máy khách khác nhau sử dụng:
```nginx
[label /etc/ipsec.conf]
. . .
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ật mã đượ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ật mã đượ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:
```nginx
[label /etc/ipsec.conf]
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 chính xác từng dòng. Nếu bạn đã sử dụng `nano`, hãy làm như vậy bằng cách nhấn `CTRL + X`, `Y`, rồi `ENTER`.

Bây giờ chúng tôi đã thiết lập cấu hình các tham số VPN, hãy chuyển sang tạo tài khoản để người dùng của chúng tôi 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 chúng tôi hiện được thiết lập cấu hình để chấp nhận kết nối máy khách, nhưng chúng tôi chưa có bất kỳ thông tin xác thực nào được thiết lập cấu hình. Chúng tôi sẽ cần thiết lập cấu hình một số thứ trong tệp cấu hình đặc biệt có tên là `ipsec.secrets`:

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

Hãy mở tệp bí mật để chỉnh sửa:
```command
sudo nano /etc/ipsec.secrets
```

Trước tiên, chúng tôi sẽ cho StrongSwan biết nơi tìm khóa riêng của chúng tôi và cách phân tích cú pháp khóa đó.
```nginx
[label /etc/ipsec.secrets]
: RSA "server-key.pem"
```

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

Sau đó, chúng tôi 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ỳ kết hợp tên người dùng hoặc mật khẩu nào mà bạn muốn:
```nginx
[label /etc/ipsec.secrets]
<^>your_username<^> : EAP <^>"your_password"<^>
```

Lưu và đóng tập tin. Bây giờ chúng ta đã hoàn thành công việc với các tham số VPN, chúng ta sẽ khởi động lại dịch vụ VPN để cấu hình của chúng ta được áp dụng:
```command
sudo systemctl restart strongswan-starter
```

Giờ đây, máy chủ VPN đã được thiết lập 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 — Thiết lập cấu hình Tường lửa & Chuyển tiếp IP Kernel

Khi hoàn tất cấu hình StrongSwan, chúng tôi cần thiết lập 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 tiên quyết, bạn nên bật tường lửa UFW. Nếu bạn chưa thiết lập cấu hình UFW, bạn nên bắt đầu bằng cách thêm quy tắc cho phép kết nối SSH qua tường lửa để phiên hiện tại của bạn không đóng khi bạn bật UFW:
```command
sudo ufw allow OpenSSH
```

Sau đó kích hoạt tường lửa bằng cách gõ:
```command
sudo ufw enable
```

Sau đó, thêm quy tắc để cho phép lưu lượng UDP đến các cổng IPSec tiêu chuẩn, `500` và `4500`:
```command
sudo ufw allow 500,4500/udp
```

Tiếp theo, chúng tôi sẽ mở một trong các tệp cấu hình của UFW để thêm một số chính sách cấp thấp để định tuyến và chuyển tiếp các gói IPSec. Tuy nhiên, trước khi chúng tôi có thể làm điều này, chúng tôi cần tìm giao diện mạng nào trên máy chủ của chúng tôi đượ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 đường mặc định:
```command
ip route show default
```

Giao diện công khai của bạn phải tuân theo từ “dev”. Ví dụ: kết quả này hiển thị giao diện có tên `eth0`, được đánh dấu trong ví dụ sau:
```
[secondary_label Output]
default via <^>your_server_ip<^> dev <^>eth0<^> proto static
```

Khi bạn có giao diện mạng công cộng, hãy mở tệp `/etc/ufw/b Before.rules` trong trình soạn thảo văn bản của mình. 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 đầu vào và đầu ra thông thường. Chúng được sử dụng để thiết lập 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à từ máy khách và Internet.
```command
sudo nano /etc/ufw/before.rules
```

Gần đầu tệp (trước dòng `*filter`), thêm khối cấu hình dưới đây. Thay đổi từng phiên bản của `eth0` trong cấu hình trên để khớp với tên giao diện bạn tìm thấy với `ip route`. Các dòng `*nat` tạo quy tắc để tường lửa có thể định tuyến và thao tác chính xác lưu lượng giữa máy khách VPN và internet. Dòng `*mangle` điều chỉnh kích thước phân đoạn gói tối đa để ngăn các sự cố tiềm ẩn với một số máy khách VPN nhất định:
```nginx
[label /etc/ufw/before.rules]
<^>*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 các dòng định nghĩa `*filter` và chain, hãy thêm một khối cấu hình nữa:
```nginx
[label /etc/ufw/before.rules]
. . .
*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<^>
```

Những dòng này yêu cầu tường lửa chuyển tiếp lưu lượng ESP (Đóng gói tải trọng bảo mật) để 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 tôi khi chúng đi qua các mạng không đáng tin cậy.

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

Trước khi khởi động lại tường lửa, chúng tôi sẽ 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`. Chúng tôi sẽ cần thiết lập cấu hình một vài thứ trong tệp.

Đầu tiên cần bật tính năng chuyển tiếp gói IPv4 để lưu lượng có thể di chuyển giữa VPN và các giao diện mạng đối mặt công khai trên máy chủ. Tiếp theo, chúng tôi sẽ vô hiệu hóa khám phá Path MTU để ngăn các sự cố phân mảnh gói. Cuối cùng, chúng tôi 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 trung gian.

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:
```command
sudo nano /etc/ufw/sysctl.conf
```

Bây giờ, hãy thêm cài đặt `net/ipv4/ip_forward=1` sau vào cuối tệp để bật chuyển tiếp gói giữa các giao diện:
```nginx
[label /etc/ufw/sysctl.conf]
. . .
<^>net/ipv4/ip_forward=1<^>
```

Khối tiếp theo 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:
```nginx
[label /etc/ufw/sysctl.conf]
. . .
<^>net/ipv4/conf/all/accept_redirects=0<^>
<^>net/ipv4/conf/all/send_redirects=0<^>
```

Cuối cùng, tắt khám phá Path MTU bằng cách thêm dòng này vào cuối tệp:
```nginx
[label /etc/ufw/sysctl.conf]
. . .
<^>net/ipv4/ip_no_pmtu_disc=1<^>
```

Lưu tệp khi bạn hoàn tất. Giờ đây, chúng tôi có thể bậ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:
```command
sudo ufw disable
sudo ufw enable
```

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

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

Bây giờ bạn đã thiết lập xong mọi thứ, đã đến lúc dùng thử. Trước tiên, bạn cần sao chép chứng chỉ CA mà bạn đã tạo và cài đặt nó trên (các) thiết bị khách sẽ kết nối với VPN. Cách dễ nhất để thực hiện việc 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ỉ:
```command
cat /etc/ipsec.d/cacerts/ca-cert.pem
```

Bạn sẽ thấy đầu ra tương tự như sau:
```
[secondary_label Output]
-----BEGIN CERTIFICATE-----
MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE

. . .

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

Sao chép kết quả này vào máy tính của bạn, bao gồm các dòng `-----BEGIN CERTIFICATE-----` và `-----END CERTIFICATE-----`, và lưu nó vào một tệp có 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.

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

### Kết nối từ Windows

Có nhiều cách để nhập chứng chỉ gốc và thiết lập 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 viết và sửa đổi theo kịch bản để phù hợp với cấu hình VPN của bạn.

<$>[note]
**Lưu ý:** Các hướng dẫn này đã được thử nghiệm trên các bản cài đặt Windows 10 chạy phiên bản 1903 và 1909.
<$>

#### Thiết lập cấu hình Windows bằng Graphical Tools

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

1. Nhấn `WINDOWS+R` để hiển thị hộp thoại **Run** và nhập `mmc.exe` để khởi chạy Windows Management Console (Bảng điều khiển quản lý Windows).
2. Từ menu **File**, điều hướng đến **Add or Remove Snap-in**, chọn **Certificates** từ danh sách các phần đính kèm có sẵn và nhấp vào **Add**.
3. Chúng tôi muốn VPN hoạt động với bất kỳ người dùng nào, vì vậy hãy chọn **Computer Account** và nhấp vào **Next**.
4. Chúng tôi đang thiết lập cấu hình mọi thứ trên máy tính cục bộ, vì vậy hãy chọn **Local Computer**, sau đó nhấp vào **Finish**.
5. Trong nút **Console Root**, mở rộng mục **Certificates (Local Computer)**, mở rộng **Trusted Root Certification Authorities**, sau đó chọn mục **Certificates**:

![description image](https://media.cloudfly.vn/posts/4PN0vT6.png)

6. Từ menu **Action**, chọn **All Tasks** và nhấp vào **Import** để hiển thị Certificate Import Wizard (Trình hướng dẫn nhập chứng chỉ). Nhấp vào **Next** để chuyển qua phần giới thiệu.
7. 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 tin `ca-cert.pem` mà bạn đã lưu. Sau đó nhấp vào **Next**.
8. Đảm bảo rằng **Certificate Store** được đặt thành **Trusted Root Certification Authorities** và nhấp vào **Next**.
9. Nhấp vào **Finish** để nhập chứng chỉ.

Sau đó thiết lập cấu hình VPN theo các bước sau:

1. Khởi chạy **Control Panel**, sau đó điều hướng đến **Network and Sharing Center**.
2. Nhấp vào **Set up a new connection or network**, sau đó chọn **Connect to a workplace**.
3. Chọn Use my Internet connection (VPN).
4. 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 vào **Destination name** bằng nội dung mô tả kết nối VPN của bạn. Sau đó bấm **Done**.

#### Thiết lập 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ở lời nhắc PowerShell với đặc quyền của quản trị viên. Để làm như vậy, nhấp chuột phải vào biểu tượng menu Start và chọn `Windows PowerShell (Admin)`. Bạn cũng có thể mở dấu nhắc lệnh với tư cách quản trị viên và nhập `powershell`.

Tiếp theo, chúng tôi sẽ nhập chứng chỉ bằng cách sử dụng `Import-Certificate` PowerShell cmdlet (lệnh ghép ngắn). 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 lưu trữ **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` phải trỏ đến vị trí mà 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í mà bạn đã sử dụng.
```custom_prefix(PS C:\windows&#92;system32>)
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:
```
[secondary_label Output]
   PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root

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

Bây giờ để thiết lập cấu hình VPN bằng PowerShell, hãy chạy lệnh sau. Thay thế tên DNS 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 mà bạn đã đặt trong `/etc/ipsec.conf`.
```custom_prefix(PS C:\windows&#92;system32>)
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 thiết lập cấu hình chính xác, hãy sử dụng lệnh ghép ngắn `Get-VPNConnection`:
```custom_prefix(PS C:\windows&#92;system32>)
Get-VpnConnection -Name "VPN Connection"
```

Bạn sẽ nhận được đầu ra như sau:
```
[secondary_label 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 lệnh ghép ngắn `Set-VpnConnectionIPsecConfiguration` để nâng cấp các tham số mã hóa mà Windows sẽ sử dụng để trao đổi khóa IKEv2 và để mã hóa các gói:
```custom_prefix(PS C:\windows&#92;system32>)
Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
    -AuthenticationTransformConstants GCMAES256 `
    -CipherTransformConstants GCMAES256 `
    -DHGroup ECP384 `
    -IntegrityCheckMethod SHA384 `
    -PfsGroup ECP384 `
    -EncryptionMethod GCMAES256
```

<$>[note]
**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 nhau, bạn có thể chạy lệnh ghép ngắn `Remove-VpnConnection`.
```custom_prefix(PS C:\windows&#92;system32>)
Remove-VpnConnection -Name "VPN Connection" -Force
```

Cờ `-Force` sẽ bỏ qua lời 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.
<$>

#### Kết nối với VPN

Khi bạn đã nhập chứng chỉ và VPN được thiết lập cấu hình 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 mạng. Chọn VPN và nhấp vào **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 vào **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ỉ:

1. Bấm đúp vào tệp chứng chỉ. **Keychain Access** sẽ bật lên với hộp thoại có nội dung “Keychain Access is trying to modify the system keychain. Enter your password to allow this." (Truy cập chuỗi khóa đang cố 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.)
2. Nhập mật khẩu của bạn, sau đó nhấp vào **Modify Keychain**
3. Bấm đúp vào chứng chỉ VPN mới được nhập. Thao tác này sẽ mở ra 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 lại mật khẩu của mình. Cài đặt này sẽ tự động lưu sau khi nhập mật khẩu.

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

1. Chuyển đến **System Preferences** và chọn **Network**.
2. Nhấp vào nút “plus” nhỏ ở phía dưới bên trái danh sách mạng.
3. 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.
4. Trong trường **Server** và **Remote ID**, hãy nhập tên miền hoặc địa chỉ IP của máy chủ. Để trống **Local ID**.
5. Nhấp vào **Authentication Settings**, chọn **Username** và nhập tên người dùng và mật khẩu mà bạn đã thiết lập cấu hình cho người dùng VPN của mình. Sau đó bấm **OK**.

Cuối cùng, nhấp vào **Connect** để kết nối với VPN. Bây giờ bạn 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 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 như một dịch vụ

Để quản lý StrongSwan như một dịch vụ, bạn cần thực hiện các bước cấu hình sau.

Trước tiên, hãy cập nhật bộ đệm gói cục bộ của bạn bằng cách sử dụng `apt`
```command
sudo apt update
```

Tiếp theo, cài đặt StrongSwan và các plugin cần thiết để xác thực:
```command
sudo apt install strongswan libcharon-extra-plugins
```

Bây giờ, bạn sẽ cần một bản sao chứng chỉ CA trong thư mục `/etc/ipsec.d/cacerts` để khách hàng 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 vị trí:
```command
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` để vô hiệu hóa StrongSwan chạy tự động:
```command
sudo systemctl disable --now strongswan-starter
```

Tiếp theo thiết lập 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 chỉnh sửa ưa thích của bạn:
```command
sudo nano /etc/ipsec.secrets
```

Thêm dòng sau, chỉnh sửa giá trị tên người dùng và mật khẩu được đánh dấu để khớp với giá trị bạn đã thiết lập cấu hình trên máy chủ:
```nginx
[label /etc/ipsec.secrets]
<^>your_username<^> : EAP <^>"your_password"<^>
```

Cuối cùng, chỉnh sửa tệp `/etc/ipsec.conf` để thiết lập 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ủ:
```nginx
[label /etc/ipsec.conf]
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, hãy nhập:
```command
sudo systemctl start strongswan-starter
```

Để ngắt kết nối lại, gõ:
```command
sudo systemctl stop strongswan-starter
```

#### Sử dụng Ứng dụng khách `charon-cmd` cho các kết nối một lần

Để quản lý StrongSwan như một dịch vụ, bạn cần thực hiện các bước cấu hình sau.

Trước tiên, hãy cập nhật bộ đệm gói cục bộ của bạn bằng cách sử dụng `apt`
```command
sudo apt update
```

Tiếp theo, cài đặt StrongSwan và các plugin cần thiết để xác thực:
```command
sudo apt install strongswan libcharon-extra-plugins
```

Bây giờ, bạn sẽ cần một bản sao chứng chỉ CA trong thư mục `/etc/ipsec.d/cacerts` để khách hàng 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 vị trí:
```command
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 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 đã thiết lập cấu hình.

Chạy lệnh dưới đây bất cứ khi nào bạn muốn kết nối với VPN:
```command
sudo charon-cmd --cert ca-cert.pem --host <^>vpn_domain_or_IP<^> --identity <^>your_username<^>
```

Khi được nhắc, hãy cung cấp mật khẩu của người dùng VPN và bạn sẽ được kết nối với VPN. Để ngắt kết nối, hãy nhấn `CTRL+C` trong thiết bị đầu cuối và đợi kết nối đóng lại.

### Kết nối từ iOS

Để thiết lập 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:

1. Gửi cho bạn một email có đính kèm chứng chỉ gốc.
2. 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. Sau khi cài đặt, hãy nhấn **Done**.
3. Chuyển đến **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.
4. Nhấn vào **Type** và chọn **IKEv2**.
5. Trong trường **Description**, nhập tên ngắn cho kết nối VPN. Đây có thể là bất cứ thứ gì bạn thích.
6. Trong trường **Server** và **Remote ID**, hãy nhập tên miền hoặc địa chỉ IP của máy chủ. Trường **Local ID** có thể để trống.
7. Nhập tên người dùng và mật khẩu của bạn vào phần **Authentication**, sau đó nhấn vào **Done**.
8. Chọn kết nối VPN mà bạn vừa tạo, nhấn vào công tắc ở đầ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ỉ:

1. Gửi cho bạn một email có đính kèm chứng chỉ CA. Lưu chứng chỉ CA vào thư mục tải xuống của bạn.
2. Tải xuống ứng dụng khách StrongSwan VPN từ Play Store.
3. Mở ứng dụng. Nhấn vào biểu tượng “more” (...) ở góc trên bên phải và chọn chứng chỉ **CA**.
4. Nhấn lại vào biểu tượng “more” (...) ở góc trên bên phải. Chọn **Import certificate**.
5. 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.

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

1. Trong ứng dụng, nhấn vào **ADD VPN PROFILE** ở trên cùng.
2. Điền vào **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.
3. Đảm bảo **IKEv2 EAP (Username/Password)** được chọn làm VPN Type.
4. Điền vào **Username** và **Password** với thông tin đăng nhập bạn đã xác định trên máy chủ.
5. Bỏ chọn **Select automatically** trong phần **CA certificate** và nhấp vào **Select CA certificate**.
6. Nhấn vào tab **IMPORTED** ở đầu màn hình và chọn CA bạn đã nhập (nó sẽ có tên là “VPN root CA” nếu bạn không thay đổi “DN” trước đó).
7. Nếu bạn muốn, hãy điền vào **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 cấu hình 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` chứ 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 đã thiết lập 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 chứng chỉ có CN là `vpn.example.com`, thì bạn phải sử dụng `vpn.example.com` khi 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.

Cuối cùng, hãy kiểm tra kỹ cấu hình VPN để đảm bảo giá trị `leftid` được thiết lập cấu hình bằng ký hiệu `@` nếu bạn đang sử dụng một tên miền:
```nginx
[label /etc/ipsec.conf]
   leftid=<^>@<^>vpn.example.com
```

Nếu bạn đang sử dụng địa chỉ IP, hãy đảm bảo rằng biểu tượng `@` bị bỏ qua. Ngoài ra, hãy đảm bảo rằng khi bạn tạo tệp `server-cert.pem`, bạn đã bao gồm cả hai cờ `--san @<^>IP_address<^>` và `--san <^>IP_address<^>`.

## Kết luận

Trong hướng dẫn này, bạn đã xây dựng một máy chủ VPN sử dụng giao thức IKEv2. Bạn đã tìm hiểu về các lệnh kiểm soát bên `left` và bên `right` của kết nối trên cả máy chủ và máy khách. Bạn cũng đã thiết lập cấu hình máy khách Windows, macOS, iOS, Android hoặc Linux để kết nối với VPN.

Để thêm hoặc xóa người dùng, hãy chuyển sang Bước 5 một lần nữa. Mỗi dòng trong `/etc/ipsec.secrets` dành cho một người dùng, do đó, việc thêm hoặc xóa người dùng hoặc thay đổi mật khẩu chỉ cần chỉnh sửa tệp.

Giờ đây, bạn có thể yên tâm rằng các hoạt động trực tuyến của mình sẽ được bảo mật mọi lúc mọi nơi và với bất kỳ thiết bị nào bạn sử dụng để truy cập internet.
