Thứ năm, 09/11/2017 | 00:00 GMT+7

Cách tạo VPN điểm-điểm với WireGuard trên Ubuntu 16.04

WireGuard là một VPN hiện đại, hiệu suất cao được thiết kế để dễ sử dụng đồng thời cung cấp khả năng bảo mật mạnh mẽ. WireGuard chỉ tập trung vào việc cung cấp kết nối an toàn giữa các bên qua network interface được mã hóa bằng xác thực public key . Điều này nghĩa là , không giống như hầu hết các VPN, không có cấu trúc liên kết nào được thực thi để có thể đạt được các cấu hình khác nhau bằng cách thao tác với cấu hình mạng xung quanh. Mô hình này cung cấp sức mạnh tuyệt vời và tính linh hoạt có thể được áp dụng theo nhu cầu cá nhân của bạn.

Một trong những cấu trúc liên kết đơn giản nhất mà WireGuard có thể sử dụng là kết nối điểm-điểm. Điều này cài đặt một liên kết an toàn giữa hai máy mà không cần trung gian của một server trung tâm. Loại kết nối này cũng được dùng giữa nhiều hơn hai thành viên để cài đặt cấu trúc liên kết VPN dạng lưới, nơi mỗi server riêng lẻ có thể nói chuyện trực tiếp với các server của nó. Bởi vì mỗi server đều ngang hàng nhau, hai cấu trúc liên kết này phù hợp nhất để cài đặt thông điệp an toàn giữa các server thay vì sử dụng một server duy nhất làm cổng để định tuyến lưu lượng truy cập.

Trong hướng dẫn này, ta sẽ trình bày cách cài đặt kết nối VPN điểm-điểm với WireGuard bằng hai server Ubuntu 16.04. Ta sẽ bắt đầu bằng cách cài đặt phần mềm và sau đó tạo các cặp khóa mật mã cho mỗi server . Sau đó, ta sẽ tạo một file cấu hình ngắn để xác định thông tin kết nối ngang hàng. Khi ta khởi động giao diện, ta sẽ có thể gửi các tin nhắn an toàn giữa các server qua giao diện WireGuard.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần truy cập vào hai server Ubuntu 16.04. Trên mỗi server , bạn cần tạo một user không phải root với các quyền sudo để thực hiện các hành động quản trị. Bạn cũng cần một firewall cơ bản được cấu hình trên mỗi hệ thống. Bạn có thể đáp ứng các yêu cầu này bằng cách hoàn thành hướng dẫn sau:

Khi đã sẵn sàng để tiếp tục, hãy đăng nhập vào từng server bằng user sudo của bạn.

Cài đặt phần mềm

Dự án WireGuard cung cấp PPA với các gói cập nhật cho hệ thống Ubuntu. Ta cần cài đặt WireGuard trên cả hai server của bạn trước khi có thể tiếp tục. Trên mỗi server , hãy thực hiện các hành động sau.

Đầu tiên, thêm WireGuard PPA vào hệ thống để cấu hình quyền truy cập vào các gói của dự án:

  • sudo add-apt-repository ppa:wireguard/wireguard

Nhấn ENTER khi được yêu cầu thêm nguồn gói mới vào cấu hình apt của bạn. Khi PPA đã được thêm, hãy cập nhật index gói local để kéo xuống thông tin về các gói mới có sẵn và sau đó cài đặt module kernel WireGuard và các thành phần vùng user :

  • sudo apt-get update
  • sudo apt-get install wireguard-dkms wireguard-tools

Tiếp theo, ta có thể bắt đầu cấu hình WireGuard trên mỗi server của bạn .

Tạo private key

Mỗi người tham gia trong WireGuard VPN xác thực với các đồng nghiệp của nó bằng mật mã public key . Kết nối giữa các đồng nghiệp mới có thể được cài đặt bằng cách trao đổi các public key và thực hiện cấu hình tối thiểu.

