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