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ính
và má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.