OpenVPN kết nối nhưng không có gì chảy: tìm tầng nơi gói tin rơi
Một đường hầm đã kết nối mà không có lưu lượng có ít nhất năm nguyên nhân. Chứng minh bộ lắng nghe, bắt gói tin bên ngoài, rồi để bộ đếm hoặc một vết đặt tên cho quy tắc.
OpenVPN báo đã kết nối và không có lưu lượng nào di chuyển, một câu bao trùm ít nhất năm sự cố không liên quan. Sửa quy tắc tường lửa trước khi biết tầng nào hỏng sẽ nhân số ẩn số lên và để lại mớ hỗn độn cho kỹ sư tiếp theo. Thay vào đó hãy làm việc từ tiến trình ra ngoài, vì mỗi bước dưới đây hoặc dọn sạch một giai đoạn hoặc thu hẹp nơi gói tin chết. Thứ tự quan trọng ở đây: một bản bắt được thực hiện trước khi biết địa chỉ nào được gắn sẽ chứng minh điều gì đó, chỉ không phải điều bạn cần.
Socket hoặc đã gắn hoặc chưa
Một dịch vụ báo đang hoạt động vẫn có thể gắn với một địa chỉ hoặc phương thức vận chuyển mà bạn chưa từng dự định. Hãy hỏi chính socket: ss -lunp liệt kê các bộ lắng nghe UDP và ss -ltnp liệt kê TCP, và cột đáng đọc là địa chỉ cục bộ, không phải trạng thái.
Một câu trả lời trống thường có nghĩa là một trong ba điều: tiến trình đã thoát sau khi khởi động, nó đã nạp một tệp cấu hình khác, hoặc nó lắng nghe ở địa chỉ khác với địa chỉ được gọi.
ss -lunp | grep 1194
ss -ltnp | grep 1194
Một chỉ thị local ghim bộ lắng nghe vào một địa chỉ duy nhất, nên một máy khách nhắm tới nơi khác trên cùng máy chủ sẽ bị từ chối trong khi dịch vụ từ bên ngoài vẫn trông khỏe mạnh. Tên phiên bản cũng có thể trỏ tới một tệp mà bạn chưa bao giờ sửa, điều này xảy ra trên các máy chủ chạy hai hồ sơ cạnh nhau.
Bắt gói tin bên ngoài, không phải đường hầm
Lọc trên giao diện vật lý và cổng thực, với giao diện của bạn được thay vào: tcpdump -ni eth0 udp port 1194. Các gói tin đi ra mà không có gì quay về chỉ vào thứ nằm phía trên: lọc của nhà cung cấp, một thiết bị NAT, hoặc một địa chỉ từ xa không phải địa chỉ bạn nghĩ. Sự im lặng ở cả hai chiều chỉ vào định tuyến của máy khách hoặc tường lửa cục bộ. Các câu trả lời đến mà không có tiến triển của đường hầm chỉ vào kênh điều khiển, nghĩa là khóa hoặc mật mã không khớp, không phải lọc.
Bắt cả hai chiều và giữ tệp ngắn. Một bản bắt dài chôn vùi ba giây thú vị, và câu trả lời gần như luôn nằm ở lần trao đổi đầu tiên.
Bộ đếm trước, vết chỉ khi chúng nói dối
Bắt đầu với bộ đếm, vì chúng không tốn gì. Hoặc nft list ruleset hoặc iptables -L -n -v trả lời câu hỏi duy nhất quan trọng ở đây: quy tắc có khớp không? Thứ tự quyết định kết quả, vì kết quả khớp đầu tiên thắng, nên một DROP rộng trước một ACCEPT sau đó để ACCEPT đó chết, và vì thế việc thêm một quy tắc hiếm khi sửa được gì.
Quyền sở hữu cũng làm người ta vấp. Hạt nhân gán các gói tin được tạo cục bộ cho tiến trình đã mở socket, và OpenVPN thường chạy như root, nên một quy tắc gắn với ID người dùng thông thường không bao giờ thấy lưu lượng của chính đường hầm. Kiểm tra UID sở hữu trước khi kết luận quy tắc sai.
Chỉ khi bộ đếm còn mơ hồ thì nhật ký mới đáng gây ồn, và ngay cả khi đó cũng chỉ cho một lát cắt hẹp: một quy tắc iptables giới hạn tốc độ và thêm tiền tố cho các dòng nhật ký của nó, hoặc một quy tắc nftables mang meta nftrace set 1 trong khi nft monitor trace chạy. Một vết đặt tên cho chuỗi và quy tắc đã nhận hoặc bỏ gói tin. Sau đó gỡ cả hai và giữ việc ghi nhật ký tải trọng ra ngoài.
Kiểm tra cả phương thức vận chuyển. Một dịch vụ tường lửa giới hạn ở TCP không nói gì về bộ lắng nghe UDP trên số đó, nên một quy tắc đọc đúng vẫn có thể bỏ mọi gói tin.
Định tuyến và đường về
Một gói tin được chấp nhận mà vẫn biến mất cần được xem xét đường đi đích của nó. ip route get báo cáo tuyến được chọn cho một địa chỉ, và lọc đường ngược có thể bỏ một câu trả lời đến qua giao diện mà bảng chính sẽ không bao giờ chọn. Triệu chứng trông giống hệt một lần bỏ của tường lửa, nên bước kiểm tra này đến trước một quy tắc NAT khác.
Trên một cổng vào, hãy kiểm tra chuyển tiếp và chuỗi forward thay vì chuỗi input. Sau đó xác nhận rằng phía xa biết cách đến địa chỉ nguồn, vì một đường ra hoạt động mà không có gì quay về là sự im lặng trong cả hai trường hợp.
Ghi chú phải nói gì
Với mỗi thay đổi, ghi lại giai đoạn đã kiểm tra, bằng chứng đã đọc và giá trị bộ đếm ở cả hai phía của nó. Chính ghi chú đó làm cho "bây giờ nó chạy" sống sót qua lần xem xét tiếp theo.
Hai lối tắt giữ ghi chú trung thực. Một gói tin chưa bao giờ rời khỏi máy chủ không thể bị một quy tắc ở nơi khác bỏ, dù cấu hình phía xa trông thuyết phục đến đâu. Một gói tin đã đi ra và quay về chuyển câu hỏi lên trên tầng mạng, nơi bộ đếm của tường lửa không còn gì để nói với bạn.