Máy chủ hay máy khách: đơn vị OpenVPN nào trên Pi hai vai
Hai phiên bản OpenVPN dùng chung một Pi: một bên nhận người dùng chuyển vùng, bên kia quay số tới nhà cung cấp phía trên. Đọc tên đơn vị và thư mục trước khi khởi động lại bất kỳ bên nào.
Hai tiến trình OpenVPN chạy trên một Pi vừa nhận người dùng chuyển vùng vừa vươn tới nhà cung cấp phía trên, và chúng gần như không chia sẻ gì ngoài phần cứng. Một bên lắng nghe các đường hầm đi vào trong khi bên kia quay số ra ngoài. Mỗi bên đọc thư mục riêng của mình, và mỗi bên có kiểu hỏng riêng. Khởi động lại nhầm bên là cách phổ biến nhất khiến một bản sửa phía máy khách lại làm rung chuyển bên lắng nghe.
Khớp tên đơn vị với thư mục mà nó tải
Upstream 2.6 cung cấp hai đơn vị mẫu, [email protected] và [email protected]. Mẫu máy chủ khởi động trong /etc/openvpn/server và tải %i.conf từ đó. Mẫu máy khách khởi động trong /etc/openvpn/client. Một phiên bản tên là roaming có thể tồn tại ở cả hai nơi cùng lúc, như máy chủ và như máy khách, với hai cấu hình không liên quan và không có liên kết nào giữa chúng ngoài chuỗi ký tự.
Hãy hỏi systemd thay vì hệ thống tệp, vì người đóng gói thêm các tệp bổ sung có thể thay đổi thư mục làm việc hoặc các đối số mà tệp nhị phân nhận được.
systemctl list-units --type=service 'openvpn-*@*' systemctl cat [email protected] systemctl show -p WorkingDirectory -p ExecStart [email protected]
Lệnh đầu tiên liệt kê mọi đơn vị đã tạo, kể cả những đơn vị thất bại và vẫn còn được nạp. Lệnh thứ hai in tệp đơn vị cùng với mọi phần ghi đè. Lệnh thứ ba là cách nhanh nhất để thấy hai sự thật quyết định câu hỏi: thư mục nơi tiến trình khởi động, và đường dẫn cấu hình đã trao cho nó.
Quyết định theo hướng gói tin, không theo tên giao diện
Một phiên bản máy chủ sở hữu ổ cắm lắng nghe và chấp nhận kết nối. Phương tiện truyền được mã hóa của nó là đầu vào cục bộ và đầu ra cục bộ trên Pi, trong khi lưu lượng nó chuyển tiếp cho người dùng đi theo đường chuyển tiếp và tuân theo một bộ quy tắc khác. Một phiên bản máy khách không có bên lắng nghe theo nghĩa đó: nó quay số tới một đối tác, nên phương tiện truyền được mã hóa của nó là đầu ra cục bộ hướng tới lớp dưới.
Sự khác biệt đó cho bạn biết một quy tắc thuộc về đâu. Một quy tắc khớp với giao diện bên trong chuỗi chuyển tiếp chỉ cho phép lưu lượng mà việc định tuyến đã chọn; nó không bao giờ tự chọn tuyến. Khi gói tin của người dùng chuyển vùng đi ra bằng đường sai, chuỗi cần kiểm tra là forward, không phải output.
Hãy xem các ổ cắm trước khi lý thuyết hóa. Một máy chủ gắn với udp/1194 cho thấy một ổ cắm lắng nghe. Máy khách cho thấy một liên kết tới địa chỉ của nhà cung cấp và không có gì lắng nghe.
ss -lunp | grep openvpn ss -unp state established '( dport = :1194 or sport = :1194 )'
Tuyến mặc định của một phiên bản có thể bắt lấy các phản hồi của bên kia
Một redirect-gateway do máy khách phía trên đẩy xuống sẽ cài một tuyến mặc định cạnh tranh với mọi thứ khác trên máy, bao gồm các phản hồi mà máy chủ gửi cho người dùng chuyển vùng. OpenVPN tạo một ngoại lệ cho địa chỉ đối tác của chính nó để đường hầm vẫn tiếp cận được, nhưng ngoại lệ đó không nói gì về một chiếc điện thoại trên mạng khách sạn.
Triệu chứng thường không đối xứng. Bắt tay hoàn tất, máy khách báo đã kết nối, và lưu lượng chết sau gói phản hồi đầu tiên. Định tuyến chính sách dựa trên nguồn, hoặc một dấu gói tin đặt trên phiên bản máy chủ bằng --mark, giữ hai luồng tách nhau; không cái nào tự nó là một bộ quy tắc đầy đủ, và cả hai đều cần các tuyến hợp lệ trong bảng mà chúng chọn.
Hãy kiểm tra quyết định cục bộ thay vì trạng thái đường hầm, vì hạt nhân chọn nguồn và giao diện trước khi OpenVPN nhìn thấy gói tin.
ip route get 203.0.113.44 ip rule show
Khởi động lại một vai và chứng minh vai kia vẫn sống
Thứ tự quan trọng khi cả hai vai phụ thuộc vào cùng một lớp dưới. Hãy khởi động lại máy khách trước nếu tuyến phía trên phải tồn tại trước khi lưu lượng người dùng có thể được chuyển tiếp, và khởi động lại máy chủ trước khi bạn chỉ thay đổi bên lắng nghe hoặc nhóm của nó. Dù thế nào, hãy xác nhận cả hai đơn vị sau đó, vì một lần khởi động lại thất bại có thể để vai kia chạy với trạng thái cũ.
Hãy viết điều kiện dừng trước khi thay đổi: việc mất đường hầm phía trên có chặn người dùng chuyển vùng, hay nó quay về đường lên riêng của Pi? DNS và IPv6 cũng cần một câu trả lời rõ ràng, vì một trình phân giải được đẩy xuống thường sống lâu hơn tuyến đã làm nó hữu ích.
systemctl restart [email protected] systemctl is-active [email protected] journalctl -u [email protected] -n 20 --no-pager
Chỉ chấp nhận thay đổi khi ba điều cùng đúng: một kết nối đi vào mới hoàn tất, một ứng dụng được chuyển tiếp tới đích qua lối ra dự kiến, và cả hai tiến trình vẫn báo đối tác mong đợi của chúng. Nếu một trong ba thất bại, bạn đã thay nhầm phiên bản hoặc nhầm tuyến, và bước tiếp theo là đọc lại đơn vị thay vì khởi động lại bất cứ thứ gì khác.