Điểm:1

Định tuyến tất cả lưu lượng thông qua Wireguard ngang hàng

lá cờ gh

Tôi có một thiết lập Wireguard VPN về cơ bản trông như thế này:

P1 ---- S ---- P ---- LAN
Px -----|
  • S (ip 192.168.60.1) là máy chủ WG chạy trên Ubuntu 20.04 có bật ufw, với IP công khai (sử dụng giao diện wg0).
  • P (ip 192.168.60.2) là WG peer chạy phía sau CGNAT, không có IP public, kết nối với LAN riêng.
  • P1..Px là các đồng nghiệp WG khác (ip 192.168.60.1x).

Ufw có cấu hình như sau:

Đến hành động từ
-- ------ ----
22/tcp CHO PHÉP mọi nơi
51820/udp CHO PHÉP mọi nơi

Mọi nơi trên eth0 CHO PHÉP FWD Mọi nơi trên wg0
Mọi nơi trên wg0 CHO PHÉP FWD Mọi nơi trên eth0
Mọi nơi trên wg0 CHO PHÉP FWD Mọi nơi trên wg0

Tôi muốn đạt được rằng tất cả lưu lượng truy cập bắt nguồn từ các đồng nghiệp P1..Px được định tuyến qua P.

Tôi đã thử những cách sau nhưng không thành công:

  • Trên P1, tôi đặt AllowedIPs cho S thành 0.0.0.0/0. Trên S, tôi đặt AllowedIPs cho P thành 0.0.0.0/0. - Cấu hình này khiến S không thể truy cập được thông qua eth0 (và vẫn không định tuyến bất kỳ thứ gì tới P).

  • Trên P1, tôi đặt AllowedIPs cho S thành 0.0.0.0/0. Trên SI, tôi đã thử định cấu hình định tuyến dựa trên chính sách dựa trên IP nguồn:

     quy tắc sudo ip thêm từ tra cứu 192.168.60.0/24 200
     Sudo ip route thêm mặc định qua 192.168.60.2 dev wg0 bảng 200
    

    Điều này ngăn P1 kết nối với bất kỳ thứ gì khác ngoài 192.168.60.0/24.

Điểm:2
lá cờ in

Có lẽ bạn nên bắt đầu với việc sử dụng Bảng = tắt trong wg-quick conf trên cả S và P. Giá trị của IP được phép = khi đó sẽ không gây ra thay đổi đối với các quy tắc định tuyến tuyến đường/chính sách trên chúng.

CHỈNH SỬA: Trên thực tế, bạn nên rời đi Bảng = không bị ảnh hưởng trên P trừ khi bạn cần IP được phép = của S trên đó là 0.0.0.0/0 thay vì 192.168.60.0/24 vì một số lý do, ví dụ: cần lưu lượng truy cập bắt nguồn từ chính nó để được định tuyến S. Bạn không cần phải loay hoay với các tuyến đường và quy tắc định tuyến trên P vì ngay cả tiền tố trong Địa chỉ=192.168.60.2/24 sẽ nhận được cấu hình tuyến đường cần thiết. Đoạn tiếp theo có thể không áp dụng cho những gì bạn cần -- mặc dù nó có thể cung cấp cho bạn một số thông tin chi tiết bổ sung về cách mọi thứ hoạt động.

Và có lẽ bạn nên sử dụng một mạng con IP bổ sung cho S và P, ví dụ. 192.168.59.0/30. Điều này sẽ giúp bạn tránh được rắc rối khi cần thêm quy tắc ip. Nhớ thêm subnet route cho 192.168.60.0/24 trên P mặc dù, như với Bảng = tắt, chỉ các tuyến tiền tố sẽ được hạt nhân thêm vào cho (các) tiền tố trong Địa chỉ= lĩnh vực). Tận dụng tốt các PostUp= (và PreDown=) btw.

Tôi không cho rằng bạn muốn định tuyến lưu lượng truy cập bắt nguồn từ chính S đến P, vì vậy bạn có thể muốn quy tắc ip sau thay thế:

# quy tắc ip thêm iif wg0 từ tra cứu 192.168.60.0/24 200

Nếu bạn thực sự cần muốn định tuyến, ví dụ: các giao dịch khác với ssh và máy chủ wireguard trả lời P, bạn có thể có thêm:

# quy tắc ip add iif lo tra cứu 200
# quy tắc ip add iif lo ipproto tcp sport 22 tra cứu chính
# quy tắc ip thêm iif lo ipproto udp sport 51820 tra cứu chính

Lưu ý: bạn không thể chỉ khớp với từ 192.168.60.1 đã thêm vào quy tắc đầu tiên và bỏ qua hai quy tắc còn lại, bởi vì đối với các lưu lượng truy cập không trả lời, địa chỉ nguồn thường (nếu không phải luôn luôn) được chọn dựa trên tuyến đường đã quyết định -- địa chỉ này chưa được đặt vào thời điểm này.

Lưu ý rằng thứ tự của lệnh thường xác định mức độ ưu tiên, vì vậy hãy đảm bảo bạn thêm quy tắc "bộ siêu" trước quy tắc "tập hợp con", nếu không quy tắc sau sẽ bị quy tắc trước ghi đè.

Ngoài ra tốt nhất là giữ bảng 200 trống cho đến khi tất cả các quy tắc mong muốn được đặt đúng vị trí, nếu không, quyền truy cập từ xa của máy chủ có thể bị cắt.

Cuối cùng, nexthop không có ý nghĩa gì trong lộ trình đến đường hầm L3:

# tuyến ip thêm bảng dev wg0 mặc định 200

Tái bút Đảm bảo rằng bạn không chỉ cho phép chuyển tiếp IP trong tường lửa mà còn cho phép nó bằng sysctl.

Andrija Kovačević avatar
lá cờ gh
Cảm ơn về các mẹo - Tôi đã quản lý để nó hoạt động với cấu hình sau (mọi thứ được thực hiện trên S): - thêm Bảng = tắt vào wg0.conf - đặt AllowedIPs = 0.0.0.0/0, cho P (không chắc điều này có thực sự cần thiết không) - thêm phần sau vào PostUp: ip rule add iif wg0 from 192.168.60.0/24 lookup 200; tuyến ip thêm mặc định qua 192.168.60.2 dev wg0 bảng 200; - thêm phần sau vào PostDown: quy tắc ip xóa iif wg0 khỏi tra cứu 192.168.60.0/24 200; xóa tuyến ip mặc định qua 192.168.60.2 dev wg0 bảng 200;
Tom Yan avatar
lá cờ in
Tôi đã thực hiện một số chỉnh sửa cho câu trả lời. Xem nếu nó làm cho mọi thứ rõ ràng hơn với bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.