Bộ điều hợp host-only tạo một mạng ảo cục bộ, và các đường hầm TUN được định tuyến chở gói IP giữa các địa chỉ. Không cái nào là cầu nối sang cái kia, vì thế một cấu hình hoạt động được phải nói rõ ai chuyển tiếp và tuyến quay về thuộc về ai. Nhầm hai phép gán đó, khách sẽ trả lời đường hầm bằng một nguồn mà máy khách đường hầm chưa bao giờ yêu cầu. Thiết kế dưới đây giữ hai tiền tố tách biệt và làm đường quay về rõ ràng.

Hai mạng, hai tiền tố

Cho nhóm đường hầm và mạng host-only những tiền tố khác nhau và đừng bao giờ dùng cái này thay cái kia. Trong ví dụ này nhóm VPN là 10.44.0.0/24 và mạng host-only là 192.168.99.0/24, với máy chủ ở 192.168.99.1 và một khách ở 192.168.99.20. Gán cùng tiền tố cho cả thiết bị TUN lẫn bộ điều hợp host-only không nối chúng lại. Nó tạo hai yêu cầu trên một dải địa chỉ, và bảng định tuyến sau đó trả lời cho yêu cầu mà nó tình cờ giữ lại.

Bộ điều hợp host-only tồn tại trên máy chủ và bên trong khách, và bản thân nó không có đường ra khỏi máy. Kết nối cầu và NAT có mức phơi nhiễm khác nhau, và chuyển sang chế độ cầu không phải điều kiện để tới một dịch vụ của khách.

Máy chủ đã giữ tuyến

Hãy xem cái gì đang có trước khi thêm bất cứ thứ gì. Máy chủ có một giao diện trên mạng host-only và một tuyến cho tiền tố đó, cả hai được tạo khi bộ điều hợp khởi động.

ip -br addr show
ip route show 192.168.99.0/24
sysctl net.ipv4.ip_forward

Dòng thứ ba là cơ chế biến máy chủ thành một chặng. Không có nó, gói đến từ đường hầm được gửi tới một mạng mà máy chủ tới được nhưng sẽ không chuyển tiếp. Chuyển tiếp là cần thiết và chưa đủ. Chính sách lọc vẫn quyết định một luồng cụ thể giữa giao diện đường hầm và giao diện host-only có được phép hay không, và quyết định đó thuộc về văn bản chứ không phải một chính sách mặc định mà không ai đọc.

Đẩy tuyến, rồi lọc những gì nó tới

Máy chủ có thể cấp tiền tố host-only cho các máy khách chấp nhận tuyến được đẩy, đây là cùng cơ chế dùng cho bất kỳ mạng con nào khác phía sau đường hầm.

push "route 192.168.99.0 255.255.255.0"
iptables -A FORWARD -i tun0 -o vboxnet0 -d 192.168.99.20 -p tcp --dport 5432 -j ACCEPT
iptables -A FORWARD -i vboxnet0 -o tun0 -s 192.168.99.20 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Hai quy tắc đó cho phép một dịch vụ theo một hướng và các câu trả lời của nó. Một tuyến tới toàn bộ tiền tố và một bộ lọc chỉ cho phép một cổng là sự kết hợp có chủ đích; một tuyến cộng với chấp nhận vô điều kiện là cách một dịch vụ phòng thí nghiệm trở thành dịch vụ lộ diện. Tuyến được đẩy cũng không phải là uỷ quyền. Máy khách chấp nhận nó, máy chủ chuyển tiếp nó, và tường lửa của khách cùng chính dịch vụ vẫn có tiếng nói.

Khách cần một đường quay về

Một khách được tới từ 10.44.0.x phải gửi câu trả lời tới địa chỉ host-only của máy chủ, hoặc máy chủ phải dịch nguồn. Việc nhận địa chỉ từ DHCP của VirtualBox không nói gì về cả hai cách bố trí.

ip route add 10.44.0.0/24 via 192.168.99.1 dev enp0s8
ip route get 10.44.0.15

Thêm tuyến đó bên trong khách giữ nguyên nguồn gốc, điều này giữ chính sách và nhật ký theo từng máy khách có ý nghĩa. Dịch nguồn có giới hạn trên máy chủ là phương án thay thế, và nó hoạt động, với cái giá là che giấu máy khách nào đã kết nối. Chồng lấn là chế độ hỏng còn lại. Một máy khách từ xa có LAN tại nhà đã dùng 192.168.99.0/24 sẽ đọc tuyến được đẩy như mạng của chính nó, và không thay đổi nào phía máy chủ sửa được sự mơ hồ đó. Đánh số lại một bên hoặc chọn một tiền tố khó trùng.

Thiết bị TUN chở gói IP, nên thêm một cổng mặc định bên trong khách không biến đường hầm thành một đoạn Ethernet với bộ điều hợp host-only. Cầu TAP là một thiết kế khác với hỗ trợ máy khách và quyền sở hữu địa chỉ riêng, và trộn hai mô tả dẫn tới những cấu hình không bao giờ hội tụ.

Xác minh, rồi làm cho nó sống qua lần khởi động lại

Thử một dịch vụ vô hại từ một máy khách từ xa thông thường, kiểm tra tuyến quay về của khách, và xác nhận rằng một dịch vụ bạn không cho phép bị từ chối chứ không phải chậm.

ss -lntp '( sport = :5432 )'
conntrack -L | grep 192.168.99.20

Sau đó khởi động lại dịch vụ VPN và mạng của máy ảo, và lặp lại ba kiểm tra như cũ. Một tuyến thêm bằng tay tồn tại đến lần khởi động lại tiếp theo, và một cấu hình chỉ chạy trong phiên ấm không phải là thiết kế. Ghi lại hai tiền tố, chính sách chuyển tiếp và tuyến của khách cùng nhau. Ai thêm máy ảo tiếp theo sẽ cần cả ba và nếu không sẽ khám phá lại chúng từng kết nối thất bại một.

Bài viết liên quan