Nếu tôi nhớ không lầm, 'luồng' cho một gói đến sẽ là:
Tôi đã thử nghiệm điều này trên một số phiên bản EC2: một phiên bản công khai và một phiên bản riêng tư. Cả hai đều chạy apache với một trang web đơn giản, một trang nói "cổng" và một trang nói "nút".
Trước khi thêm quy tắc bảng IP, tôi có thể cuộn tròn một trang web đơn giản và trang web hiển thị chính xác trang web đó từ phiên bản 'cổng' của tôi. Sau đó tôi làm như sau trên cổng:
tiếng vang 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/10-forwarding.conf
Sudo sysctl -w net.ipv4.ip_forward=1
Sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.0.100.154
sudo iptables -A FORWARD -i eth0 -p tcp --dport 80 -j CHẤP NHẬN
sudo iptables -t nat -A POSTROUTING -p tcp --dport 80 -j SNAT --to 10.0.0.160
Điều này cho phép tôi cuộn tròn IP công cộng, nơi nó được NAT cho máy ảo nội bộ mục tiêu và được chuyển tiếp/NAT chính xác cho phản hồi. Tôi đã thiết lập mạng con riêng tư mà không có bất kỳ định tuyến bên ngoài nào, vì vậy trừ khi nó định tuyến đến phạm vi nội bộ, nó sẽ không đi đâu cả. Nó hoạt động như mong đợi!
Nếu bạn có nhiều giao diện thì bạn có thể khóa PHÍA TRƯỚC
quy tắc tốt hơn một chút với việc bổ sung -i eth0 -o wg0
đối với một số quy tắc, và SAU ĐƯỜNG
cai trị với một -o wg0
.
Vì vậy, tôi nghĩ rằng các quy tắc của bạn nên là:
#Â dnat để nhắm mục tiêu VPN VM
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination $WIREGUARD_CLIENT_ADDRESS
# chuyển tiếp giữa các giao diện cho liên kết mới
iptables -A FORWARD -i eth0 -o wg0 -p tcp -m multiport --dports 80,443 -m conntrack --ctstate MỚI -j CHẤP NHẬN
#Â cho phép chuyển tiếp lưu lượng liên quan - không cần cả hai bộ -i/-o vì chúng tôi chỉ có thể cho phép lưu lượng liên quan
iptables -A FORWARD -m state ĐƯỢC THIẾT LẬP,LIÊN QUAN -j CHẤP NHẬN
#Â định tuyến lại cho VPN
iptables -t nat -A POSTROUTING -o wg0 -p tcp -m multiport --dports 80,443 -j MASQUERADE