Một hub OpenVPN, ba mạng LAN: kế hoạch địa chỉ và các tệp iroute
Bốn tiền tố không chồng lấn, một tuyến nhân mỗi nhánh, một iroute mỗi chủ sở hữu. Trình tự công việc cho hub ba điểm mà âm thầm thất bại khi một tên bị sai.
Ba mạng LAN riêng có thể gặp nhau trên một hub mà không điểm nào cần biết cấu trúc bên trong của điểm khác, và toàn bộ thiết kế dựa trên bốn quyết định cấu hình ngắn gọn. Thứ khiến nó hoạt động không phải một tính năng giao thức lạ, mà là kế hoạch địa chỉ không ai phải đoán, cùng các tuyến theo từng máy khách cho hub biết nhánh nào sở hữu tiền tố nào. Sai một trong hai và đường hầm vẫn dựng lên, chính điều đó khiến sự cố trở nên khó hiểu.
Thực hiện các bước theo thứ tự. Mỗi bước phụ thuộc vào kế hoạch của bước trước, và không bước nào cần một tổ chức chứng thực mới.
Bắt đầu với một kế hoạch không ai phải đoán
Ghi ra bốn tiền tố không chồng lấn trước khi chạm vào tệp cấu hình: mạng LAN của chính hub, mạng LAN của từng nhánh và vùng địa chỉ cấp cho máy khách di động. Tính không chồng lấn là thứ giữ mọi thứ khác đơn giản, vì các dải giao nhau biến việc định tuyến thành câu đố khớp dài nhất mà không cấu hình theo từng máy khách nào sửa được. Sau đó xác nhận máy nào là cổng mặc định của từng mạng LAN, vì bộ định tuyến nhánh không phải cổng của mạng LAN của chính nó cần cài các tuyến từ xa ở một nơi hoàn toàn khác. Cuối cùng, cố định các tên đã xác thực nhận diện từng nhánh, vì những tên đó là chìa khóa để tra các tệp theo từng máy khách.
Một kế hoạch minh họa giữ vùng địa chỉ cách xa ba mạng LAN. Kế hoạch của bạn sẽ khác, và quy tắc cứng duy nhất là không hai dải nào chồng lấn.
Hub LAN 172.20.0.0/24
Branch A LAN 172.21.0.0/24
Branch B LAN 172.22.0.0/24
VPN pool 10.77.0.0/24
identity branch-a owns 172.21.0.0/24
identity branch-b owns 172.22.0.0/24Cho nhân của hub biết các nhánh nằm ở đâu
Hub cần hai thông tin cho mỗi nhánh: một tuyến nhân gửi tiền tố vào thiết bị đường hầm và một mục iroute cho tiến trình OpenVPN biết máy khách nào sở hữu nó. Chỉ tuyến nhân đưa gói tin tới đường hầm rồi dừng ở đó, vì tiến trình nền vẫn phải quyết định peer nào sẽ nhận chúng. Chỉ mục iroute để các gói tin đó trong nhân mà không có tuyến nào để theo. Cả hai dòng đều thuộc cấu hình mà tiến trình nền thực sự nạp, và điều đó đáng được xác minh trước khi gỡ lỗi bất cứ thứ gì khác.
dev tun
topology subnet
server 10.77.0.0 255.255.255.0
disable-dco
route 172.21.0.0 255.255.255.0
push "route 172.20.0.0 255.255.255.0"
client-config-dir /etc/openvpn/ccd
route 172.22.0.0 255.255.255.0Giữ client-to-client tắt khi nhân phải là điểm thực thi quy tắc. Tùy chọn đó chuyển tiếp lưu lượng giữa các peer bên trong tiến trình nền, điều này tiện lợi và cũng có nghĩa là các quy tắc chuyển tiếp của bạn không bao giờ thấy luồng đó. Mọi thứ bên dưới giả định nhân thấy mọi gói tin giữa các nhánh.
Cấp cho mỗi nhánh các tuyến nó cần
Mỗi nhánh cần tuyến tới các nhánh khác và tới mạng LAN của hub, và không cần tuyến cho mạng LAN được kết nối của chính nó. Đẩy các tiền tố từ xa từ hub thay vì dán chúng vào từng bộ định tuyến, nhờ đó một điểm thứ tư về sau chỉ cần một tệp mới theo từng máy khách thay vì bốn chỉnh sửa. Tệp theo từng máy khách cũng mang dòng iroute, giữ quyền sở hữu và quảng bá ở cùng một chỗ. Làm cho thư mục và các tệp của nó đọc được theo mô hình đặc quyền của máy chủ, nếu không việc tra cứu thất bại mà không có thông báo.
# /etc/openvpn/ccd/branch-a
iroute 172.21.0.0 255.255.255.0
push "route 172.22.0.0 255.255.255.0"Một điểm thứ tư theo cùng mẫu: một tên đã xác thực riêng, một tiền tố được sở hữu, một tuyến nhân trên hub, một mục iroute và quảng bá chỉ tới những điểm được phép chạm tới nó.
Kiểm tra cả hai chiều trước khi nói đã xong
Bật chuyển tiếp IPv4 trên cả ba bộ định tuyến, sau đó xác nhận tường lửa cho phép các luồng dự định ở cả hai chiều, vì một bài kiểm tra một chiều thường qua với đường về bị hỏng nhiều hơn bất cứ ai mong đợi. Giữa các điểm không cần dịch địa chỉ nguồn, và việc giữ nguyên nguồn gốc chính là thứ cho phép mỗi nhánh áp dụng chính sách riêng của mình cho một yêu cầu.
Kiểm tra từ một máy chủ trên mạng LAN của nhánh này tới một dịch vụ trên nhánh khác, rồi đảo chiều, rồi kiểm tra từ một nhánh tới mạng LAN của hub. Ba kết quả đó là những bằng chứng khác nhau, và không kết quả nào ngụ ý các kết quả còn lại. Nếu bộ định tuyến nhánh không phải cổng mặc định của mạng LAN nó, hãy cài các tiền tố từ xa trên cổng thật và bao gồm cả vùng địa chỉ khi máy khách đường hầm cần bắt đầu kết nối vào mạng LAN đó.
Ghi lại kế hoạch, các tệp theo từng máy khách và các quy tắc tường lửa thành một tài liệu duy nhất, vì lần thêm điểm tiếp theo sẽ được đánh giá dựa trên chúng.
Thiết kế giữ được sự thống nhất vì mỗi lớp có một nhiệm vụ: kế hoạch giữ các tiền tố duy nhất, tuyến nhân di chuyển gói tin, iroute gọi tên chủ sở hữu và tường lửa quyết định điều gì được phép. Khi có thứ gì hỏng, danh sách đó cũng là thứ tự để kiểm tra.