Hướng dẫn cài đặt Wireguard VPN trên Centos 8

Giới thiệu Wireguard #

Wireguard là một công cụ mã nguồn mở cho phép bạn triển khai VPN với các thuật toán mã hoá hiện đại. Nó nhanh hơn, cài đặt và chỉnh sửa dễ dàng hơn so với IPSec và OpenVPN. Trong bài viết này, mình sẽ hướng dẫn bạn cách cài đặt Wireguard VPN trên CentOS 8 và kết nối tới bằng một Linux Client. 

Cập nhật hệ thống #

Trước khi thực hiện cài đặt, bạn cần cập nhật hệ thống để các công cụ lên phiên bản mới nhất:

$ sudo dnf update

Cài đặt EPEL repo #

Tiếp theo, để tải về được Wireguard, bạn cần phải cài đặt và kích hoạt EPEL repository:

$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools

Cài đặt Wireguard #

Kích hoạt Wireguard repository:

$ sudo dnf copr enable jdoss/wireguard

Cài đặt Wireguard từ repository:

$ sudo dnf install wireguard-dkms wireguard-tools

Cấu hình Wireguard Server #

Đầu tiên, bạn cần phải tạo file cấu hình và gán quyền phù hợp:

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'

Tiếp theo, cần tạo cặp khoá để xác thực trên Server:

$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'

Tiếp theo, cần thêm một số cấu hình vào file cấu hình:

$ sudo vi /etc/wireguard/wg0.conf

Thêm đoạn sau:

[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
 
## VPN server port - You can choose any port ##
ListenPort = 37822
 
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
 
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true

Trong đó, PrivateKey được lấy bằng cách sử dụng đoạn lệnh sau:

cat /etc/wireguard/privatekey

Cấu hình tường lửa #

Bạn cần phải mở port trên Firewalld để có thể cho phép Wireguard tiếp nhận các request từ ngoài Internet vào. Để làm điều đó, bạn tạo file sau:

$ sudo vi /etc/firewalld/services/wireguard.xml

Sau đó paste đoạn cấu hình sau:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>wireguard</short>
  <description>WireGuard open UDP port 37822 for client connections</description>
  <port protocol="udp" port="37822"/>
</service>

Lưu lại thay đổi và kích hoạt Wireguard service trên firewall như bên dưới:

$ sudo firewall-cmd --permanent --add-service=wireguard

Sau đó, bạn cần kích hoạt chế độ Masquerading để các lưu lượng mạng từ bên trong có thể được ra ngoài mạng với địa chỉ IP Public của Server:

$ sudo firewall-cmd --permanent --add-masquerade

Cuối cùng là reload lại firewalld:

$ sudo firewall-cmd --reload

Kiểm tra lại các cấu hình firewalld:

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: wireguard ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Kích hoạt IPv4 Forwarding #

Tạo file /etc/sysctl.d/99-custom.conf:

$ sudo vi /etc/sysctl.d/99-custom.conf

Với nội dung file như sau:

## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
 
## for IPv4 ##
net.ipv4.ip_forward = 1
 
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1

## for IPv6 ##
net.ipv6.conf.all.forwarding = 1

Lưu lại file và thực hiện cập nhật thay đổi:

$ sudo sysctl -p /etc/sysctl.d/99-custom.conf

Mặc định, Firewalld sẽ không cho phép hai Interface là wg0 và eth0 có thể giao tiếp được với nhau. Vì vậy nên bạn cần phải thêm Wireguard Interface vào cùng một zone với eth0 như sau:

$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade

Kích hoạt và bật Wireguard Service #

Để Wireguard có thể tự bật cùng hệ thống, bạn cần phải kích hoạt như bên dưới:

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0

Kiểm tra lại trạng thái bằng các câu lệnh dưới:

$ sudo wg
interface: wg0
  public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  private key: (hidden)
  listening port: 37822

$ sudo ip a show wg0
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.10.1/24 scope global wg0
       valid_lft forever preferred_lft forever

Cài đặt và cấu hình Wireguard Client #

Để cài đặt Wireguard Client trên các hệ điều hành như Windows, Linux, macOS, bạn hãy tham khảo hướng dẫn tại đây.

Trong bài viết này, mình sẽ hướng dẫn mọi người cấu hình Wireguard Client trên hệ điều hành Linux. Trước hết, bạn cần phải tạo file cấu hình bên Client:

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey

Từ bước trên, bạn đã có được Private Key của Client, sử dụng Private Key đó cho cấu hình file bên dưới:

$ sudo vi /etc/wireguard/wg0.conf

Với nội dung file là:

[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
 
## client ip address ##
Address = 192.168.10.2/24
 
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
 
## set ACL ##
AllowedIPs = 192.168.10.0/24
 
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
 
##  Key connection alive ##
PersistentKeepalive = 15

Theo như cấu hình trên, mình đã gán private IP 192.168.10.1 cho phía Server và 192.168.10.2 cho phía Client. Ngoài ra, mình cũng sử dụng Private Key của Client và Public Key của Server.

Lưu lại cài đặt và thực hiện bật Wireguard Client:

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0

Thêm Client mới trên Server #

Ở trên mình đã hướng dẫn bạn cấu hình ở phía Client, tiếp theo cần phải cấu hình ở phía Server để thêm mới một Client. Trước hết cần tắt Wireguard trên Server:

$ sudo systemctl stop wg-quick@wg0

Sau đó chỉnh sửa file wg0.conf:

$ sudo vi /etc/wireguard/wg0.conf

Với đoạn cấu hình sau:

[Peer] 
## client VPN public key ## 
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=  

## client VPN IP address (note /32 subnet) ## 
AllowedIPs = 192.168.10.2/32

Trong đó:

  • PublicKey được lấy từ bên Client.
  • AllowedIPs là Private IP của Client được gán khi join vào VPN.

Lưu lại cấu hình và bật lại:

$ sudo systemctl start wg-quick@wg0

Kiểm tra kết nối #

Sau khi cấu hình tất cả các bước hoàn tất, bạn hãy kiểm tra lại kết nối từ Client tới Server như sau:

$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms

--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms

$ sudo wg
interface: wg0
  public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA= 
  private key: (hidden)
  listening port: 
 
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  endpoint: 203.1.114.98:37822
  allowed ips: 192.168.10.0/24
  latest handshake: 1 minute, 40 seconds ago
  transfer: 938 B received, 45.67 KiB sent
  persistent: keepalive: every 15 seconds

Kết luận #

Ở trên mình đã hướng dẫn bạn đọc thực hiện cài đặt Wireguard làm VPN trên CentOS 8. Việc cài đặt và cấu hình khá dễ dàng so với các công cụ VPN khác. Cuối cùng cảm ơn bạn đọc đã theo dõi, bất kì thắc mắc nào vui lòng bình luận bên dưới để mình giúp đỡ nhé.

Nguồn bài viết: https://www.howtoforge.com

Mình là Tùng, hiện đang là DevOps tại Công Ty CP EcoIT. Với kinh nghiệm có được từ trong công việc, mình muốn chia sẻ cho bạn đọc cùng biết và cùng nhau học thêm nhiều điều mới trong lĩnh vực DevOps.

Powered by BetterDocs

Để lại bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *