Hai cổng, một VPN: vì sao OpenVPN chọn sai tuyến lên
Đường hầm vẫn ổn; ổ cắm đang đi ra qua WAN sai. Hãy đọc địa chỉ peer đang hoạt động, ghim một tuyến máy chủ và kiểm tra quy tắc chính sách trước.
Hai tuyến lên, một đường hầm, và lưu lượng đi ra qua tuyến bạn không chọn. Các mạng con riêng vẫn truy cập được, nhật ký báo kết nối thành công, và chính tuyến bị tính phí đang chở nó. Không có gì trong đầu ra của OpenVPN nhắc đến cổng, vì máy khách chưa bao giờ chọn một cổng. Nó mở một ổ cắm tới địa chỉ từ xa và để nhân tự quyết định cách đến địa chỉ đó.
Địa chỉ đường hầm không phải điểm cuối
Mỗi phiên có hai đường khác nhau. Đường ngoài chở lưu lượng đã mã hóa đến địa chỉ công khai của máy chủ. Đường trong chở mọi thứ máy chủ đẩy vào đường hầm, và quy tắc định tuyến của đường này không ảnh hưởng đến đường kia.
Mục remote trong hồ sơ nêu đích ngoài, nên đó là địa chỉ cần ghim. Đó cũng là giá trị thay đổi khi tên máy chủ phân giải khác đi hoặc hồ sơ liệt kê nhiều remote.
Tìm địa chỉ mà máy khách thực sự gọi
Hãy đọc ổ cắm đang sống thay vì tệp cấu hình. Bảng ổ cắm cho thấy peer mà tiến trình thực sự kết nối, và đó là giá trị mà ngoại lệ phải khớp. Hồ sơ có thể bị sửa sau khi phiên bắt đầu, và ổ cắm là bằng chứng duy nhất về những gì đã được gọi:
ss -tunp | grep -i openvpn
journalctl -u openvpn-client@work --no-pager | grep -i "Peer Connection Initiated"
Dòng nhật ký nêu địa chỉ và cổng của peer tại thời điểm kết nối. Nếu nó không khớp với hồ sơ, có gì đó trước máy khách đang ghi lại đích trước khi kết nối bắt đầu.
Cũng kiểm tra họ địa chỉ. Hồ sơ hai ngăn xếp có thể kết nối qua IPv6 trong khi ngoại lệ của bạn chỉ bao IPv4, và khi đó lưu lượng đi theo quy tắc khác với quy tắc bạn đã viết. Điều tương tự áp dụng cho một proxy trả lời thay điểm cuối. Cả hai trường hợp đều tạo ra một đường hầm chạy được trong khi tuyến của bạn không làm gì.
Ghim điểm cuối và đọc thứ tự chính sách
Tuyến máy chủ cụ thể hơn bất kỳ tuyến mặc định nào. Vì vậy một /32 cho địa chỉ peer thắng trong bảng chứa nó. Dạng thông thường nêu rõ cổng và thiết bị:
ip route add 203.0.113.40/32 via 192.168.10.1 dev eth0
Tuyến đó chỉ giúp nếu tra cứu chạm tới bảng ấy. Các quy tắc chính sách được đánh giá theo thứ tự và kết quả khớp đầu tiên quyết định, nên một quy tắc gửi mọi thứ sang bảng thứ hai sẽ bỏ qua tuyến máy chủ của bạn trong main. Hãy đọc các quy tắc trước khi cho rằng tuyến đó có thẩm quyền:
ip rule show
ip route get 203.0.113.40
Hỏi lệnh thứ hai với cùng địa chỉ nguồn hoặc dấu mà máy khách dùng khi chính sách phụ thuộc vào chúng. Nó báo tuyến mà nhân sẽ chọn, đó là bằng chứng về việc tra cứu chứ không phải bằng chứng rằng ổ cắm sống đang dùng đường đó.
Khi điểm cuối dịch chuyển
Một tên máy chủ phân giải thành nhiều địa chỉ sẽ vô hiệu hóa /32 cố định ngay khi câu trả lời thay đổi. Hồ sơ có nhiều dòng remote cũng gặp vấn đề tương tự, vì máy khách có thể hạ cánh trên bất kỳ dòng nào. Hãy làm mới tuyến từ chính các móc vòng đời của máy khách thay vì thêm tay. Một script up đọc peer đã thương lượng và cài tuyến máy chủ giữ ngoại lệ khớp với thực tế, và script down tương ứng gỡ nó ra.
Ghi lại việc làm mới ở cùng nơi với phần còn lại của cấu hình định tuyến trên máy chủ. Một tuyến chỉ tồn tại đến lần khởi động lại tiếp theo là phép thử, không phải bản sửa.
Giữ chính sách bên trong tách biệt
Di chuyển đường ngoài không cho quyền truy cập vào mạng con riêng mới và không đổi những đích mà máy chủ đẩy vào đường hầm. Tuyến của lớp dưới chọn dây; các tuyến được đẩy chọn thứ đi vào đường hầm. Việc tách hai quyết định đó chính là thứ khiến sự phân tách có thể dự đoán được.
Nếu mục tiêu chỉ là giữ lưu lượng đã mã hóa xa tuyến bị tính phí, hãy để nguyên tuyến mặc định và thêm ngoại lệ máy chủ duy nhất. Thay tuyến mặc định toàn máy để di chuyển một kết nối VPN sẽ phá mọi ứng dụng khác trên máy chủ.
Xác nhận kết quả bằng hai quan sát độc lập: địa chỉ cục bộ và thiết bị của ổ cắm, và tuyến mà đích riêng phân giải tới. Khi cả hai khớp với ý định của bạn, sự phân tách là thật. Hướng dẫn OpenVPN 2.6 đề cập các tùy chọn remote và ràng buộc cục bộ quyết định địa chỉ mà máy khách gọi.