Laptop kết nối, đường hầm hoạt động, và các yêu cầu tới một dịch vụ nội bộ bị treo khi kết nối. Tại chính dịch vụ, yêu cầu đến từ một địa chỉ như 10.90.0.25, phản hồi đi ra về phía cổng mặc định và không có gì quay lại, vì cổng đó không biết 10.90.0.25 nằm ở đâu. Từ phía bên kia, cùng lỗi đó trông như một máy chủ nội bộ không ping được máy khách đang kết nối. Cả hai đều là một đối tượng còn thiếu: tuyến quay về pool máy khách VPN, thứ mà chỉ mạng riêng mới thêm được.

Đọc địa chỉ nguồn mà dịch vụ nhìn thấy

Chỉ một trường đó quyết định mọi thứ còn lại. Nếu dịch vụ nội bộ thấy địa chỉ pool, Access Server đang định tuyến thay vì che giấu lưu lượng máy khách, và mọi phản hồi phải được định tuyến ngược về pool. Nếu thay vào đó nó thấy địa chỉ riêng của chính máy chủ, máy chủ đang masquerade và đường về đã hoạt động, nhưng phải trả giá bằng việc mất mọi danh tính theo từng máy khách trong nhật ký và quy tắc truy cập của dịch vụ.

Hãy so sánh hai đầu trước khi thay đổi bất cứ điều gì. Trên máy chủ, liệt kê các giao diện đường hầm và địa chỉ của chúng; trên máy khách, xác nhận nó thực sự giữ địa chỉ nào; trên máy chủ nội bộ, xem một kết nối đang hoạt động.

ip -br addr show
ss -tnp state established '( dport = :443 )'
ip route get 10.90.0.25

Lệnh cuối cùng là lệnh thất bại trong trường hợp hỏng: nó hoặc báo tiền tố đường hầm không thể tới, hoặc tệ hơn, trả về cổng mặc định của bạn, và đó là cách các phản hồi đi ra internet.

Đừng cho rằng chỉ có một pool. Một máy chủ có thể có dải động cùng với các ánh xạ tĩnh cho từng người dùng, và địa chỉ tĩnh có thể nằm hoàn toàn ngoài tiền tố động. Nếu bạn chỉ định tuyến dải mà bạn nhớ, những người dùng có địa chỉ cố định vẫn hỏng và mọi người khác báo rằng sự cố đã được khắc phục.

Thêm tuyến tại nơi phản hồi được quyết định

Tuyến thuộc về cổng mà dịch vụ nội bộ đã dùng, không phải dịch vụ, trừ khi dịch vụ tự định tuyến lưu lượng của mình. Hãy trỏ nó tới địa chỉ riêng có thể tới của Access Server, giá trị này khác với địa chỉ đường hầm mà máy khách giữ.

ip route add 10.90.0.0/24 via 10.0.1.5
ip route get 10.90.0.25

Trong mạng đám mây, cùng câu đó trở thành một mục trong bảng định tuyến có đích là phiên bản hoặc giao diện mạng đang chạy máy chủ, với việc kiểm tra nguồn và đích bị tắt trên giao diện đó. Hãy để ý điều mục đó không làm: tuyến không phải là cấp quyền truy cập, nên nhóm bảo mật, ACL mạng và tường lửa của máy chủ vẫn phải cho phép lưu lượng.

Hãy làm nó bền vững và giữ kích thước các pool trung thực. Hai pool không liền nhau cần hai tuyến, và một pool lớn vượt tiền tố đã cấu hình sẽ âm thầm sinh ra những máy khách mà phản hồi không có nơi để đi. Nếu bạn kiểm soát dải của các pool, hãy chọn một bản tổng hợp mà bạn có thể định tuyến một lần rồi để yên.

Chuyển tiếp và bộ lọc phải khớp với tuyến

Định tuyến chỉ là nửa chặng đường. Máy chủ phải được phép chuyển tiếp giữa đường hầm và giao diện riêng, trên Linux nghĩa là net.ipv4.ip_forward cùng một chuỗi chuyển tiếp cho phép cặp giao diện, và trên một máy chủ được gia cố thường là một quy tắc rõ ràng cho mỗi chiều.

