Đường hầm toàn phần đã giết phiên SSH của bạn: ghim tuyến đường quay về
Đường hầm toàn phần chặn các phản hồi cho chính phiên SSH của bạn. Hãy ghim một tuyến đường máy chủ cho địa chỉ quản trị của bạn qua cổng cũ, và cài lại nó khi kết nối lại.
Khởi động một máy khách OpenVPN trên máy bạn đang làm việc qua SSH, và giữa câu lệnh phiên bị đóng băng. Đường hầm báo đã kết nối, máy chủ có thể ra internet qua nó, và các lần gõ phím của bạn vẫn đến trong khi không có gì quay về. Thứ đã thay đổi không phải đường hầm: đó là đường về của các gói tin gửi đến bạn, nay khớp với tuyến mặc định mới và đi vào một đường hầm mà cổng từ xa sẽ không dùng để đến bàn làm việc của bạn.
redirect-gateway thực sự cài đặt những gì
Ở dạng def1, redirect-gateway thêm 0.0.0.0/1 và 128.0.0.0/1 thay vì ghi đè tuyến mặc định. Hai nửa này bao phủ toàn bộ không gian địa chỉ trong khi cả hai vẫn là tiền tố dài hơn 0.0.0.0/0, nên bất kỳ đích nào không có khớp cụ thể hơn giờ đều đi vào đường hầm. Đó là cơ chế cần nắm giữ, vì mọi cách sửa bên dưới đều hoạt động bằng cách cài một khớp cụ thể hơn.
Địa chỉ quản trị của bạn là một trong những đích đó.
Máy chủ VPN chuyển tiếp lưu lượng của khách hàng ra internet. Nó không có tuyến cho địa chỉ công cộng mà bạn kết nối tới, và không có lý do coi những gói đó là gì khác ngoài lưu lượng đến từ một khách hàng, nên nó bỏ chúng. Trong khi đó yêu cầu bạn gửi vẫn đến được máy chủ, đó là lý do phiên trông như còn sống chỉ ở một phía.
ip route show table main | head -n 20
ip route get 198.51.100.23Tìm địa chỉ nguồn và đường đi trước đường hầm
Trên máy chủ, liệt kê kết nối SSH đã thiết lập và ghi lại địa chỉ đầu bên kia mà nó đến từ. Địa chỉ đó là thứ tuyến quay về của bạn phải bao phủ, và nó không phải lúc nào cũng như bạn nghĩ: một máy nhảy, một cổng NAT hay bộ dịch địa chỉ của nhà mạng có thể thay bằng nguồn khác.
Sau đó tìm cổng vật lý và giao diện đã mang lưu lượng trước khi đường hầm bắt đầu. Trong cách bố trí def1, tuyến mặc định vẫn còn bên dưới các nửa mặc định, nên thông tin có sẵn, dù đọc một bảng tuyến dài bằng mắt dễ dẫn đến sai sót.
Ghi cả hai giá trị và tên giao diện cùng nhau, vì tuyến bạn sắp thêm cần cả ba. Nếu máy chủ dùng một quy tắc định tuyến theo chính sách để chọn đường lên, một tuyến thường có thể không được xét đến chút nào, và khả năng đó làm thay đổi cách sửa.
Ghim một tuyến máy chủ vượt qua các nửa mặc định
Một tuyến /32 dài hơn bất kỳ nửa mặc định nào, nên các phản hồi đến địa chỉ của bạn chọn nó thay vì đường hầm. Bước nhảy tiếp theo là cổng trước đường hầm và thiết bị là giao diện vật lý, điều này giữ gói tin trên đường nó đã dùng trước khi đường hầm tồn tại.
ip route add 198.51.100.23/32 via 203.0.113.1 dev eth0Xác minh bằng một lần tra cứu thay vì soi bảng: câu trả lời phải nêu eth0 và cổng, không bao giờ là tun0.
OpenVPN đã thêm một tuyến máy chủ cho chính địa chỉ của máy chủ VPN vì lý do tương tự, nên mẫu này quen thuộc và địa chỉ quản trị chỉ là một ngoại lệ nữa. Đừng dùng route-nopull để sửa việc này, vì nó vứt bỏ các tuyến được đẩy mà đường hầm cần, gồm cả mạng từ xa và các tùy chọn DNS.
Làm cho nó sống sót qua lần kết nối lại
Một tuyến thêm bằng tay biến mất khi máy khách kết nối lại và cài các tuyến của riêng nó, điều này biến một cách sửa thành sự cố lặp lại. Hãy gắn câu lệnh vào thứ gì đó chạy sau khi các tuyến được cài.
Một tập lệnh route-up hoặc móc pre-up của trình quản lý mạng đều dùng được, và phép kiểm tra đáng tin là kết nối lại rồi tra cứu y như vậy.
Trên Windows, tương đương là một tuyến cố định được thêm bằng -p, tồn tại qua các lần khởi động lại nhưng vẫn phải trỏ đến đúng cổng sau khi mạng thay đổi. Dù nền tảng nào, hãy ghi lý do bên cạnh tuyến: người quản trị tiếp theo cần biết nó tồn tại để bảo vệ một phiên quản trị, không phải vì thiết kế mạng đòi hỏi.
Khi một tuyến đã ghim vẫn chưa đủ
Lọc đường về có thể loại bỏ một gói đến trên một giao diện và rời đi qua giao diện khác, đúng là thứ mà một tuyến đã ghim tạo ra. Hãy kiểm tra giá trị rp_filter hiệu lực trước khi tắt bất cứ thứ gì trên toàn cục, và nên sửa sự bất đối xứng hơn là tắt phép kiểm tra. Cài đặt theo giao diện mới là cái áp dụng, và chế độ lỏng thường chỉ ghi nhật ký sự bất đối xứng thay vì loại bỏ gói. Hãy đọc cả hai trước khi kết luận bộ lọc là thủ phạm.
Các máy chủ có định tuyến theo chính sách cần cả quy tắc lẫn tuyến, vì cơ sở quy tắc chọn bảng trước khi tuyến bên trong nó được xét đến. Một tuyến trong bảng chính là vô hình với một luồng khớp với quy tắc trỏ đến bảng khác. Hãy đọc các quy tắc trước khi thêm bất cứ gì vào main. Nếu một quy tắc đã bao phủ lưu lượng quản trị, ngoại lệ phải nằm trong bảng của quy tắc đó.
Giữ một bảng điều khiển ngoài băng mở trong khi thử nghiệm và kiểm tra lại từ lần đăng nhập thứ hai trước khi ngắt kết nối cái bạn đang dùng. Một tuyến đưa chính lưu lượng quản trị của bạn vào đường hầm sẽ cắt kết nối mà bạn đang sửa nó qua đó. Khi đó để vào lại phải dùng bảng điều khiển nối tiếp hoặc khởi động cứu hộ, một sự đánh đổi tồi để bỏ qua một bước xác minh.