Wireguard là một triển khai VPN đa nền tảng mã nguồn mở sử dụng công nghệ mật mã tiên tiến. Nó nhanh hơn, đơn giản hơn và có nhiều chức năng hơn so với các giao thức IPSec và OpenVPN. Nó được thiết kế như một VPN mục đích chung để chạy trên các giao diện nhúng và siêu máy tính và chạy trên Linux, Windows, macOS, iOS, Android, BSD và nhiều nền tảng khác.
Hướng dẫn này sẽ trình bày cách cài đặt Wireguard VPN trên máy chủ chạy CentOS 8 và cách kết nối với máy chủ đó bằng máy khách Linux (CentOS/Fedora/Ubuntu).
Chúng tôi cũng đã bật kho lưu trữ PowerTools vì các gói EPEL phụ thuộc vào nó.
Cài đặt Wireguard.
Bước này cũng cài đặt GNU Trình biên dịch GCC cần thiết để xây dựng các mô-đun Linux Kernel.
Lệnh Touch tạo tệp
Tiếp theo, tạo cặp khóa riêng tư/công khai cho máy chủ Wireguard.
Điều này tạo ra cả khóa công khai và khóa riêng cho Wireguard và ghi chúng vào các tệp tương ứng.
Xem khóa riêng mà chúng ta vừa tạo.
Ghi lại khóa và sao chép vì chúng ta sẽ cần khóa này để cấu hình Wireguard.
Tiếp theo, chỉnh sửa tệp cấu hình.
Thêm mã sau.
Mỗi cấu hình có một phần được gọi là
Nó chứa khóa riêng của máy chủ WireGuard cục bộ, cổng UDP mà nó sẽ lắng nghe các kết nối đến và địa chỉ IP VPN của riêng nó.
Chúng tôi cũng đặt
Nhấn Ctrl + W để đóng tệp và nhập Y khi được nhắc lưu tệp.
Đầu tiên, chúng ta cần xác định dịch vụ Wireguard cho tường lửa. Để thực hiện việc đó, hãy tạo tệp
Dán mã sau vào tệp.
Nhấn Ctrl + W để đóng tệp và nhập Y khi được nhắc lưu tệp.
Tiếp theo, hãy bật dịch vụ Wireguard trong tường lửa.
Bật ngụy trang để mọi lưu lượng truy cập đến và đi từ 192.168.10.0/24 được định tuyến qua địa chỉ IP công khai của máy chủ 203.1.114.98/24.
Cuối cùng, tải lại tường lửa để kích hoạt các quy tắc.
Liệt kê các quy tắc tường lửa hiện tại để xác nhận.
Dán mã sau vào tệp.
Nhấn Ctrl + W để đóng tệp và nhập Y khi được nhắc lưu tệp.
Phạm vi của mã trong tệp ở trên nằm ngoài phạm vi của hướng dẫn này nên hiện tại, chỉ cần sử dụng nó như vậy.
Tải lại các thay đổi.
Theo mặc định, tường lửa sẽ không cho phép giao diện
Bạn có thể xác minh xem giao diện Wireguard,
Sau khi cài đặt client, bạn cần tạo tệp cấu hình client.
Lưu ý khóa riêng bạn nhận được ở cuối. Tiếp theo, chúng ta cần chỉnh sửa tệp cấu hình vừa tạo.
Thêm các chỉ thị sau vào tệp.
Lưu ý rằng chúng tôi đã gán IP riêng 192.168.10.1 cho máy chủ và 192.168.10.2 cho máy khách. Chúng tôi cũng đã thêm khóa riêng của máy khách vào tệp.
Phần
Nhấn Ctrl + W để đóng tệp và nhập Y khi được nhắc lưu tệp.
Bây giờ là lúc bật và khởi động máy khách VPN.
Trước tiên, hãy dừng dịch vụ Wireguard.
Mở tệp wg0.conf để chỉnh sửa.
Thêm đoạn mã sau vào cuối tệp.
Nhấn Ctrl + W để đóng tệp và nhập Y khi được nhắc lưu tệp.
Các phần
Chúng chứa khóa công khai của chúng, khóa này phải khớp với khóa riêng của các đối tác trong phần
Lưu ý rằng bất kỳ kết nối đến nào trước tiên đều được xác thực bằng một trong các khóa công khai. Nếu kết nối không đến từ đối tác đã xác minh, các gói tin đến sẽ chỉ bị bỏ qua một cách thầm lặng. Vì các kết nối từ các máy chủ không sở hữu khóa riêng khớp sẽ không được trả lời, nên VPN WireGuard không chỉ cung cấp giao tiếp được mã hóa mà còn ẩn khỏi những người bên ngoài.
Khởi động lại dịch vụ Wireguard.
Hướng dẫn này sẽ trình bày cách cài đặt Wireguard VPN trên máy chủ chạy CentOS 8 và cách kết nối với máy chủ đó bằng máy khách Linux (CentOS/Fedora/Ubuntu).
Bước 1 - Cập nhật hệ thống
Trước khi tiến hành thêm, điều bắt buộc là phải cập nhật hệ thống của bạn để cài đặt các bản cập nhật mới nhất.
Mã:
$ sudo dnf update
Bước 2 - Cài đặt và kích hoạt kho EPEL
Các gói Wireguard cần thiết có thể được tìm thấy trong kho EPEL nên chúng ta cần cài đặt và kích hoạt nó.
Mã:
$ sudo dnf install epel-release$ sudo dnf config-manager --set-enabled PowerTools
Bước 3 - Cài đặt Wireguard
Bật kho lưu trữ Wireguard.
Mã:
$ sudo dnf copr enable jdoss/wireguard
Mã:
$ sudo dnf install wireguard-dkms wireguard-tools
Bước 4 - Cấu hình Máy chủ Wireguard
Tạo một tệp cấu hình trống trên máy chủ cho các thiết lập Wireguard với các quyền thích hợp.
Mã:
$ sudo mkdir /etc/wireguard$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
wg0-server.conf
trong thư mục /etc/wireguard
.Tiếp theo, tạo cặp khóa riêng tư/công khai cho máy chủ Wireguard.
Mã:
$ cd /etc/wireguard$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
Xem khóa riêng mà chúng ta vừa tạo.
Mã:
$ sudo cat privatekey
Tiếp theo, chỉnh sửa tệp cấu hình.
Mã:
$ sudo nano /etc/wireguard/wg0.conf
Mã:
[Giao diện]## Địa chỉ IP riêng của máy chủ VPN ##Địa chỉ = 192.168.10.1/24## Cổng máy chủ VPN - Bạn có thể chọn bất kỳ cổng nào ##ListenPort = 37822## Khóa riêng của máy chủ VPN tức là /etc/wireguard/privatekey - khóa ở trên ##PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=## Lưu và cập nhật tệp cấu hình này khi có đối tác mới (máy khách VPN) được thêm vào ##SaveConfig = true
[Giao diện]
, trong đó phần máy chủ được định nghĩa.Nó chứa khóa riêng của máy chủ WireGuard cục bộ, cổng UDP mà nó sẽ lắng nghe các kết nối đến và địa chỉ IP VPN của riêng nó.
Chúng tôi cũng đặt
SaveConfig
thành true
. Thao tác này sẽ yêu cầu dịch vụ Wireguard tự động lưu cấu hình đang hoạt động của nó vào tệp này khi tắt máy.Nhấn Ctrl + W để đóng tệp và nhập Y khi được nhắc lưu tệp.
Bước 5 - Cấu hình Tường lửa
Chúng ta cần mở cổng đã chọn cho Wireguard.Đầu tiên, chúng ta cần xác định dịch vụ Wireguard cho tường lửa. Để thực hiện việc đó, hãy tạo tệp
wireguard.xml
bằng trình chỉnh sửa Nano.
Mã:
$ sudo nano /etc/firewalld/services/wireguard.xml
Mã:
wireguard WireGuard mở cổng UDP 37822 cho kết nối máy khách
Tiếp theo, hãy bật dịch vụ Wireguard trong tường lửa.
Mã:
$ sudo firewall-cmd --permanent --add-service=wireguard
Mã:
$ sudo firewall-cmd --permanent --add-masquerade
Mã:
$ sudo firewall-cmd --reload
Mã:
$ sudo firewall-cmd --list-allpublic (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:
Bước 6 - Bật Chuyển tiếp IPv4
Tạo tệp/etc/sysctl.d/99-custom.conf
.
Mã:
$ sudo nano /etc/sysctl.d/99-custom.conf
Mã:
## Bật bbr ##net.core.default_qdisc = fqnet.ipv4.tcp_congestion_control = bbr## cho IPv4 ##net.ipv4.ip_forward = 1## Bật bảo vệ/bảo mật cơ bản ##net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.all.rp_filter = 1net.ipv4.tcp_syncookies = 1## cho IPv6 ##net.ipv6.conf.all.forwarding = 1
Phạm vi của mã trong tệp ở trên nằm ngoài phạm vi của hướng dẫn này nên hiện tại, chỉ cần sử dụng nó như vậy.
Tải lại các thay đổi.
Mã:
$ sudo sysctl -p /etc/sysctl.d/99-custom.conf
wg0
và eth0
giao tiếp với nhau. Vì vậy, chúng ta cần thêm giao diện Wireguard vào mạng nội bộ và bật chế độ ngụy trang.
Mã:
$ sudo firewall-cmd --add-interface=wg0 --zone=internal$ sudo firewall-cmd --permanent --zone=internal --add-masquerade
Bước 7 - Bật và khởi động dịch vụ Wireguard
Tiếp theo, chúng ta cần bật và khởi động dịch vụ Wireguard.
Mã:
$ sudo systemctl enable wg-quick@wg0$ sudo systemctl start wg-quick@wg0
wg0
có đang hoạt động hay không bằng cách sử dụng lệnh sau.
Mã:
$ sudo wginterface: wg0 khóa công khai: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI= khóa riêng: (ẩn) cổng lắng nghe: 37822$ sudo ip a show wg03: wg0:
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
Bước 8 - Cài đặt và cấu hình WireGuard Client
Bạn có thể tìm hướng dẫn cài đặt Wireguard client cho bản phân phối Linux của mình từ trang cài đặt chính thức của họ.Sau khi cài đặt client, bạn cần tạo tệp cấu hình client.
Mã:
$ 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
Mã:
$ sudo nano /etc/wireguard/wg0.conf
Mã:
[Giao diện]## khóa riêng của máy khách ##PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=## địa chỉ IP của máy khách ##Địa chỉ = 192.168.10.2/24[Peer]## khóa công khai của máy chủ CentOS 8 ##PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=## set ACL ##AllowedIPs = 192.168.10.0/24## Địa chỉ IPv4/IPv6 công khai và cổng của máy chủ CentOS 8 của bạn ##Điểm cuối = 203.1.114.98:37822## Kết nối khóa còn hoạt động ##PersistentKeepalive = 15
Phần
[Peer]
là nơi bạn nhập cấu hình máy chủ mà máy khách sẽ kết nối tới. Ở đây chúng tôi đã thêm khóa công khai, IP công khai và một tập hợp các IP được phép chứa IP riêng của máy chủ của chúng tôi. PersistentKeepalive
yêu cầu WireGuard gửi một gói UDP sau mỗi 15 giây, điều này hữu ích nếu bạn đang ở phía sau NAT và muốn duy trì kết nối.Nhấn Ctrl + W để đóng tệp và nhập Y khi được nhắc lưu tệp.
Bây giờ là lúc bật và khởi động máy khách VPN.
Mã:
$ sudo systemctl enable wg-quick@wg0$ sudo systemctl start wg-quick@wg0$ sudo systemctl status wg-quick@wg0
Bước 9 - Cấu hình máy chủ để thêm máy khách
Bây giờ, chúng ta cần thêm cấu hình máy khách vào máy chủ một lần nữa để cho máy chủ biết về máy khách.Trước tiên, hãy dừng dịch vụ Wireguard.
Mã:
$ sudo systemctl stop wg-quick@wg0
Mã:
$ sudo nano /etc/wireguard/wg0.conf
Mã:
[Peer]## khóa công khai VPN của máy khách ##PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=## địa chỉ IP VPN của máy khách (lưu ý /32 mạng con) ##AllowedIPs = 192.168.10.2/32
Các phần
[Peer]
xác định các thành viên khác của mạng VPN. Bạn có thể thêm bao nhiêu tùy ý.Chúng chứa khóa công khai của chúng, khóa này phải khớp với khóa riêng của các đối tác trong phần
[Giao diện]
của chúng.Lưu ý rằng bất kỳ kết nối đến nào trước tiên đều được xác thực bằng một trong các khóa công khai. Nếu kết nối không đến từ đối tác đã xác minh, các gói tin đến sẽ chỉ bị bỏ qua một cách thầm lặng. Vì các kết nối từ các máy chủ không sở hữu khóa riêng khớp sẽ không được trả lời, nên VPN WireGuard không chỉ cung cấp giao tiếp được mã hóa mà còn ẩn khỏi những người bên ngoài.
Khởi động lại dịch vụ Wireguard.
Mã:
$ sudo systemctl start wg-quick@wg0
Bước 10 - Kiểm tra
Chúng ta hãy kiểm tra xem cả máy khách và máy chủ có được kết nối an toàn bằng VPN hay không. Để kiểm tra kết nối, hãy chạy các lệnh sau trên máy khách của bạn.
Mã:
$ ping -c 192.168.10.1PING 192.168.10.1 (192.168.10.1) 56(84) byte dữ liệu.64 byte từ 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms64 byte từ 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms64 byte từ 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms64 byte từ 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms--- Thống kê ping 192.168.10.1 ---4 gói đã truyền, 4 gói đã nhận, 0% mất gói, thời gian 2800msrtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms$ sudo wginterface: wg0 public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA= private key: (ẩn) listening port:peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI= endpoint: 203.1.114.98:37822 allowed ips: 192.168.10.0/24 latest handshake: 1 phút, 40 giây trước transfer: 938 B received, 45.67 KiB sent persistent: keepalive: every 15 seconds