Tôi đã xóa câu trả lời ban đầu của mình, vì tôi không hoàn toàn tin tưởng rằng đó là chính xác. Tôi đã có một thời gian để thiết lập một mạng ảo ảo nhỏ để mô phỏng mạng đang được đề cập đến. Đây là tập hợp các quy tắc tường lửa hoạt động cho tôi (chỉ ở iptables-save
định dạng, chỉ cho nat
bảng):
-A PREROUTING -d 89.179.245.232/32 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
-A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.10/32 -p tcp -m multiport --dports 22,25,80,443 -j MASQUERADE
Nguyên POSTROUTING
tắc đầu tiên là cách chia sẻ kết nối internet đơn giản với mạng LAN. Tôi để nó ở đó cho đầy đủ.
Các PREROUTING
quy tắc và lần thứ hai POSTROUTING
quy tắc cùng nhau thành lập NAT thích hợp, để kết nối đến máy chủ thông qua địa chỉ IP bên ngoài có thể xảy ra, cho dù các kết nối có nguồn gốc từ bên ngoài hoặc từ bên trong mạng LAN. Khi các máy khách trên mạng LAN kết nối với máy chủ thông qua địa chỉ IP bên ngoài, máy chủ sẽ thấy các kết nối đến từ địa chỉ IP bên trong của bộ định tuyến (192.168.2.1).
Thật thú vị, hóa ra có một vài biến thể của quy tắc ĐIỂM thứ hai cũng hoạt động. Nếu mục tiêu được thay đổi thành -j SNAT --to-source 192.168.2.1
, hiệu ứng (không đáng ngạc nhiên) giống như MASQUERADE
: máy chủ thấy các kết nối từ các máy khách LAN cục bộ có nguồn gốc từ địa chỉ IP bên trong của bộ định tuyến . Mặt khác, nếu mục tiêu được thay đổi thành -j SNAT --to-source 89.179.245.232
, thì NAT vẫn hoạt động, nhưng lần này máy chủ sẽ thấy các kết nối từ các máy khách LAN cục bộ có nguồn gốc từ địa chỉ IP bên ngoài của bộ định tuyến (89.179.245.232).
Cuối cùng, lưu ý rằng bản gốc PREROUTING
/ DNAT
quy tắc của -i ppp0
bạn không hoạt động, bởi vì quy tắc không bao giờ khớp với các gói đến từ các máy khách LAN (vì chúng không vào bộ định tuyến qua ppp0
giao diện). Có thể làm cho nó hoạt động bằng cách thêm PREROUTING
quy tắc thứ hai chỉ cho các máy khách LAN nội bộ, nhưng nó sẽ không phù hợp (IMO) và vẫn cần phải tham chiếu rõ ràng đến địa chỉ IP bên ngoài.
Bây giờ, ngay cả sau khi đã đưa ra một giải pháp "kẹp tóc NAT" (hoặc "NAT loopback" hoặc "NAT Reflection" hoặc bất cứ điều gì người ta thích gọi nó) một cách chi tiết, tôi vẫn tin rằng một giải pháp DNS tách đôi - -với các máy khách bên ngoài phân giải IP bên ngoài và các máy khách bên trong phân giải IP bên trong --- sẽ là con đường được khuyến khích hơn. Tại sao? Bởi vì nhiều người hiểu cách DNS hoạt động hơn là hiểu cách NAT hoạt động và một phần lớn trong việc xây dựng các hệ thống tốt là chọn sử dụng các bộ phận có thể bảo trì. Thiết lập DNS có nhiều khả năng được hiểu và do đó được duy trì chính xác, hơn là thiết lập NAT phức tạp (tất nhiên là IMO).