मेरा प्रश्न मूल रूप से एक ही है क्योंकि केवल कुछ इंटरफेस पर कुछ आउटबाउंड यातायात की अनुमति है ।
मेरे पास दो इंटरफेस eth1
(10.0.0.2) और wlan0
(192.168.0.2) हैं। मेरे डिफ़ॉल्ट मार्ग के लिए है eth1
। मान लीजिए कि मैं चाहता हूं कि सभी https-ट्रैफ़िक से गुज़रें wlan0
। अब अगर मैं दूसरे प्रश्न में सुझाए गए समाधान का उपयोग करता हूं, तो https ट्रैफ़िक से गुजर wlan0
जाएगा, लेकिन फिर भी eth1
(10.0.0.2) का स्रोत-पता होगा । चूंकि यह पता wlan0
गेटवे के लिए राउटेबल नहीं है , इसलिए उत्तर कभी वापस नहीं आएंगे। इसका आसान तरीका यह होगा कि आवेदन में ठीक से बाइंड-ऐड को सेट किया जाए, लेकिन इस मामले में यह लागू नहीं है।
मुझे लगता है कि मुझे 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
अब tcpdump आउटगोइंग पैकेट्स को ठीक-ठाक देखता है और 192.168.0.2 के लिए इनगेटिंग पैकेट्स आते हैं, हालाँकि वे शायद एप्लीकेशन में कभी खत्म नहीं होते हैं, क्योंकि मुझे जो भी देखने को मिलता है, वह यह है कि एप्लीकेशन SYN- पैकेट को फिर से तैयार कर रहा है, हालाँकि SYN- ACK पहले से ही प्राप्त किया गया था।
तो मैंने सोचा, शायद मुझे आने वाले पते को भी फिर से लिखना होगा:
iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2
लेकिन वह भी काम नहीं किया। इसलिए मैं यहां फंस गया हूं। कोई सुझाव?