मेरे होम सर्वर में दो मुख्य इंटरफेस हैं, eth1
(एक मानक इंटरनेट कनेक्शन) और tun0
(एक ओपनवीपीएन सुरंग)। मैं iptables
यूआईडी 1002 के स्वामित्व वाली एक स्थानीय प्रक्रिया द्वारा उत्पन्न सभी पैकेटों के माध्यम से बाहर निकलने के लिए tun0
, और अन्य सभी पैकेटों के माध्यम से बाहर निकलने के लिए उपयोग करना चाहता हूं eth1
।
मैं आसानी से मिलान पैकेट को चिह्नित कर सकता हूं:
iptables -A OUTPUT -m owner --uid-owner 1002 -j MARK --set-mark 11
अब, मैं 11 के साथ चिह्नित पैकेटों से मिलान करने के लिए POSTROUTING श्रृंखला (संभवत: टेबल के लिए संभवत:) में कुछ नियम रखना चाहता हूं tun0
, इसके बाद एक नियम है, जो सभी पैकेटों से मेल खाता है और उन्हें भेजता है eth1
।
मुझे लक्ष्य लक्ष्य मिला, लेकिन यह केवल स्रोत इंटरफ़ेस को फिर से लिखने के लिए लगता है (जब तक कि मैं इसे गलत तरीके से नहीं पढ़ रहा हूं)।
क्या iptables इसके लिए सक्षम है? क्या मुझे इसके बजाय रूटिंग टेबल (इसके माध्यम से ip route
या सिर्फ विरासत route
कमांड) के साथ गड़बड़ करना है?
संपादित करें: मैंने सोचा कि शायद मुझे अधिक जानकारी प्रदान करनी चाहिए। मेरे पास वर्तमान में कोई अन्य iptables नियम नहीं हैं (हालांकि मैं भविष्य में असंबंधित कार्यों को करने के लिए कुछ नियम बना सकता हूं)। इसके अलावा, का उत्पादन ip route
है:
default via 192.168.1.254 dev eth1 metric 203
10.32.0.49 dev tun0 proto kernel scope link src 10.32.0.50
85.17.27.71 via 192.168.1.254 dev eth1
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.73 metric 203
मैंने रूटिंग टेबल को नहीं छुआ है - यह वर्तमान में कैसा है (हालांकि यह काफी गंदा दिखता है)। मुझे क्षमा करें, लेकिन मेरे पास route
इस मशीन पर स्थापित विरासत आदेश नहीं है ।
और निश्चित रूप से आउटपुट ip addr
, eth0 और eth2 को नजरअंदाज किया जा सकता है - वे एनआईसी हैं जिनका उपयोग वर्तमान में नहीं किया जा रहा है:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 1c:6f:65:2a:73:3f brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:1b:21:9d:4e:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.73/24 brd 192.168.1.255 scope global eth1
inet6 fe80::21b:21ff:fe9d:4ebb/64 scope link
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:1b:21:6a:c0:4b brd ff:ff:ff:ff:ff:ff
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/none
inet 10.32.0.50 peer 10.32.0.49/32 scope global tun0
संपादित करें: मैंने कुछ काम कर लिया है, लेकिन यह चिन्हित पैकेटों को टू0 पर अग्रेषित नहीं कर रहा है। असल में, मैंने एक तालिका (11) जोड़ी, और इस्तेमाल की:
ip route add table 11 via 10.32.0.49 dev tun0
ip rule add priority 10000 fwmark 11 table 11
जब मैं बस करता हूं sudo -u user1000 wget -qO- whatismyip.org
, मुझे अपने घर का बाहरी आईपी पता मिलता है, लेकिन अगर मैं करता हूं, तो मुझे sudo -u user1002 wget -qO- whatismyip.org
अपने घर का आईपी पता भी मिलता है (लेकिन मुझे ओपनवीपीएन सुरंग के दूसरे छोर पर आईपी मिलना चाहिए)।
रनिंग iptables -vL
यह पुष्टि करता है कि पैकेट अंकन नियम से मेल खा रहे हैं, लेकिन वे रूटिंग नियम का पालन नहीं करते हैं।
संपादित करें: मैंने इस पर एक लंबा समय बिताया है, और हालांकि यह अभी भी काम नहीं करता है, मुझे लगता है कि मैं थोड़ा करीब हूं।
Iptables नियम को mangle
तालिका की OUTPUT श्रृंखला में होना चाहिए । मुझे लगता है कि मुझे nat
स्रोत का पता सेट करने के लिए तालिका की पोस्टिंग श्रृंखला में एक मास्टर नियम की भी आवश्यकता है । हालाँकि, OUTPUT के मैनल के बाद होने वाली री-रूटिंग सही तरीके से काम नहीं कर रही है।
मैंने अब इस पर 5 घंटे बिताए हैं, इसलिए मैं एक ब्रेक ले रहा हूं और शायद आज रात या कल कुछ समय बाद वापस आऊंगा।