Để tạo private key và ghi trực tiếp vào file cấu hình WireGuard, hãy nhập thông tin sau trên mỗi server :

  • (umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
  • wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey

Lệnh đầu tiên ghi nội dung ban đầu của file cấu hình vào /etc/wireguard/wg0.conf . Giá trị umask trong một sub-shell để ta tạo file với các quyền hạn chế mà không ảnh hưởng đến môi trường thông thường của ta .

Lệnh thứ hai tạo private key bằng lệnh wg của WireGuard và ghi trực tiếp vào file cấu hình hạn chế của ta . Ta cũng đưa khóa trở lại lệnh wg pubkey để lấy public key được liên kết, ta ghi khóa này vào một file có tên /etc/wireguard/publickey để dễ dàng tham khảo. Ta cần trao đổi khóa trong file này với server thứ hai khi ta xác cấu hình của bạn .

Tạo file cấu hình ban đầu

Tiếp theo, ta sẽ mở file cấu hình trong editor để cài đặt một số chi tiết khác:

  • sudo nano /etc/wireguard/wg0.conf

Bên trong, bạn sẽ thấy private key đã tạo của bạn được xác định trong một phần có tên là [Interface] . Phần này chứa cấu hình cho phía local của kết nối.

Cấu hình Phần giao diện

Ta cần xác định địa chỉ IP VPN mà nút này sẽ sử dụng và cổng mà nó sẽ lắng nghe các kết nối từ các đồng nghiệp. Bắt đầu bằng cách thêm ListenPortSaveConfig dòng để các file của bạn trông như thế này:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = generated_private_key ListenPort = 5555 SaveConfig = true 

Điều này đặt cổng mà WireGuard sẽ lắng nghe. Đây có thể là bất kỳ cổng nào miễn phí, có thể ràng buộc, nhưng trong hướng dẫn này, ta sẽ cài đặt VPN của bạn trên cổng 5555 cho cả hai server . Đặt ListenPort trên mỗi server lưu trữ thành cổng bạn đã chọn:

Ta cũng đặt SaveConfig thành true . Thao tác này sẽ thông báo cho dịch vụ wg-quick tự động lưu cấu hình đang hoạt động của nó vào file này khi tắt máy.

Lưu ý: Khi SaveConfig , dịch vụ wg-quick sẽ overrides nội dung của file /etc/wireguard/wg0.conf khi nào dịch vụ tắt. Nếu bạn cần sửa đổi cấu hình WireGuard, hãy tắt dịch vụ wg-quick trước khi chỉnh sửa file /etc/wireguard/wg0.conf hoặc áp dụng các thay đổi đối với dịch vụ đang chạy bằng lệnh wg (những thay đổi này sẽ được lưu trong khi dịch vụ tắt). Bất kỳ thay đổi nào được thực hiện đối với file cấu hình trong khi dịch vụ đang chạy sẽ bị overrides khi wg-quick lưu trữ cấu hình đang hoạt động của nó.

Tiếp theo, thêm định nghĩa Address duy nhất cho mỗi server để dịch vụ wg-quick có thể cài đặt thông tin mạng khi nó hiển thị giao diện WireGuard. Ta sẽ sử dụng mạng con 10.0.0.0/24 làm không gian địa chỉ cho VPN của bạn . Đối với mỗi máy tính, bạn cần chọn một địa chỉ duy nhất trong phạm vi này (10.0.0.1 đến 10.0.0.254) và chỉ định địa chỉ và mạng con bằng cách sử dụng ký hiệu CIDR .

Ta sẽ cung cấp cho server đầu tiên của bạn một địa chỉ là 10.0.0.1, được biểu thị là 10.0.0.1/24 trong ký hiệu CIDR:

/etc/wireguard/wg0.conf trên server đầu tiên
[Interface] PrivateKey = generated_private_key ListenPort = 5555 SaveConfig = true Address = 10.0.0.1/24 

Trên server thứ hai của ta , ta sẽ xác định địa chỉ là 10.0.0.2, cung cấp cho ta đại diện CIDR của 10.0.0.2/24:

/etc/wireguard/wg0.conf trên server thứ hai
[Interface] PrivateKey = generated_private_key ListenPort = 5555 SaveConfig = true Address = 10.0.0.2/24 

Đây là phần cuối của phần [Interface] .

Ta có thể nhập thông tin về server ngang hàng trong file cấu hình hoặc bằng cách sử dụng lệnh wg sau này theo cách thủ công. Như đã đề cập ở trên, dịch vụ wg-quick với tùy chọn SaveConfig được đặt thành true sẽ nghĩa là thông tin ngang hàng cuối cùng sẽ được ghi vào file bằng một trong hai phương pháp.

Để chứng minh cả hai cách xác định danh tính ngang hàng, ta sẽ tạo phần [Peer] trong file cấu hình của server thứ hai nhưng không phải phần đầu tiên. Bạn có thể lưu file cấu hình cho server đầu tiên ( server xác định địa chỉ 10.0.0.1) ngay bây giờ.

Xác định Phần ngang hàng

Trong file cấu hình vẫn đang mở, hãy tạo một phần có tên [Peer] bên dưới các mục nhập trong phần [Interface] .

Bắt đầu bằng cách đặt PublicKey thành giá trị của public key của server đầu tiên . Bạn có thể tìm thấy giá trị này bằng lệnh cat /etc/wireguard/publickey trên server đối diện. Ta cũng sẽ đặt AllowedIPs thành các địa chỉ IP hợp lệ bên trong tunnel . Vì ta biết địa chỉ IP cụ thể mà server đầu tiên đang sử dụng, ta có thể nhập trực tiếp địa chỉ đó, kết thúc bằng /32 để chỉ ra một dải ô chứa giá trị IP duy nhất:

/etc/wireguard/wg0.conf trên server thứ hai
[Interface] . . .  [Peer] PublicKey = public_key_of_first_server AllowedIPs = 10.0.0.1/32 

Cuối cùng, ta có thể đặt Điểm Endpoint thành địa chỉ IP công cộng của server đầu tiên và cổng lắng nghe WireGuard ( ta đã sử dụng cổng 5555 trong ví dụ này). WireGuard sẽ cập nhật giá trị này nếu nó nhận được lưu lượng truy cập hợp lệ từ mạng ngang hàng này trên một địa chỉ khác, cho phép VPN thích ứng với các điều kiện chuyển vùng. Ta đặt giá trị ban đầu để server này có thể bắt đầu liên hệ:

/etc/wireguard/wg0.conf trên server thứ hai
[Interface] . . .  [Peer] PublicKey = public_key_of_first_server AllowedIPs = 10.0.0.1/32 Endpoint = public_IP_of_first_server:5555 

Khi bạn hoàn tất, hãy lưu file để quay lại dấu nhắc lệnh.

Khởi động VPN và kết nối với đồng nghiệp

Bây giờ ta đã sẵn sàng khởi động WireGuard trên mỗi server và cấu hình kết nối giữa hai đồng nghiệp của ta .

Mở Tường lửa và Khởi động VPN

Đầu tiên, mở cổng WireGuard trong firewall trên mỗi server :

  • sudo ufw allow 5555

Bây giờ, hãy bắt đầu dịch vụ wg-quick bằng cách sử dụng file giao diện wg0 mà ta đã xác định:

  • sudo systemctl start wg-quick@wg0

Thao tác này sẽ bắt đầu network interface wg0 trên máy. Ta có thể xác nhận điều này bằng lệnh :

  • ip addr show wg0
Output on first server
6: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1 link/none inet 10.0.0.1/24 scope global wg0 valid_lft forever preferred_lft forever

Ta có thể sử dụng công cụ wg để xem thông tin về cấu hình hoạt động của VPN:

  • sudo wg

Trên server không có định nghĩa ngang hàng, màn hình sẽ trông giống như sau:

Output on first server
interface: wg0 public key: public_key_of_this_server private key: (hidden) listening port: 5555

Trên server có cấu hình ngang hàng đã được xác định, kết quả cũng sẽ chứa thông tin đó:

Output on second server
interface: wg0 public key: public_key_of_this_server private key: (hidden) listening port: 5555 peer: public_key_of_first_server endpoint: public_IP_of_first_server:5555 allowed ips: 10.0.0.1/32

Để hoàn tất kết nối, bây giờ ta cần thêm thông tin ngang hàng của server thứ hai vào server đầu tiên bằng lệnh wg .

Thêm thông tin ngang hàng bị thiếu trên dòng lệnh

Trên server đầu tiên ( server không hiển thị thông tin ngang hàng), hãy nhập thông tin ngang hàng theo cách thủ công bằng định dạng sau. Khóa công khai của server thứ hai có thể được tìm thấy trong kết quả của sudo wg từ server thứ hai:

  • sudo wg set wg0 peer public_key_of_second_server endpoint public_IP_of_second_server:5555 allowed-ips 10.0.0.2/32

Bạn có thể xác nhận thông tin hiện đã ở trong cấu hình hoạt động bằng lệnh lại sudo wg trên server đầu tiên:

  • sudo wg
Output on first server
interface: wg0 public key: public_key_of_this_server private key: (hidden) listening port: 5555 peer: public_key_of_second_server endpoint: public_IP_of_second_server:5555 allowed ips: 10.0.0.2/32

Kết nối điểm-điểm của ta hiện đã khả dụng. Thử ping địa chỉ VPN của server thứ hai từ server đầu tiên:

  • ping -c 3 10.0.0.2
Output on first server
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.635 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.615 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.841 ms --- 10.0.0.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.615/0.697/0.841/0.102 ms

Nếu mọi thứ hoạt động bình thường, bạn có thể lưu cấu hình trên server đầu tiên trở lại file /etc/wireguard/wg0.conf bằng cách khởi động lại dịch vụ:

  • sudo systemctl restart wg-quick@wg0

Nếu bạn muốn bắt đầu tunnel khi khởi động, bạn có thể bật dịch vụ trên từng máy bằng lệnh :

  • sudo systemctl enable wg-quick@wg0

Đường hầm VPN bây giờ sẽ được tự động khởi động khi nào máy khởi động.

Kết luận

WireGuard là một lựa chọn tuyệt vời cho nhiều trường hợp sử dụng do tính linh hoạt, triển khai nhẹ và mật mã hiện đại. Trong hướng dẫn này, ta đã cài đặt WireGuard trên hai server Ubuntu 16.04 và cấu hình mỗi server lưu trữ như một server có kết nối điểm-điểm đến server ngang hàng của nó. Cấu trúc liên kết này lý tưởng cho việc cài đặt giao tiếp giữa server với server với các máy ngang hàng mà mỗi bên là một người tham gia bình đẳng hoặc nơi server có thể phải cài đặt kết nối đặc biệt với các server khác.


Tags:

Các tin liên quan

Cách sử dụng Logrotate và S3cmd để lưu trữ log vào bộ nhớ đối tượng trên Ubuntu 16.04
2017-11-09
Cách quản lý các tệp log bằng Logrotate trên Ubuntu 16.04
2017-11-09
Cách đánh giá trang web bằng Firefox, Siege và Sproxy trên Ubuntu 16.04
2017-11-07
Cách cài đặt Nagios 4 và theo dõi server của bạn trên Ubuntu 16.04
2017-11-06
Cách cài đặt và cấu hình Nextcloud trên Ubuntu 16.04
2017-10-06
Cách cài đặt WordPress với Caddy trên Ubuntu 16.04
2017-08-03
Cách cài đặt và cấu hình GoCD trên Ubuntu 16.04
2017-08-01
Cách cấu hình GoCD với Let's Encrypt SSL Certificates trên Ubuntu 16.04
2017-08-01
Cách cài đặt và cấu hình SimpleSAMLphp để Xác thực SAML trên Ubuntu 16.04
2017-07-30
Cách sử dụng chế độ độc lập của Certbot để lấy chứng chỉ SSL mã hóa trên Ubuntu 16.04
2017-07-28