sysctl net.ipv4.ip_forward
nft list ruleset | grep -A5 forward

Lọc có trạng thái giải thích một triệu chứng khiến người ta đi sai đường. Phản hồi trong một luồng đã thiết lập không cần quy tắc vào mới, nên một kết nối treo sau SYN-ACK không bị chặn bởi quy tắc chấp nhận còn thiếu; nó đang bị bỏ hoặc bị định tuyến sai. Hãy giữ sự phân biệt đó, vì nó tách một thay đổi định tuyến khỏi một thay đổi tường lửa.

Các đường về không đối xứng là phiên bản lặng lẽ hơn của cùng vấn đề. Nếu hai tuyến tới pool và phản hồi chọn tuyến đi ra qua giao diện khác với giao diện mà yêu cầu đi vào, lọc đường ngược nghiêm ngặt sẽ bỏ nó và luồng chỉ thất bại với một số máy khách.

Định tuyến hay masquerade: hãy chọn có chủ đích

Chế độ định tuyến giữ địa chỉ pool của máy khách tại dịch vụ, điều này cho phép ghi nhật ký và chính sách theo từng máy khách, và đổi lại mọi mạng nội bộ phải trả lời một máy khách đều cần tuyến của pool. Chế độ masquerade loại bỏ yêu cầu đó vì phản hồi quay về máy chủ, nhưng dịch vụ không còn phân biệt được máy khách này với máy khách khác và không thể khởi tạo gì về phía một máy khách cụ thể.

Thay đổi hành vi đó trên một máy chủ đang chạy sẽ cắt các phiên hiện có, nên hãy thử trước với một máy khách và một luồng. Nếu việc chuyển đổi là câu trả lời đúng, đó là quyết định cấu hình trên máy chủ, không phải thứ gì đó được lách bằng cách thêm những tuyến sẽ trở nên không cần thiết.

Một mạng con phía sau máy khách là việc riêng

Tới một thiết bị trong chính LAN của laptop không giống với việc tới địa chỉ đường hầm của laptop. Nó đòi hỏi máy khách hoạt động như một cổng subnet: một mạng được khai báo ở phía máy khách, chuyển tiếp được bật trong hệ điều hành của máy khách, và một tuyến trên LAN đó quay về máy khách. Thêm một tuyến mạng riêng cho dải tại nhà của laptop không làm được điều này, và nó tạo xung đột khi hai người dùng có cùng dải tại nhà.

Chiều cũng là một câu hỏi chính sách. Việc cho phép một máy khách mở kết nối tới một dịch vụ nội bộ không tự động cho phép một máy chủ nội bộ mở kết nối tới máy khách đó. Hãy kiểm tra chính sách truy cập của máy chủ và tường lửa của máy khách trước khi kết luận rằng đường đi bị hỏng.

Xác minh bằng một luồng và một bản bắt gói

Hãy chứng minh đường đi bằng một kết nối duy nhất thay vì một bài kiểm tra khả năng tới tổng quát. Quan sát cùng một luồng ở cả hai đầu: yêu cầu đến dịch vụ và phản hồi rời khỏi nó.

tcpdump -ni any host 10.90.0.25 and port 443

Trước khi sửa, bản bắt gói cho thấy phản hồi đi ra về phía một cổng sẽ không định tuyến nó. Sau khi sửa, phản hồi đi ra về phía máy chủ và luồng hoàn tất. Sau đó xác nhận tuyến mà cổng sẽ dùng cho địa chỉ máy khách thứ hai, để một pool bạn chưa bao phủ hiện ra ngay bây giờ chứ không phải sau một tuần.

Kết thúc bằng bốn kiểm tra khép lại việc này: địa chỉ nguồn tại dịch vụ khớp với chế độ bạn dự định, cổng có tuyến tới mọi pool đang dùng, chuyển tiếp và bộ lọc cho phép cả hai chiều, và một luồng thật hoàn tất từ đầu đến cuối. Câu hỏi thường gặp về định tuyến Access Server nêu cùng nguyên tắc cho bản đã cài, mà giao diện cấu hình được hỗ trợ có thể khác với các hướng dẫn cũ.

Bài viết liên quan