Masquerade hay định tuyến theo chính sách: lưu lượng LAN qua cổng VPN
Một cổng Linux có thể ẩn nguồn LAN sau địa chỉ đường hầm hoặc định tuyến chúng nguyên vẹn. Lựa chọn phụ thuộc vào ai sở hữu phía xa và tuyến quay về của nó.
Đặt cả một LAN sau đường hầm VPN là phần dễ; quyết định phía xa nhìn thấy các máy khách đó thế nào thì không. Masquerade ghi lại mọi nguồn LAN thành địa chỉ đường hầm của cổng, nên đầu xa chỉ trả lời một peer. Định tuyến theo chính sách giữ nguyên địa chỉ gốc và đòi hỏi phía xa biết cách đến chúng. Không cái nào là mặc định; lựa chọn phụ thuộc vào ai sở hữu phía xa và danh tính theo thiết bị có quan trọng không.
Hai thiết kế hứa hẹn những điều khác nhau
Masquerade thu gọn LAN thành một máy chủ nhìn thấy được: cổng. Mạng xa trả lời đúng địa chỉ đó, và cổng dịch các phản hồi trở lại máy khách đã khởi tạo luồng. Phía xa không cần tuyến đến các tiền tố riêng của bạn, nhờ vậy thiết kế này tồn tại được với nhà cung cấp từ chối mang chúng. Cổng cũng trở thành nguồn của mọi kết nối, nên phía xa không phân biệt được hai máy khách.
Định tuyến theo chính sách giữ nguyên địa chỉ của từng máy khách. Mạng xa thấy nguồn thật và có thể ghi lại, áp quy tắc theo từng máy chủ hoặc gửi phản hồi trực tiếp đến địa chỉ đó. Khả năng hiển thị đó chính là toàn bộ mục đích, và nó đi kèm một nghĩa vụ: phía xa phải có tuyến cho tiền tố LAN quay ngược qua đường hầm. Hãy lập kế hoạch tuyến đó trước khi bật quy tắc, vì đường hầm vẫn sẽ dựng lên và chỉ các phản hồi là thiếu.
Các kiểu hỏng khác nhau nhiều như những lời hứa. Thiếu quy tắc masquerade sinh ra các gói đi ra với nguồn riêng và không bao giờ quay lại. Thiếu tuyến quay về cho cùng triệu chứng khi định tuyến theo chính sách, nhưng việc sửa thuộc về router phía xa chứ không phải cổng.
Masquerade: một peer ở phía xa
Đường masquerade có một thứ tự quan trọng. Phải bật chuyển tiếp trước khi bất kỳ quy tắc NAT nào có ích, bảng lọc phải cho phép đi qua cả hai chiều, và chỉ khi đó bản dịch mới áp dụng trên giao diện đường hầm.
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i eth1 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Các máy khách vẫn cần một đường đến cổng. Hoặc cổng là router mặc định của chúng, hoặc chúng mang một tuyến cụ thể cho tiền tố xa; nếu một router riêng vẫn là mặc định, router đó cần tuyến tĩnh đến các đích của đường hầm, nếu không gói sẽ đi nhầm chặng trước khi cổng nhìn thấy.
DNS là một quyết định riêng. Một bộ phân giải ở phía xa chỉ trả lời nếu phản hồi của nó có thể quay về máy khách. Dưới masquerade, truy vấn trông như đến từ cổng, nên đường quay về của bộ phân giải đã được bảo đảm; dưới định tuyến theo chính sách, bộ phân giải cần cùng tuyến quay về như mọi dịch vụ xa khác.
Định tuyến theo chính sách: giữ nguồn, thêm tuyến quay về
Định tuyến theo chính sách bắt đầu bằng một bảng và một quy tắc chọn bảng đó. Lưu lượng vào từ giao diện LAN được gửi đến một bảng riêng, và bảng đó mang tuyến mặc định qua đường hầm. Bảng chính vẫn nguyên vẹn, nên lưu lượng do chính cổng tạo ra có thể đi theo đường khác.
ip rule add iif eth1 table vpn
ip route add default dev tun0 table vpn
Sau đó phía xa phải định tuyến tiền tố LAN quay lại qua đường hầm. Đó là cấu hình trên router phía xa, không phải trên cổng này. Cổng cũng phải chấp nhận các phản hồi đến trên giao diện khác với điều bảng chính dự đoán; lọc đường ngược lỏng (rp_filter đặt thành 2) là điều chỉnh thông thường khi chế độ nghiêm ngặt loại bỏ những gói đó.
Khi hai đường hầm cùng hoạt động, hãy gắn thẻ cho từng luồng khi vào và để thẻ chọn bảng. Một quy tắc chỉ nhìn giao diện vào sẽ gửi lưu lượng của cả hai đường hầm vào cùng một bảng, nên đường hầm thứ hai đánh cắp luồng của đường hầm đầu. Hãy kiểm tra thẻ đó bằng một kết nối sống qua lần kết nối lại, vì đó là lúc chính sách hỗn hợp lộ ra.
Quyết định theo quyền sở hữu và theo những gì phía xa ghi lại
Nếu đường hầm kết thúc ở nhà cung cấp, hãy dùng masquerade. Nhà vận hành đó sẽ không định tuyến các dải LAN riêng của bạn, và không có lý do để phân biệt từng máy khách sau cổng của bạn. Một peer nhìn thấy được là mô hình duy nhất mà chính sách của họ hỗ trợ, nên hãy trao cho họ điều đó và giữ bản dịch ở phía biên của bạn. Nhà cung cấp thấy một peer, đúng như chính sách của họ mong đợi, và các máy khách của bạn thừa hưởng danh tính duy nhất đó.
Nếu cả hai đầu là của bạn và các dịch vụ xa hành động dựa trên địa chỉ nguồn, định tuyến theo chính sách xứng đáng có thêm tuyến của nó. Khi đó quy tắc tường lửa, truy cập theo người dùng và nhật ký kiểm toán có thể phân biệt các máy khách. Nếu phía xa chỉ cần khả năng tiếp cận, masquerade đơn giản hơn và loại bỏ cả một lớp lỗi tuyến quay về.
Các thiết kế lai là bình thường: định tuyến theo chính sách trong mạng của bạn, masquerade ở biên nhà cung cấp. Điều quan trọng là ghi lại chặng nào dịch và chặng nào định tuyến, vì một quy tắc NAT vô tình thêm cho một máy khách sẽ ẩn nguồn khỏi mọi máy khách trong cùng chuỗi.
Hãy xác minh từ một máy khách, rồi từ máy khách thứ hai
Chạy bài kiểm tra ở nơi lưu lượng bắt đầu. Kiểm tra tuyến mà máy chủ dùng, quan sát gói xuất hiện trên giao diện đường hầm và xem conntrack cho bản dịch. Trình tự đó chứng minh gói đã đi đúng đường dự định, chứ không chỉ là đã đến một nơi nào đó.
Lặp lại bài kiểm tra sau khi kết nối lại. Một quy tắc masquerade nêu tên giao diện sẽ sống sót qua địa chỉ đường hầm mới; quy tắc nêu địa chỉ cũ thì không. Sau đó kiểm tra máy chủ LAN thứ hai, vì một thiết kế chạy trên một máy thường phụ thuộc vào tuyến của chính máy đó chứ không phải chính sách của cổng.
Ghi lại mô hình đã chọn, nguồn đã dịch hoặc giữ nguyên và chủ sở hữu tuyến quay về vào ghi chú của cổng. Nếu không, người tiếp theo thêm máy khách hoặc đường hầm sẽ đoán, và đoán chính là cách một thiết lập LAN-tới-VPN đang chạy trở thành một phần.