Cách thiết lập server VPN IKEv2 với StrongSwan trên Ubuntu 20.04
Mạng riêng ảo, hay VPN, cho phép bạn mã hóa lưu lượng một cách an toàn khi nó di chuyển qua các mạng không tin cậy , chẳng hạn như các mạng tại quán cà phê, hội nghị hoặc sân bay.Internet Key Exchange v2 , hoặc IKEv2, là một giao thức cho phép tạo tunnel IPSec trực tiếp giữa server và client . Trong triển khai IKEv2 VPN, IPSec cung cấp mã hóa cho lưu lượng mạng. IKEv2 được hỗ trợ nguyên bản trên một số nền tảng (OS X 10.11+, iOS 9.1+ và Windows 10) mà không cần ứng dụng bổ sung nào và nó xử lý các trục trặc của client khá trơn tru.
Trong hướng dẫn này, bạn sẽ cài đặt server VPN IKEv2 bằng StrongSwan trên server Ubuntu 20.04 . Sau đó, bạn sẽ học cách kết nối nó với các ứng dụng client Windows, macOS, Ubuntu, iOS và Android.
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần :
-  Một  server  Ubuntu 20.04 được  cấu hình   theo  hướng dẫn  cài đặt   server  ban đầu Ubuntu 20.04 , bao gồm  user  không phải root sudovà firewall .
Bước 1 - Cài đặt StrongSwan
Đầu tiên, ta sẽ cài đặt StrongSwan, một daemon IPSec open-souce mà ta sẽ cấu hình làm server VPN của bạn . Ta cũng sẽ cài đặt thành phần cơ sở hạ tầng public key (PKI) để ta có thể tạo Tổ chức phát hành certificate (CA) để cung cấp thông tin đăng nhập cho cơ sở hạ tầng của ta .
Bắt đầu bằng cách cập nhật cache ẩn gói local :
- sudo apt update 
Sau đó cài đặt phần mềm bằng lệnh :
- sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins 
Gói bổ sung libcharon-extauth-plugins được sử dụng  đảm bảo  rằng các client  khác nhau có thể xác thực với  server  của bạn bằng cách sử dụng tên  user  và  passphrase (password bảo vệ)   được chia sẻ.
Bây giờ mọi thứ đã được cài đặt, hãy chuyển sang tạo certificate của ta .
Bước 2 - Tạo Tổ chức phát hành certificate
  Server  IKEv2 certificate request  để tự nhận dạng đối với client . Để giúp tạo certificate  cần thiết, gói strongswan-pki đi kèm với một tiện ích gọi là pki để tạo Cơ quan cấp certificate  và certificate   server .
 Để bắt đầu, hãy tạo một vài folder  để lưu trữ tất cả các tài sản mà  ta  sẽ làm việc. Cấu trúc folder   trùng với  một số folder  trong /etc/ipsec.d , nơi cuối cùng  ta  sẽ di chuyển tất cả các mục  ta  tạo:
