1. Giới thiệu

Ở bài trước, mình có giới thiệu cách cấu hình IPSec Site-to-Site VPN Connection để kết nối 2 VPC với nhau hoặc on-premise với VPC một cách bảo mật.

(Xem ở bài https://blog.daovanhung.com/post/cau-hinh-site-to-site-vpn-trong-aws-su-dung-ipsec)

So với việc cấu hình IPSec phức tạp thì OpenVPN cũng là một kỹ thuật sử dụng VPN nhưng đơn giản hơn và bảo mật hơn.

Để sử dụng OpenVPN, bạn cần 2 thứ sau:

  • Chuẩn bị OpenVPN server cho client kết nối tới, server này sẽ đóng vai trò như một Bastion host nhưng sử dụng VPN tunnel nên bảo mật hơn Bastion host.
  • Cài đặt VPN client trên từng máy client để có thể kết nối tới OpenVPN server, thông qua đó để kết nối tới các private server.

 

2. Cấu hình OpenVPN server

  • Tạo một EC2 instance sử dụng OpenVPN từ AWS Marketplace:

Tạo OpenVPN server trong AWS

Mình sẽ tạo nó trong public subnet và có public IP:

OpenVPN server trong AWS

 

Chú ý: OpenVPN server phải cho phép các cổng sau được mở nên bạn cần cấu hình Security Group và Network ACL cho hợp lý:

  • SSH cổng 22
  • HTTPS cổng 443
  • TCP cổng 943
  • TCP cổng 945
  • UDP cổng 1194
  • Sau khi tạo xong OpenVPN server, mình sẽ truy cập vào để cài đặt:

Chú ý là phải dùng username là openvpnas chứ không phải là ec2-user như thông thường

$ ssh -i ~/.ssh/privateKey.pem [email protected]

 

  • Khi vào OpenVPN server, nó sẽ yêu cầu bạn cấu hình như sau:
Please enter 'yes' to indicate your agreement [no]: yes

Once you provide a few initial configuration settings,
OpenVPN Access Server can be configured by accessing
its Admin Web UI using your Web browser.

Will this be the primary Access Server node?
(enter 'no' to configure as a backup or standby node)
> Press ENTER for default [yes]: 

Please specify the network interface and IP address to be
used by the Admin Web UI:
(1) all interfaces: 0.0.0.0
(2) eth0: 172.31.4.62
Please enter the option number from the list above (1-2).
> Press Enter for default [1]: 1

Please specify the port number for the Admin Web UI.
> Press ENTER for default [943]: 

Please specify the TCP port number for the OpenVPN Daemon
> Press ENTER for default [443]: 

Should client traffic be routed by default through the VPN?
> Press ENTER for default [no]: 

Should client DNS traffic be routed by default through the VPN?
> Press ENTER for default [no]: 

Use local authentication via internal DB?
> Press ENTER for default [yes]: 

Private subnets detected: ['172.31.0.0/16']

Should private subnets be accessible to clients by default?
> Press ENTER for EC2 default [yes]: 

To initially login to the Admin Web UI, you must use a
username and password that successfully authenticates you
with the host UNIX system (you can later modify the settings
so that RADIUS or LDAP is used for authentication instead).

You can login to the Admin Web UI as "openvpn" or specify
a different user account to use for this purpose.

Do you wish to login to the Admin UI as "openvpn"?
> Press ENTER for default [yes]: no

> Specify the username for an existing user or for the new user account: hungdv
Type the password for the 'hungdv' account:
Confirm the password for the 'hungdv' account:

> Please specify your Activation key (or leave blank to specify later): 



Initializing OpenVPN...
...

Initial Configuration Complete!

You can now continue configuring OpenVPN Access Server by
directing your Web browser to this URL:

https://54.178.16.168:943/admin
Login as "hungdv" with the same password used to authenticate
to this UNIX host.

During normal operation, OpenVPN AS can be accessed via these URLs:
Admin  UI: https://54.178.16.168:943/admin
Client UI: https://54.178.16.168:943/

See the Release Notes for this release at:
   https://openvpn.net/vpn-server-resources/release-notes/

 

  • Cấu hình như trên xong thì bạn vào url kết quả như trên để kiểm tra (https://54.178.16.168:943/admin). Màn hình admin hiện ra, mình sẽ điền username và password như khi cấu hình:

Username, password OpenVPN server

Đăng nhập thành công, vì là bản dùng miễn phí nên OpenVPN chỉ giới hạn cho 2 kết nối tới:

OpenVPN server trong AWS

 

Trên đây ta đã tạo OpenVPN server xong, tiếp theo ta cần kết nối client tới OpenVPN để có thể truy cập vào private instance:

 

3. Cấu hình OpenVPN Connect Client

OpenVPN connect client URL

  • Nhập username và password của OpenVPN server 

openVPN client username và password

  • Connect vào là sẽ thành công:

connect to OpenVPN server

  • Tiếp theo, mình sẽ tạo một private instance nằm trong private subnet không có public IP:

private instance with OpenVPN

private instance này chỉ nhận SSH 22 từ OpenVPN server và không cần cấu hình outbound: 172.31.4.62/32 là IP của OpenVPN server mới tạo ở trên

SG Inbound của private instance khi sử dụng OpenVPN

 

  • Kết nối thử vào private instance dùng private IP:
hungdvnoMacBook-Pro:~ hungdv$ ssh -i ~/.ssh/privateKey.pem [email protected]
Last login: Sun Mar 14 10:00:04 2021 from ip-172-31-4-62.ap-northeast-1.compute.internal

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[[email protected] ~]$ 

 

Như bạn thấy kết quả, ta đã có thể SSH vào private instance.