Thiết lập VPN đơn giản với WireGuard và Raspberry Pi làm máy chủ

Bởi vì WireGuard sẽ trở thành một phần của nhân Linux 5.6 sắp ra mắt, tôi quyết định xem cách tốt nhất để tích hợp VPN này với Bộ định tuyến/điểm truy cập LTE trên Raspberry Pi.

Оборудование

  • Raspberry Pi 3 với mô-đun LTE và địa chỉ IP công cộng. Sẽ có một máy chủ VPN ở đây (sau đây trong văn bản nó được gọi là người đi cạnh)
  • Điện thoại Android phải sử dụng VPN cho mọi liên lạc
  • Máy tính xách tay Linux chỉ nên sử dụng VPN trong mạng

Mọi thiết bị kết nối với VPN phải có khả năng kết nối với tất cả các thiết bị khác. Ví dụ: điện thoại có thể kết nối với máy chủ web trên máy tính xách tay nếu cả hai thiết bị đều là một phần của mạng VPN. Nếu quá trình thiết lập khá đơn giản, thì bạn có thể nghĩ đến việc kết nối máy tính để bàn với VPN (thông qua Ethernet).

Xét rằng các kết nối có dây và không dây ngày càng trở nên kém an toàn hơn theo thời gian (các cuộc tấn công có chủ đích, Tấn công bẻ khóa KRACK WPA2 и Cuộc tấn công Dragonblood chống lại WPA3), tôi đang nghiêm túc xem xét việc sử dụng WireGuard cho tất cả các thiết bị của mình, bất kể chúng ở trong môi trường nào.

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

WireGuard cung cấp gói biên dịch trước cho hầu hết các bản phân phối Linux, Windows và macOS. Ứng dụng Android và iOS được phân phối thông qua thư mục ứng dụng.

Tôi có Fedora Linux 31 mới nhất và tôi quá lười đọc hướng dẫn trước khi cài đặt. Vừa tìm thấy các gói wireguard-tools, cài đặt chúng và sau đó không thể hiểu tại sao không có gì hoạt động. Điều tra sâu hơn cho thấy tôi chưa cài đặt gói này wireguard-dkms (với trình điều khiển mạng), nhưng nó không có trong kho phân phối của tôi.

Nếu tôi đã đọc hướng dẫn, tôi sẽ thực hiện các bước chính xác:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

Tôi đã cài đặt bản phân phối Raspbian Buster trên Raspberry Pi của mình, ở đó đã có sẵn một gói rồi wireguard, cài đặt nó:

$ sudo apt install wireguard

Trên điện thoại Android của tôi, tôi đã cài đặt ứng dụng WireGuardVPN từ danh mục chính thức của Google App Store.

Cài đặt các phím

Để xác thực ngang hàng, Wireguard sử dụng sơ đồ khóa riêng/chung đơn giản để xác thực các VPN ngang hàng. Bạn có thể dễ dàng tạo khóa VPN bằng lệnh sau:

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

Điều này cung cấp cho chúng tôi ba cặp khóa (sáu tệp). Chúng tôi sẽ không đề cập đến các tệp trong cấu hình mà sao chép nội dung ở đây: mỗi khóa là một dòng trong base64.

Tạo file cấu hình cho máy chủ VPN (Raspberry Pi)

Cấu hình khá đơn giản, mình tạo file sau /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

Một vài lưu ý:

  • Ở những nơi thích hợp, bạn cần chèn dòng từ tệp bằng phím
  • VPN của tôi đang sử dụng băng tần nội bộ 10.200.200.0/24
  • Đối với các đội PostUp/PostDown Tôi có giao diện mạng bên ngoài wwan0, bạn có thể có giao diện mạng khác (ví dụ: eth0)

Mạng VPN có thể dễ dàng được nâng cấp bằng lệnh sau:

$ sudo wg-quick up wg0

Một chi tiết nhỏ: là máy chủ DNS tôi đã sử dụng dnsmasq gắn liền với giao diện mạng br0, Tôi cũng đã thêm thiết bị wg0 vào danh sách các thiết bị được phép. Trong dnsmasq, việc này được thực hiện bằng cách thêm một dòng giao diện mạng mới vào tệp cấu hình /etc/dnsmasq.conf, ví dụ:

interface=br0
interface=wg0

Ngoài ra, tôi đã thêm quy tắc iptable để cho phép lưu lượng truy cập vào cổng nghe UDP (51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

Bây giờ mọi thứ đã hoạt động, chúng ta có thể thiết lập khởi chạy tự động đường hầm VPN:

$ sudo systemctl enable [email protected]

Cấu hình máy khách trên máy tính xách tay

Tạo file cấu hình trên laptop /etc/wireguard/wg0.conf với cùng các cài đặt:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Ghi chú:

  • Thay vì edgewalker, bạn cần chỉ định máy chủ IP công cộng hoặc máy chủ VPN
  • Bằng cách thiết lập AllowedIPs trên 10.200.200.0/24, chúng tôi chỉ sử dụng VPN để truy cập mạng nội bộ. Lưu lượng truy cập đến tất cả các địa chỉ IP/máy chủ khác sẽ tiếp tục đi qua các kênh mở “bình thường”. Nó cũng sẽ sử dụng máy chủ DNS được cấu hình sẵn trên máy tính xách tay.

Để thử nghiệm và khởi chạy tự động, chúng tôi sử dụng các lệnh tương tự wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

Thiết lập ứng dụng khách trên điện thoại Android

Đối với điện thoại Android, chúng tôi tạo một tệp cấu hình rất giống nhau (hãy gọi nó là mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

Không giống như cấu hình trên máy tính xách tay, điện thoại phải sử dụng máy chủ VPN của chúng tôi làm máy chủ DNS (dòng DNS) và cũng chuyển tất cả lưu lượng truy cập qua đường hầm VPN (AllowedIPs = 0.0.0.0/0).

Thay vì sao chép tệp vào thiết bị di động, bạn có thể chuyển đổi tệp thành mã QR:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

Mã QR sẽ xuất ra bảng điều khiển dưới dạng ASCII. Nó có thể được quét từ ứng dụng VPN Android và sẽ tự động thiết lập đường hầm VPN.

Đầu ra

Việc thiết lập WireGuard đơn giản là điều kỳ diệu so với OpenVPN.

Nguồn: www.habr.com

Thêm một lời nhận xét