Điểm:0

Gửi phản hồi qua cùng một thiết bị cho các kết nối đến qua Wireguard

lá cờ us

tôi có một máy chủ máy chủ lan rộng chạy trong mạng LAN riêng của tôi được kết nối với máy chủ công cộng máy chủ công cộng sử dụng Wireguard. máy chủ công cộng chuyển tiếp các kết nối TCP đến các cổng nhất định để máy chủ lan rộng thông qua kết nối Wireguard bằng iptables ADNT quy tắc.

Trên máy chủ lan rộng, Wireguard được thiết lập làm kết nối NetworkManager. Nó đang định tuyến tất cả lưu lượng truy cập internet thông qua Wireguard bằng cách sử dụng IP được phép = 0.0.0.0/0, ::/0. Điều này khiến các quy tắc ip sau được thiết lập trên máy chủ lan rộng:

[root@lanserver ~]# hiển thị quy tắc ip
0: từ tất cả tra cứu cục bộ
31100: từ tất cả các tra cứu chính booster_prefixlength 0
31101: không phải từ tất cả tra cứu fwmark 0xcb2e 52014
32766: từ tất cả tra cứu chính
32767: từ tất cả tra cứu mặc định
[root@lanserver ~]# bảng hiển thị lộ trình ip 52014
mặc định dev wg0 chỉ số liên kết phạm vi tĩnh proto 50

Thiết lập này hoạt động đúng. Một kết nối TCP đến máy chủ công cộng được chuyển tiếp đến máy chủ lan rộng sử dụng quy tắc iptables. Phản hồi được gửi lại thông qua máy chủ công cộng bởi vì quy tắc ip 31101 phù hợp với nó.

Có một ngoại lệ: Khi tôi cố gắng mở một kết nối TCP tới máy chủ công cộng sử dụng IPv6 từ máy tính cá nhân của tôi máy tính, cũng nằm trong mạng LAN riêng của tôi, nó không hoạt động. Vấn đề dường như là cả hai máy tínhmáy chủ lan rộng có một địa chỉ IPv6 trong cùng một mạng con công cộng. máy chủ công cộng chuyển tiếp kết nối đến máy chủ lan rộng thành công, nhưng phản hồi không được chuyển trở lại qua kết nối Wireguard mà trực tiếp đến máy tính do quy tắc ip 31100.

Làm cách nào để đảm bảo rằng tất cả phản hồi cho các kết nối đến thông qua giao diện Wireguard trên máy chủ lan rộng cũng được gửi lại thông qua giao diện Wireguard, bất kể IP nguồn của chúng có nằm trong mạng con cục bộ hay không?

Tôi có thể nghĩ ra các giải pháp theo các hướng sau:

  • Tắt IPv6 trên máy chủ lan rộng, khiến nó không nằm trên cùng một mạng con với máy tính. Không phải là một giải pháp rất tốt.
  • Sử dụng SNAT trên máy chủ công cộng cho cổng chuyển tiếp. Không phải là một giải pháp có thể chấp nhận được vì một số dịch vụ đằng sau các cổng được chuyển tiếp cần biết IP nguồn thực.
  • Đề cập rõ ràng đến mạng con IPv6 cục bộ trong IP được phép của đồng đẳng Wireguard. Điều này không hoạt động vì mạng con IPv6 thay đổi sau mỗi 24 giờ.
  • Thêm quy tắc IP tùy chỉnh bằng cách nào đó phù hợp với tất cả các kết nối đi qua wg0 và sử dụng bảng định tuyến 52014 cho họ. Tôi không chắc làm thế nào để xác định chính xác một quy tắc như vậy. Ngoài ra, vấn đề là số lượng bảng định tuyến thay đổi mỗi khi khởi động lại kết nối Wireguard. Nơi thích hợp để tạo ra một quy tắc như vậy có lẽ sẽ là Gửi lên tập lệnh, nhưng Trình quản lý mạng dường như không cho phép chỉ định một tập lệnh.
Điểm:0
lá cờ us

Sau khi thử nghiệm với các tùy chọn khác nhau, tôi quyết định ngừng sử dụng Trình quản lý mạng và thay vào đó sử dụng trực tiếp wg-quick. Trên Fedora Server, điều này khá dễ dàng và tôi chỉ phải xóa kết nối Trình quản lý mạng bằng cách sử dụng nmcli con del wg0 và kích hoạt dịch vụ wg-quick bằng cách sử dụng kích hoạt systemctl --now wg-quick@wg0 (đọc cấu hình từ /etc/wireguard/wg0.conf). Chuyển sang wg-quick có những ưu điểm sau:

  • Tôi có thể chỉ định tùy chỉnh Gửi lên các lệnh để định cấu hình thiết lập định tuyến phức tạp hơn
  • Số lượng bảng định tuyến Wireguard dường như không đổi tại 51820, mặc dù tôi không thể tìm thấy bất kỳ tài liệu nào về điều này. Điều này giúp thiết lập quy tắc ip tùy chỉnh dễ dàng hơn.

sau đó tôi đã sử dụng Gửi lên lệnh trong wg0.conf để thiết lập các quy tắc ip bổ sung nhằm đảm bảo rằng mọi lưu lượng truy cập Wireguard cũng sẽ phản hồi thông qua Wireguard. Có hai lựa chọn để đạt được điều này:

Tùy chọn 1: khớp IP nguồn

Các quy tắc ip khớp với các gói Wireguard dựa trên địa chỉ IP nguồn của chúng (được tự động đặt thành địa chỉ IP mà yêu cầu ban đầu được gửi đến):

[Giao diện]
Địa chỉ = 10.139.192.4/24
Địa chỉ = fd52:30a4:f9e7:647a::4/64
PostUp = quy tắc ip -4 thêm từ tra cứu 10.139.192.4 51820
PreDown = ip -4 quy tắc del từ tra cứu 10.139.192.4 51820
PostUp = ip -6 thêm quy tắc từ fd52:30a4:f9e7:647a::4 tra cứu 51820
PreDown = ip -6 quy tắc del từ fd52:30a4:f9e7:647a::4 tra cứu 51820

Tùy chọn 2: fwmark

Một số quy tắc iptables được cấu hình để đặt dấu trên các gói đi qua wg0:

iptables -t mangle -A INPUT -j CONNMARK -i wg0 --set-mark 1
ip6tables -t mangle -A INPUT -j CONNMARK -i wg0 --set-mark 1
iptables -t mangle -A OUTPUT -j CONNMARK -m connmark --mark 1 --restore-mark
ip6tables -t mangle -A OUTPUT -j CONNMARK -m connmark --mark 1 --restore-mark

Thì đây dấu phù hợp với quy tắc IP:

PostUp = quy tắc ip -4 thêm fwmark 1 tra cứu 51820
PreDown = ip -4 quy tắc fwmark 1 tra cứu 51820
PostUp = quy tắc ip -6 thêm fwmark 1 tra cứu 51820
PreDown = ip -6 quy tắc fwmark 1 tra cứu 51820

Thông tin chi tiết về giải pháp này có thể được tìm thấy đây.

Đă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.