Cách gửi một đích IPv4 ra ngoài đường hầm OpenVPN
Một tuyến máy chủ duy nhất qua net_gateway có thể gửi một địa chỉ IPv4 ra ngoài đường hầm OpenVPN. Hãy kiểm tra bước nhảy tiếp theo, phạm vi DNS, IPv6 và mọi chặn ở phía máy khách.
Hầu hết cấu hình đường hầm đầy đủ gửi mọi gói qua VPN, và redirect-gateway là chỉ thị làm điều đó khả thi. Một đích duy nhất vẫn có thể được miễn trừ. Thêm tuyến máy chủ cho địa chỉ đó với phần giữ chỗ net_gateway báo cho máy khách đến nó qua cổng gốc của máy, trong khi mọi thứ khác tiếp tục dùng đường hầm.
Dòng lệnh trông vô hại và thường là vậy, nhưng nó chỉ giải quyết một câu hỏi: các gói cho đúng địa chỉ IPv4 đó đi đâu. Nó không thay đổi DNS, IPv6, chính sách tường lửa hay tiến trình nào đã mở kết nối, và mỗi điều đó có thể âm thầm vô hiệu hóa ngoại lệ.
net_gateway thực sự đặt tên cho cái gì
Mục hồ sơ cho ngoại lệ đó là một dòng: route 198.51.100.77 255.255.255.255 net_gateway. Địa chỉ đầu tiên là phần giữ chỗ tài liệu cho đích, mặt nạ biến nó thành tuyến một máy chủ, và token cuối cùng đặt tên cho phần giữ chỗ cổng. OpenVPN phân giải các phần giữ chỗ cổng khi nó cài đặt tuyến. vpn_gateway nghĩa là cổng của chính đường hầm, phía xa của liên kết VPN. net_gateway nghĩa là cổng mặc định mà máy chủ có trước khi VPN thay đổi bất cứ điều gì, thường là bộ định tuyến cục bộ trên mạng vật lý.
Phần giữ chỗ thứ ba, remote_host, đề cập đến địa chỉ của máy chủ VPN, và nó tồn tại để đường hầm có thể đến máy chủ qua đường vật lý. Nhầm lẫn ba thứ này là lý do phổ biến nhất khiến một ngoại lệ đi sai chỗ hoặc không được cài đặt.
Giá trị được đọc tại thời điểm kết nối, không được ghi vào tệp. Nếu máy chuyển sang mạng khác, cổng trước VPN thay đổi và tuyến đi theo cổng mới. Đó thường là điều bạn muốn, nhưng nó cũng có nghĩa là hành vi của ngoại lệ phụ thuộc vào mạng mà máy khách khởi động.
Vì sao tuyến máy chủ thắng tuyến mặc định của đường hầm
Định tuyến được quyết định bởi tiền tố khớp cụ thể nhất. redirect-gateway def1 thường không thay thế tuyến mặc định; nó thêm hai nửa, một tuyến cho nửa dưới của không gian địa chỉ và một cho nửa trên, để tuyến mặc định ban đầu được giữ cho các mục đích khác. Các nửa đó rộng hơn một địa chỉ.
Một tuyến cho một địa chỉ với mặt nạ 255.255.255.255 là /32, mức cụ thể tối đa mà IPv4 có thể có. Khi một gói cho địa chỉ đó được đánh giá, /32 khớp và thắng bất kể tuyến nào được cài đặt trước. Đó là cơ chế đằng sau ngoại lệ, và nó hoạt động giống nhau trên Linux, macOS và Windows miễn là tuyến thực sự tồn tại.
Windows thêm một chiều thứ hai. Khi hai tuyến có độ cụ thể bằng nhau, tuyến có metric thấp hơn thắng, và bộ điều hợp VPN có thể mang metric giao diện làm thay đổi kết quả. /32 vẫn cụ thể hơn hai nửa, nên ngoại lệ thường đứng vững, nhưng một tuyến cũ từ phiên trước có thể cho kết quả khó hiểu nếu nó cũng cụ thể như vậy.
Ngoại lệ không bao gồm những gì
DNS là lỗ hổng đầu tiên. Máy khách có thể đẩy cài đặt trình phân giải nội bộ, và hệ điều hành sẽ tiếp tục dùng chúng để tra cứu. Một ứng dụng phân giải tên trước khi kết nối có thể nhận địa chỉ nội bộ cho dịch vụ đáng lẽ đi trực tiếp, hoặc địa chỉ bên ngoài được phân giải đúng nhưng sau đó vấp phải lỗ hổng tiếp theo.
IPv6 là thứ hai. Chỉ thị tuyến chỉ xử lý IPv4. Một đích song song kép có thể ưu tiên IPv6, theo đường hầm hoặc tuyến mặc định IPv6 của máy chủ tùy chính sách, nên ngoại lệ IPv4 không bao giờ có hiệu lực. Bạn cần một tuyến IPv6 khớp, hoặc quyết định có chủ ý tắt IPv6 cho máy khách đó.
Phạm vi ứng dụng là thứ ba. Quy tắc dựa trên đích, nên mọi tiến trình kết nối đến địa chỉ đó đều dùng đường trực tiếp, dù đó có phải tiến trình bạn nghĩ đến hay không. Ngược lại, một trang web có thể trả lời từ nhiều địa chỉ, nên miễn trừ một /32 không miễn trừ trang web. Nếu yêu cầu thực sự là định tuyến theo ứng dụng, bảng tuyến của máy khách Community là công cụ sai.
Kiểm tra ngoại lệ mà không tự lừa mình
Bắt đầu với tuyến đã cài đặt, không phải trình duyệt. Trên Linux, hỏi nhân dùng tuyến và bước nhảy tiếp theo nào cho địa chỉ cụ thể; trên Windows, đọc bảng tuyến cho /32 đó. Xác nhận cổng là cổng vật lý chứ không phải đường hầm. Nếu thiếu mục, hồ sơ chưa được áp dụng hoặc máy khách không có quyền thay đổi tuyến.
Sau đó thử hai đích. Yêu cầu đến địa chỉ được miễn trừ phải đi ra qua giao diện vật lý, và yêu cầu đến một địa chỉ nội bộ đối chứng vẫn phải dùng đường hầm. Chỉ thử địa chỉ được miễn trừ không chứng minh gì về phần còn lại của đường hầm, và thử một trang web công khai là thử địa chỉ mà trang đó phân giải tới, có thể không phải địa chỉ trong quy tắc.
Cuối cùng, kiểm tra các kiểm soát có thể ghi đè tuyến. Kill switch phía máy khách hoặc cài đặt block-outside-dns của Windows có thể cấm lưu lượng trực tiếp, điều này hiện ra như một kết nối thất bại dù tuyến đúng. Đừng tắt các kiểm soát đó để ngoại lệ trông như đang hoạt động; nếu chính sách cấm đường trực tiếp, ngoại lệ là vấn đề thiết kế cho chủ sở hữu dịch vụ VPN.
Kiểm tra lại sau khi kết nối lại hoặc đổi mạng, vì cổng trước VPN và đường đi khả dụng là thuộc tính của thời điểm, không phải của hồ sơ.