Pertanyaan saya pada dasarnya sama dengan Hanya mengizinkan lalu lintas keluar tertentu pada antarmuka tertentu .
Saya memiliki dua antarmuka eth1
(10.0.0.2) dan wlan0
(192.168.0.2). Rute default saya adalah untuk eth1
. Katakanlah saya ingin semua https-traffic dilalui wlan0
. Sekarang jika saya menggunakan solusi yang disarankan dalam pertanyaan lain, lalu lintas https akan melalui wlan0
, tetapi masih akan memiliki sumber-alamat eth1
(10.0.0.2). Karena alamat ini tidak dapat dirutekan ke wlan0
gateway, jawaban tidak akan pernah kembali. Cara mudahnya adalah dengan hanya mengatur bind-addr dengan benar dalam aplikasi, tetapi dalam hal ini tidak berlaku.
Saya pikir saya perlu menulis ulang 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
Sekarang tcpdump melihat paket keluar baik-baik saja dan paket masuk tiba untuk 192.168.0.2, namun mereka mungkin tidak pernah berakhir dalam aplikasi, karena semua yang pernah saya lihat, adalah bahwa aplikasi sedang mengirim ulang paket-SYN, meskipun SYN- ACK sudah diterima.
Jadi saya pikir, mungkin saya perlu menulis ulang alamat yang masuk juga:
iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2
tapi itu juga tidak berhasil. Jadi saya agak macet di sini. Ada saran?