Dante SOCKS qua VPN: đường hầm toàn phần hay định tuyến theo nguồn
Hai cách chỉ đưa proxy SOCKS qua đường hầm: thay thế tuyến mặc định, hoặc gắn một địa chỉ nguồn với bảng riêng của nó. Chúng hỏng theo cách khác nhau.
Bạn muốn lưu lượng của proxy SOCKS đi ra qua VPN trong khi phần còn lại của máy chủ giữ đường đi bình thường. Hai thiết kế làm được điều đó, và chúng khác nhau ở chỗ cái gì vỡ khi có sự cố. Một cái đẩy tuyến mặc định vào đường hầm rồi vòng qua nó; cái kia để nguyên bảng chính và gửi một địa chỉ nguồn duy nhất sang bảng thứ hai. Cái thứ hai sạch hơn, và nó có những cái bẫy riêng.
Hai thiết kế, hai bán kính ảnh hưởng khác nhau
Thiết kế đường hầm toàn phần là cách hầu hết ứng dụng VPN làm mặc định: thay tuyến mặc định để mọi thứ đi theo đường hầm, rồi loại trừ những gì không nên. Dễ suy luận nhưng khó giữ hẹp, vì mọi dịch vụ cục bộ bạn thêm vào đều thừa hưởng đường hầm cho đến khi bạn loại trừ nó. Kiểu hỏng thì rộng, vì một tuyến sai có thể mang theo cả kết nối của chính máy chủ.
Thiết kế chọn theo nguồn đi ngược lại. Bảng chính giữ nguyên như cũ, và một quy tắc chính sách gửi các gói từ một địa chỉ cục bộ cụ thể sang một bảng có tuyến mặc định qua đường hầm. Không gì khác thay đổi, nghĩa là bán kính ảnh hưởng là một địa chỉ.
Sự hẹp đó cũng là ràng buộc: thiết kế chỉ hoạt động nếu các gói đi ra của proxy thực sự mang địa chỉ đó.
Cài đặt external của Dante làm gì
Cài đặt external chọn các địa chỉ mà proxy dùng cho kết nối đi ra; nó không đụng tới chính sách định tuyến của nhân. Chính sự tách biệt đó khiến thiết kế thứ hai khả thi, và đây cũng là chỗ người ta đọc tài liệu sai. Trỏ external vào một địa chỉ đường hầm khiến proxy khởi tạo kết nối từ địa chỉ đó, rồi bảng định tuyến quyết định các gói ấy đi đâu.
Bộ lắng nghe là chuyện riêng. Giới hạn internal cho những máy khách nên dùng proxy, yêu cầu xác thực và chặn cổng bằng tường lửa, vì một bộ lắng nghe mở không phải là đặc điểm của lối ra VPN.
Xác nhận rằng địa chỉ đã cấu hình thực sự thuộc về đường hầm bên trong không gian tên mạng của proxy.
Xây dựng bảng chọn theo nguồn
Với địa chỉ TUN 10.90.0.2/24 có peer truy cập được tại 10.90.0.1, và số bảng mà không gì khác dùng, cách bố trí như sau:
ip -4 route add table 100 10.90.0.0/24 dev tun0 src 10.90.0.2
ip -4 route add table 100 default via 10.90.0.1 dev tun0 metric 10
ip -4 route add table 100 unreachable default metric 32760
ip -4 rule add priority 1000 from 10.90.0.2/32 lookup 100Tuyến không thể tới là phần người ta bỏ qua. Không có nó, một bảng bị mất tuyến đường hầm sẽ rơi về tuyến mặc định thường và proxy lặng lẽ đi ra qua WAN. Có nó, việc tra cứu thất bại, tức là một lỗi thấy được thay vì rò rỉ âm thầm. Ưu tiên của quy tắc cũng phải đứng trước mọi thứ khác khớp với nguồn đó.
Các giá trị này mô tả một tô-pô. Peer điểm-tới-điểm, đánh địa chỉ net30 và máy khách cấp một tiền tố khác đều cần tuyến riêng, nên hãy sao chép hình dạng, không phải địa chỉ.
Quy tắc nguồn rò rỉ ở đâu
Một quy tắc khớp với địa chỉ nguồn ảnh hưởng tới mọi tiến trình dùng nó, không chỉ proxy. Nếu một daemon khác liên kết cùng địa chỉ, lưu lượng của nó cũng đi vào đường hầm, và sự cố sẽ trông như vấn đề của một dịch vụ không liên quan. Hãy cho proxy một địa chỉ không gì khác dùng, hoặc chấp nhận rằng phạm vi là địa chỉ chứ không phải tiến trình.
DNS là rò rỉ còn lại. Một socket phân giải không nhất thiết dùng nguồn dữ liệu đi ra của proxy, nên việc tra tên vẫn có thể đi ra qua WAN. Hãy thử phân giải tách biệt với việc thiết lập kết nối, và quyết định xem kết quả đó có chấp nhận được không.
IPv6 cần các quy tắc và tuyến riêng, vì cách bố trí IPv4 không chứng minh được gì về nó.
Chọn theo lỗi mà bạn có thể chịu được
Chọn đường hầm toàn phần khi máy chủ cần được bảo vệ toàn bộ và bạn có thể duy trì danh sách loại trừ. Chọn định tuyến theo nguồn khi máy chủ phải giữ đường đi riêng và chỉ một dịch vụ cần được chuyển hướng. Cả hai đều chính đáng; sai lầm là chọn một rồi kiểm tra nó như thể là cái kia.
Dù chọn cách nào, hãy kiểm chứng từ cả hai phía: một yêu cầu qua proxy và một yêu cầu trực tiếp từ máy chủ, ghi lại địa chỉ ra đã quan sát được cho mỗi bên.
Nếu đường hầm sập, hãy quyết định trước xem proxy nên thất bại hay lùi lại, và để bảng định tuyến diễn đạt quyết định đó.