- mkdir -p ~/pki/{cacerts,certs,private} 
Sau đó khóa các quyền để user khác không thể nhìn thấy các file riêng tư của ta :
- chmod 700 ~/pki 
Bây giờ ta có cấu trúc folder để lưu trữ mọi thứ, ta có thể tạo một khóa root . Đây sẽ là khóa RSA 4096-bit sẽ được sử dụng để ký cơ quan cấp certificate root của ta .
Thực thi các lệnh này để tạo khóa:
- pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem 
Sau đó, ta có thể chuyển sang tạo tổ chức phát hành certificate root của bạn , sử dụng khóa mà ta vừa tạo để ký certificate root :
- 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 
--lifetime 3650 được sử dụng  đảm bảo  rằng certificate  root  của tổ chức phát hành certificate  sẽ có hiệu lực trong 10 năm. Chứng chỉ root  cho một cơ quan thường không thay đổi, vì nó sẽ phải được phân phối lại cho mọi  server  và client  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ị tên phân biệt (DN) thành một giá trị khác nếu bạn muốn. Tên chung (trường CN) ở đây chỉ là chỉ báo, vì vậy nó không cần phải trùng với bất kỳ thứ gì trong cơ sở hạ tầng của bạn.
Bây giờ ta đã có cơ quan cấp certificate root của bạn và đang chạy, ta có thể tạo certificate mà server VPN sẽ sử dụng.
Bước 3 - Tạo certificate cho server VPN
Bây giờ ta sẽ tạo certificate và khóa cho server VPN. Chứng chỉ này sẽ cho phép client xác minh tính xác thực của server bằng certificate CA mà ta vừa tạo.
Đầu tiên, tạo private key cho server VPN bằng 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ý certificate server VPN bằng khóa của tổ chức phát hành certificate mà bạn đã tạo ở bước trước. Thực thi lệnh sau, nhưng thay đổi trường Tên chung (CN) và Chủ đề Tên thay thế (SAN) thành tên DNS hoặc địa chỉ IP của server 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 đang sử dụng địa chỉ IP thay vì tên DNS, bạn  cần  chỉ định nhiều mục --san . Dòng trong khối lệnh trước mà bạn chỉ định tên phân biệt ( --dn ... )  cần  được sửa đổi với mục nhập bổ sung như dòng được trích dẫn sau:
--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à một số  ứng dụng client  sẽ kiểm tra xem certificate  TLS có cả mục nhập DNS và mục nhập Địa chỉ IP cho  server  hay không khi họ xác minh danh tính của nó.
 Tùy chọn --flag serverAuth được sử dụng để  cho biết  certificate  sẽ được sử dụng một cách rõ ràng để xác thực  server , trước khi tunnel  được mã hóa được  cài đặt . Tùy chọn --flag ikeIntermediate được sử dụng để hỗ trợ các client  macOS cũ hơn.
 Bây giờ  ta  đã tạo tất cả các file  TLS / SSL mà StrongSwan cần,  ta  có thể di chuyển các file  vào vị trí trong folder  /etc/ipsec.d  bằng lệnh :
