Câu hỏi của tôi về cơ bản giống như Chỉ cho phép lưu lượng truy cập bên ngoài nhất định trên các giao diện nhất định .
Tôi có hai giao diện eth1
(10.0.0.2) và wlan0
(192.168.0.2). Tuyến đường mặc định của tôi là cho eth1
. Giả sử tôi muốn tất cả lưu lượng https đi qua wlan0
. Bây giờ nếu tôi sử dụng giải pháp được đề xuất trong câu hỏi khác, lưu lượng https sẽ đi qua wlan0
, nhưng vẫn sẽ có địa chỉ nguồn là eth1
(10.0.0.2). Vì địa chỉ này không thể định tuyến cho wlan0
cổng, câu trả lời sẽ không bao giờ quay trở lại. Cách dễ dàng là chỉ cần đặt bind-addr đúng cách trong ứng dụng, nhưng trong trường hợp này nó không được áp dụng.
Tôi nghĩ rằng tôi cần phải viết lại src-addr:
# first mark it so that iproute can route it through wlan0
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2
Bây giờ tcpdump thấy các gói gửi đi tốt và các gói đang đến 192.168.0.2, tuy nhiên chúng có thể không bao giờ kết thúc trong ứng dụng, bởi vì tất cả những gì tôi từng thấy, là ứng dụng đang gửi lại gói SYN, mặc dù SYN- ACK đã được nhận.
Vì vậy, tôi nghĩ, có lẽ tôi cũng cần phải viết lại địa chỉ đến:
iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2
nhưng điều đó cũng không hiệu quả. Vì vậy, tôi bị mắc kẹt ở đây. Bất kỳ đề xuất?