- sudo cp -r ~/pki/* /etc/ipsec.d/ 
Trong bước này, ta đã tạo một cặp certificate sẽ được sử dụng để bảo mật thông tin liên lạc giữa client và server . Ta cũng đã ký các certificate bằng khóa CA, vì vậy client sẽ có thể xác minh tính xác thực của server VPN bằng certificate CA. Với tất cả các certificate này đã sẵn sàng, ta sẽ chuyển sang cấu hình phần mềm.
Bước 4 - Cấu hình StrongSwan
StrongSwan có một file cấu hình mặc định với một số ví dụ, nhưng ta sẽ phải tự mình thực hiện hầu hết các cấu hình. Hãy backup file để tham khảo trước khi bắt đầu từ đầu:
- sudo mv /etc/ipsec.conf{,.original} 
Tạo và mở file  cấu hình trống mới bằng editor   bạn muốn . Ở đây,  ta  sẽ sử dụng nano :
- sudo nano /etc/ipsec.conf 
Lưu ý : Khi làm việc trong phần này để cấu hình phần server của VPN, bạn sẽ gặp phải các cài đặt đề cập đến các bên trái và 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 local mà bạn đang cấu hình, trong trường hợp này server . Các lệnh bên phải trong các cài đặt này sẽ tham chiếu đến các client 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 khách hàng sau này trong hướng dẫn này, các  file  cấu hình client  sẽ tham khảo để tự sử dụng chỉ thị khác nhau bên trái, và các  server  sẽ được gọi bằng thuật ngữ phía bên phải.
Đầu tiên, ta sẽ yêu cầu StrongSwan ghi lại các 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 file :
config setup     charondebug="ike 1, knl 1, cfg 0"     uniqueids=no Sau đó, ta sẽ tạo phần cấu hình cho VPN của bạn . Ta 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 file :
. . . conn ikev2-vpn     auto=add     compress=no     type=tunnel     keyexchange=ikev2     fragmentation=yes     forceencaps=yes Ta cũng sẽ cấu hình tính năng phát hiện mạng ngang hàng để xóa mọi kết nối "lơ lửng" trong trường hợp client ngắt kết nối bất ngờ. Thêm những dòng này:
. . . conn ikev2-vpn     . . .     dpdaction=clear     dpddelay=300s     rekey=no Tiếp theo,  ta  sẽ cấu hình các thông số IPSec bên trái của  server . Mỗi tham số sau đây  đảm bảo   server  được cấu hình để chấp nhận các kết nối từ client  và tự nhận dạng chính xác. Bạn sẽ thêm từng cài đặt này vào file  /etc/ipsec.conf khi bạn đã quen với chúng là gì và tại sao chúng được sử dụng:
-  left=%anyGiá trị%anyđảm bảo server sẽ sử dụng network interface nơi nó nhận các kết nối đến để liên lạc tiếp theo với client . Ví dụ: nếu bạn đang kết nối một client qua mạng riêng, server 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_IPTùy chọn này kiểm soát tên mà server hiển thị cho khách hàng. Khi được kết hợp với tùy chọn tiếp theoleftcert, tùy chọnleftidđảm bảo tên được cấu hình của server và Tên phân biệt (DN) có trong public certificate khớp nhau.
-  leftcert=server-cert.pemTùy chọn này là đường dẫn đến public certificate cho server mà bạn đã cấu hình ở Bước 3. Nếu không có nó, server sẽ không thể tự xác thực với client hoặc kết thúc thương lượng cài đặt IKEv2.
-  leftsendcert=alwaysGiá trịalwaysđảm bảo bất kỳ client nào kết nối với server sẽ luôn nhận được bản sao public certificate của server như một phần của kết nối ban đầu được cài đặt .
-  leftsubnet=0.0.0.0/0Tù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 server . 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 địa chỉ IPv4, nghĩa là server sẽ yêu cầu client gửi tất cả lưu lượng truy cập của họ qua VPN theo mặc định.
Đến đây bạn đã quen 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 file 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  server  ( leftid ), chỉ bao gồm ký tự @ nếu  server  VPN của bạn sẽ được xác định bằng domain :
    . . .    leftid=@vpn.example.com     . . . Nếu server 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,  ta  có thể cấu hình các tham số IPSec bên phải của client . Mỗi tham số sau đây cho  server  biết cách chấp nhận kết nối từ client , cách client  nên xác thực với  server , phạm vi địa chỉ IP riêng và  server  DNS mà client  sẽ sử dụng. Thêm từng cài đặt này vào file  /etc/ipsec.conf khi bạn đã quen với chúng là gì và tại sao chúng được sử dụng:
-  right=%anySự%anytùy chọn chorightphía của kết nối chỉ thị các server để chấp nhận các kết nối đến từ bất kỳ khách hàng từ xa.
-  rightid=%anyTùy chọn này đảm bảo server sẽ không từ chối các kết nối từ các client cung cấp danh tính trước khi tunnel mã hóa được cài đặt .
-  rightauth=eap-mschapv2Tùy chọn này cấu hình phương thức xác thực mà client sẽ sử dụng để xác thực với server .eap-mschapv2được sử dụng ở đây để tương thích rộng rãi để hỗ trợ các client như thiết bị Windows, macOS và Android.
-  rightsourceip=10.10.10.0/24Tùy chọn này hướng dẫn server gán địa chỉ IP riêng cho client từ group IP10.10.10.0/24được chỉ định.
-  rightdns=8.8.8.8,8.8.4.4Cá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 server 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=neverTùy chọn này hướng dẫn server rằng các client không cần gửi certificate để tự xác thực.
  Đến đây bạn  đã quen với các tùy chọn bên phải "bắt buộc" 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ờ ta 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 user 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ợ client 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à Bộ mật mã ) mà StrongSwan sẽ cho phép các client 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ậ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 client  Windows, macOS, iOS, Android và Linux.
Tệp cấu hình hoàn chỉnh sẽ giống như sau:
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 file   khi bạn đã  xác minh  bạn đã thêm đúng 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 , sau đó ENTER .
Bây giờ ta đã cấu hình các thông số VPN, hãy chuyển sang tạo account để user của ta có thể kết nối với server .
Bước 5 - Cấu hình xác thực VPN
  Server  VPN của  ta  hiện đã được  cấu hình  để chấp nhận các kết nối client , nhưng  ta  chưa có bất kỳ thông tin đăng nhập nào được  cấu hình .  Ta   cần   cấu hình  một số thứ trong file  cấu hình đặc biệt có tên ipsec.secrets :
- Ta cần cho StrongSwan biết nơi tìm private key cho certificate server của ta , vì vậy server sẽ có thể xác thực cho khách hàng.
- Ta cũng cần cài đặt danh sách user sẽ được phép kết nối với VPN.
Hãy mở file bí mật để chỉnh sửa:
- sudo nano /etc/ipsec.secrets 
Đầu tiên, ta sẽ cho StrongSwan biết nơi tìm private key của ta và cách phân tích cú pháp.
: 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 ghi : RSA "server-key.pem" .
Sau đó, ta sẽ xác định thông tin đăng nhập của user . Bạn có thể tạo bất kỳ kết hợp tên user hoặc password nào bạn muốn :
your_username : EAP "your_password" Lưu và đóng file . Bây giờ ta đã làm việc xong với các thông số VPN, ta sẽ khởi động lại dịch vụ VPN để cấu hình của ta được áp dụng:
- sudo systemctl restart strongswan-starter 
Bây giờ server VPN đã được cấu hình đầy đủ với cả tùy chọn server và thông tin đăng nhập của user , đã đến lúc chuyển sang cấu hình phần quan trọng nhất: firewall .
Bước 6 - Cấu hình Tường lửa & Chuyển tiếp IP Nhân
Với cấu hình StrongSwan hoàn tất, ta cần cấu hình firewall để 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 cài đặt server ban đầu tiên quyết, bạn nên bật firewall UFW. Nếu bạn chưa cấu hình UFW, bạn nên bắt đầu bằng cách thêm luật cho phép kết nối SSH thông qua firewall để phiên hiện tại của bạn không đóng khi bạn bật UFW:
- sudo ufw allow OpenSSH 
Sau đó, kích hoạt firewall bằng lệnh :
- sudo ufw enable 
Sau đó, thêm  luật  để cho phép lưu lượng UDP đến các cổng IPSec tiêu chuẩn, 500 và 4500 :
- sudo ufw allow 500,4500/udp 
Tiếp theo, ta sẽ mở một trong các file cấu hình của UFW để thêm một vài policy 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 ta có thể làm điều này, ta cần tìm network interface nào trên server của 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 khai của bạn phải 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:
Outputdefault via your_server_ip dev eth0 proto static Khi bạn có  network interface  công cộng, hãy mở file  /etc/ufw/before.rules trong editor  của bạn. Các  luật  trong file  này được thêm vào firewall  trước phần còn lại của các  luật  đầu vào và  kết quả  thông thường. Chúng được sử dụng để cấu hình bản dịch địa chỉ mạng (NAT) để  server  có thể định tuyến chính xác các kết nối đến và đi từ client  và Internet.
- sudo nano /etc/ufw/before.rules 
Gần đầu file  (trước dòng *filter ), thêm  đoạn cấu hình  sau. Thay đổi từng version  của eth0 trong cấu hình trên để  trùng với  tên giao diện mà bạn tìm thấy với ip route . Các dòng *nat tạo ra các  luật  để firewall  có thể định tuyến và thao tác chính xác lưu lượng giữa các client  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 chặn các vấn đề tiềm ẩn với một số  ứng dụng client  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 các dòng định nghĩa chuỗi *filter và *filter , hãy thêm một  đoạn 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 Những dòng này yêu cầu firewall chuyển tiếp lưu lượng ESP (Encapsulation Security Payload) để các client 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 ta khi chúng truyền qua các mạng không tin cậy .
 Khi bạn hoàn tất, hãy duyệt và đóng file  khi bạn đã  xác minh  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 , sau đó ENTER .
 Trước khi khởi động lại firewall ,  ta  sẽ thay đổi một số thông số nhân mạng để cho phép định tuyến từ giao diện này sang giao diện khác. Tệp điều khiển các cài đặt này được gọi là /etc/ufw/sysctl.conf .  Ta   cần   cấu hình  một số thứ trong file  bao gồm.
Chuyển tiếp gói IPv4 đầu tiên cần được bật để lưu lượng truy cập có thể di chuyển giữa VPN và các network interface công khai trên server . Tiếp theo, ta sẽ vô hiệu hóa tính năng phát hiện Path MTU để ngăn chặn sự cố phân mảnh gói. Cuối cù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ở file  cấu hình tham số  kernel  của UFW bằng nano hoặc editor   bạn muốn :
- sudo nano /etc/ufw/sysctl.conf 
Bây giờ, hãy thêm cài đặt net/ipv4/ip_forward=1 vào cuối file  để cho phép chuyển tiếp các gói giữa các giao diện:
. . . net/ipv4/ip_forward=1 Tiếp theo, chặn gửi và nhận gói chuyển hướng ICMP bằng cách thêm các dòng sau vào cuối file :
. . . net/ipv4/conf/all/accept_redirects=0 net/ipv4/conf/all/send_redirects=0 Cuối cùng, tắt tính năng khám phá Đường dẫn MTU bằng cách thêm dòng này vào cuối file :
. . . net/ipv4/ip_no_pmtu_disc=1 Lưu file khi bạn hoàn thành. Như vậy, ta có thể bật tất cả các thay đổi của bạn bằng cách tắt và bật lại firewall , vì UFW áp dụng các cài đặt này bất kỳ lúc nào khi nó khởi động lại:
- sudo ufw disable 
- sudo ufw enable 
Bạn sẽ  được yêu cầu  xác nhận quy trình. Gõ 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
Đến đây bạn đã cài đặt mọi thứ, đã đến lúc dùng thử. Trước tiên, bạn cần sao chép certificate 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 để làm điều này là đăng nhập vào server của bạn và xuất nội dung của file certificate :
- cat /etc/ipsec.d/cacerts/ca-cert.pem 
Bạn sẽ thấy kết quả tương tự như sau:
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 file  có tên dễ nhận biết, chẳng hạn như ca-cert.pem . Đảm bảo file  bạn tạo có phần mở rộng .pem .
Ngoài ra, sử dụng SFTP để chuyển file vào máy tính của bạn .
 Khi bạn đã tải file  ca-cert.pem xuống máy tính  của bạn ,  bạn có thể cài đặt  kết nối với VPN.
Kết nối từ Windows
Có nhiều cách để nhập certificate root 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 viết mã 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 thử nghiệm trên các bản cài đặt Windows 10 chạy version  1903 và 1909.
Cấu hình Windows bằng các công cụ đồ họa
Đầu tiên, nhập certificate root theo các bước sau:
-  Nhấn WINDOWS+Rđể hiển thị hộp thoại Chạy và nhậpmmc.exeđể chạy Control panel quản lý Windows.
- Từ menu Tệp , chuyển đến Thêm hoặc Xóa phần đính kèm , chọn Chứng chỉ từ danh sách các phần bổ trợ có sẵn và nhấp vào Thêm .
- Ta muốn VPN hoạt động với mọi user , vì vậy hãy chọn Tài khoản máy tính và nhấp vào Tiếp theo .
- Ta đang cấu hình mọi thứ trên máy tính local , vì vậy hãy chọn Máy tính local , sau đó nhấp vào Kết thúc .
- Trong nút Gốc của console , hãy mở rộng mục nhập Chứng chỉ (Máy tính local ) , mở rộng Tổ chức phát hành certificate root tin cậy , sau đó chọn mục nhập Chứng chỉ : 
- Từ menu Hành động , chọn Tất cả Công việc và nhấp vào Nhập để hiển thị Trình hướng dẫn Nhập Chứng chỉ. Nhấp vào Tiếp theo để chuyển qua phần giới thiệu. 
- Trên màn hình Tệp để nhập , nhấn nút Duyệt qua , đảm bảo bạn thay đổi loại file từ “Chứng chỉ X.509 ( .cer; .crt)” thành “Tất cả file ( . )” Và chọn - ca-cert.pemfile mà bạn đã lưu. Sau đó nhấp vào Tiếp theo .
- Đảm bảo rằng Kho lưu trữ certificate được đặt thành Tổ chức phát hành certificate root tin cậy và nhấp vào Tiếp theo . 
- Nhấp vào Hoàn tất để nhập certificate . 
Sau đó, cấu hình VPN bằng các bước sau:
- Chạy Control Panel , sau đó chuyển đến Network and Sharing Center .
- Nhấp vào Cài đặt kết nối hoặc mạng mới , sau đó chọn Kết nối với nơi làm việc .
- Chọn Sử dụng kết nối Internet của tôi (VPN) .
- Nhập chi tiết server VPN. Nhập domain hoặc địa chỉ IP của server vào trường địa chỉ Internet , sau đó điền Tên đích cùng với nội dung mô tả kết nối VPN của bạn. Sau đó nhấp vào Xong .
Cấu hình Windows bằng PowerShell
 Để nhập certificate  CA root  bằng PowerShell, trước tiên hãy mở  dấu nhắc  PowerShell với  quyền  của  administrator . Để làm như vậy, hãy nhấp chuột phải vào biểu tượng menu Bắt đầu và chọn Windows PowerShell (Admin) . Bạn cũng có thể mở dấu nhắc lệnh  với quyền  là  administrator  và nhập powershell .
 Tiếp theo,  ta  sẽ nhập certificate  bằng lệnh ghép ngắn Import-Certificate PowerShell. Trong lệnh sau, đối số -CertStoreLocation đầu tiên sẽ  đảm bảo  certificate  được nhập vào repository  của Tổ chức phát hành certificate  root   tin cậy  của máy tính để tất cả các chương trình và  user  có thể xác minh certificate  của  server  VPN. Đối số -FilePath phải trỏ đến vị trí bạn đã sao chép certificate . 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 để  trùng với  vị trí mà 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ì đó giống 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 DNS hoặc địa chỉ IP của  server  của bạn trên dòng -ServerAddress . Các cờ khác nhau sẽ  đảm bảo  Windows được  cấu hình  chính xác với các thông số bảo mật phù hợp  trùng với  các tùy chọn mà 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ỳ  kết quả  nào. Để xác nhận VPN được  cấu hình  chính xác, hãy sử dụng lệnh ghép ngắn Get-VPNConnection :
- Get-VpnConnection -Name "VPN Connection" 
Bạn sẽ nhận được kết quả như sau:
OutputName                  : 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 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 nhau, bạn có thể chạy lệnh ghép ngắn 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.
Kết nối với VPN
Sau khi bạn đã nhập certificate 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 mạng. Chọn VPN và nhấp vào Kết nối . Bạn sẽ được yêu cầu nhập tên user và password của bạn . Nhập chúng vào, bấm 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 certificate :
- Bấm đúp vào file certificate . Keychain Access sẽ bật lên với hộp thoại cho biết “Keychain Access đang cố gắng sửa đổi chuỗi khóa hệ thống. Nhập password của bạn để cho phép điều này. ”
- Nhập password của bạn, sau đó nhấp vào Sửa đổi chuỗi khóa
- Bấm đúp vào certificate VPN mới được nhập. Thao tác này sẽ trả về một cửa sổ thuộc tính nhỏ, nơi bạn có thể chỉ định mức độ tin cậy. Đặt Bảo mật IP (IPSec) thành Luôn tin cậy và bạn sẽ được yêu cầu nhập lại password của bạn . Cài đặt này sẽ tự động lưu sau khi nhập password .
Bây giờ certificate đã được nhập và tin cậy , hãy cấu hình kết nối VPN theo các bước sau:
- Đi tới Tùy chọn Hệ thống và chọn Mạng .
- Nhấp vào nút “dấu cộng” nhỏ ở phía dưới bên trái của danh sách các mạng.
- Trong cửa sổ bật lên xuất hiện, đặt Giao diện thành VPN , đặt Loại VPN thành IKEv2 và đặt tên cho kết nối.
- Trong trường Server và ID từ xa , hãy nhập domain hoặc địa chỉ IP của server . Để trống Local ID .
- Nhấp vào Cài đặt xác thực , chọn Tên user và nhập tên user và password bạn đã cấu hình cho user VPN của bạn . Sau đó bấm OK .
Cuối cùng, nhấp vào Kết nối để kết nối với VPN. Đến đây 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ể cài đặt và quản lý StrongSwan như 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 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ộ nhớ cache gói local  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 bắt buộc để xác thực:
- sudo apt install strongswan libcharon-extra-plugins 
 Đến đây bạn   cần  một bản sao của certificate  CA trong folder  /etc/ipsec.d/cacerts để client  của bạn có thể xác minh danh tính của  server . Chạy lệnh sau để sao chép file  ca-cert.pem vào 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 tự động chạy:
- sudo systemctl disable --now strongswan-starter 
Tiếp theo, cấu hình tên  user  và password  mà bạn sẽ sử dụng để xác thực với  server  VPN. Chỉnh sửa /etc/ipsec.secrets bằng nano hoặc trình soạn thảo  bạn muốn :
- sudo nano /etc/ipsec.secrets 
Thêm dòng sau, chỉnh sửa giá trị tên user và password được đánh dấu để trùng với những giá trị mà bạn đã cấu hình trên server :
your_username : EAP "your_password" Cuối cùng, chỉnh sửa file  /etc/ipsec.conf để  cấu hình  client  của bạn phù hợp với cấu hình của  server :
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:
- sudo systemctl start strongswan-starter 
Để ngắt kết nối lại, hãy nhập:
- sudo systemctl stop strongswan-starter 
Sử dụng ứng dụng charon-cmd cho 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ộ nhớ cache gói local  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 bắt buộc để xác thực:
- sudo apt install strongswan libcharon-extra-plugins 
 Đến đây bạn   cần  một bản sao của certificate  CA trong folder  /etc/ipsec.d/cacerts để client  của bạn có thể xác minh danh tính của  server . Chạy lệnh sau để sao chép file  ca-cert.pem vào vị trí:
- sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts 
 Đến đây,  bạn có thể kết nối với  server  VPN bằng charon-cmd bằng certificate  CA của  server , địa chỉ IP của  server  VPN và tên  user  bạn đã  cấu hình .
Chạy lệnh sau 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 yêu cầu , hãy cung cấp password  của  user  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 cho bạn một email có đính kèm certificate root .
- Mở email trên thiết bị iOS của bạn và nhấn vào file certificate đính kèm, sau đó nhấn Cài đặt và nhập mật mã của bạn. Sau khi cài đặt xong , hãy nhấn vào Xong .
- Đi tới Cài đặt , Chung , VPN và nhấn Thêm cấu hình VPN . 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 Loại và chọn IKEv2 .
- Trong trường Mô tả , hãy 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.
- Trong trường Server và ID từ xa , hãy nhập domain hoặc địa chỉ IP của server . Trường Local ID có thể được để trống.
- Nhập tên user và password của bạn vào phần Xác thực , sau đó chạm vào Xong .
- Chọn kết nối VPN mà bạn vừa tạo, chạm vào lựa chọn ở đầ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 certificate :
- Gửi cho bạn một email có đính kèm certificate CA. Lưu certificate CA vào folder download của bạn.
- Download ứng dụng client StrongSwan VPN từ Cửa hàng Play.
- 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 chứng chỉ CA.
- Nhấn lại vào biểu tượng “thêm” ( … ) ở góc trên bên phải. Chọn Nhập certificate .
- Duyệt đến file certificate CA trong folder download của bạn và chọn file đó để nhập vào ứng dụng.
Bây giờ certificate đã được nhập vào ứng dụng StrongSwan, bạn có thể cấu hình kết nối VPN bằng các bước sau:
- Trong ứng dụng, hãy nhấn vào THÊM HỒ SƠ VPN ở trên cùng.
- Điền vào Server bằng domain của server VPN hoặc địa chỉ IP công cộng của bạn.
- Đảm bảo IKEv2 EAP (Tên user / Mật khẩu) được chọn làm Loại VPN.
- Điền Tên user và Mật khẩu với thông tin đăng nhập bạn đã xác định trên server .
- Bỏ chọn Chọn tự động trong phần chứng chỉ CA và nhấp vào Chọn certificate CA.
- Nhấn vào tab ĐÃ NHẬP ở đầu màn hình và chọn CA bạn đã nhập (nó sẽ được đặt tên là “VPN root CA” nếu bạn không thay đổi “DN” trước đó).
- Nếu bạn muốn, hãy điền vào Tên profile (tùy chọn) với 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 profile 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 certificate , hãy đảm bảo file  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  server  hoặc địa chỉ IP bạn đã sử dụng. Tên domain  hoặc địa chỉ IP của  server  phải  trùng với  những gì bạn đã  cấu hình  làm tên chung (CN) trong khi tạo certificate . 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  cài đặt  certificate  với CN của vpn.example.com , bạn phải sử dụng vpn.example.com khi nhập chi tiết  server  VPN. Kiểm tra kỹ lệnh bạn đã sử dụng để tạo certificate  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  cấu hình  với ký hiệu @ nếu bạn đang sử dụng domain :
    leftid=@vpn.example.com Nếu bạn đang sử dụng địa chỉ IP, hãy  đảm bảo  ký hiệu @ được bỏ qua. Ngoài ra, hãy  đảm bảo  khi bạn tạo file  server-cert.pem , bạn đã bao gồm 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  server  VPN sử dụng giao thức IKEv2. Bạn đã học về các lệnh điều khiển left và right của kết nối trên cả  server  và client . Bạn cũng đã  cấu hình   ứng dụng client  Windows, macOS, iOS, Android hoặc Linux để kết nối với VPN.
 Để thêm hoặc xóa  user , hãy chuyển sang Bước 5   . Mỗi dòng trong /etc/ipsec.secrets dành cho một  user , vì vậy việc thêm hoặc xóa  user  hoặc thay đổi password  chỉ cần chỉnh sửa file .
Như vậy, bạn có thể yên tâm rằng các hoạt động trực tuyến của bạn sẽ vẫn an toàn dù bạn đi đâu và với bất kỳ thiết bị nào bạn sử dụng để truy cập internet.
Các tin liên quan
Cách tạo server Ebook tầm cỡ trên Ubuntu 14.042020-09-11
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Ubuntu 20.04
2020-07-23
Cách bật tính năng hiển thị phía server cho ứng dụng React
2020-07-14
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Ubuntu 18.04
2020-07-06
Cách thiết lập Nền tảng Cloud IDE server mã trên CentOS 7
2020-06-12
Cách thiết lập Nền tảng Cloud IDE server mã trên Debian 10
2020-06-11
Sử dụng Grep & Biểu thức chính quy để tìm kiếm các mẫu văn bản trong Linux
2020-06-05
Cách sử dụng ngôn ngữ AWK để thao tác văn bản trong Linux
2020-05-26
Cách thiết lập Nền tảng Cloud IDE server mã trên Ubuntu 20.04
2020-05-20
Sedan trung gian: Thao tác các dòng văn bản trong môi trường Linux
2020-05-19
 

