आने वाले के समान इंटरफ़ेस पर उत्तर दें?


51

मेरे पास दो इंटरफेस के साथ एक प्रणाली है। दोनों इंटरफेस इंटरनेट से जुड़े हैं। उनमें से एक को डिफ़ॉल्ट मार्ग के रूप में सेट किया गया है; इसका एक साइड इफेक्ट यह है कि यदि कोई पैकेट नॉन-डिफॉल्ट-रूट इंटरफेस पर आता है, तो उत्तर को डिफ़ॉल्ट रूट इंटरफेस के माध्यम से वापस भेजा जाता है। क्या कनेक्शन को ट्रैक करने और इसके द्वारा आए इंटरफ़ेस के माध्यम से उत्तर को वापस भेजने के लिए iptables (या कुछ और) का उपयोग करने का एक तरीका है?

जवाबों:


61
echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> dev <interface> table isp2
ip route add default via <gateway_IP> dev <interface> table isp2

उपरोक्त को ipfilter के साथ किसी भी पैकेट के अंकन की आवश्यकता नहीं है। यह काम करता है क्योंकि आउटगोइंग (उत्तर) पैकेट में आईपी पता होगा जो मूल रूप से आउटगोइंग पैकेट पर स्रोत (से) पते के रूप में 2 डी इंटरफ़ेस से कनेक्ट करने के लिए उपयोग किया गया था।


7
वाह, यह वही है जो मैं देख रहा था। यदि कोई भी आरएच-आधारित डिस्ट्रोस के लिए देख रहा है, तो आप संबंधित नियम और रूट कमांड को 'रूल-एथ0' या 'रूट-एथ0' (उदाहरण के लिए) नाम की फाइलों में डाल सकते हैं, जिसे ifup / ifdown पर जोड़ा या हटाया जाएगा। इन फ़ाइलों को ifcfg-eth0 फ़ाइल के साथ रखें। IPv6 के लिए, इसमें 'मार्ग6-eth0' कार्यक्षमता निर्मित है, लेकिन कोई 'नियम6-eth0' अभी तक नहीं बनाया गया है।
काइल ब्रेंटली

18
मेरे लिए यह केवल तभी काम किया जब मैंने कमांड devमें परम को छोड़ दिया ip rule, इसलिए चल रहा थाip rule add from <interface_IP> table isp2
cdauth

2
आप इन्हें तब बना सकते हैं, जब इंटरफ़ेस संबंधित इंटरफ़ेस के तहत आपके / etc / network / interfaces को जोड़कर up ip rule add from <interface_IP> table isp2और ऊपर जाता up ip route add default via <gateway_IP> dev ppp0 table isp2है।
g.rocket

4
मैं दूर करने के लिए किया था dev <interface>से ip ruleयह मेरा बॉक्स पर काम करने के लिए मिलता है। अगर मैं सही समझ रहा हूं, dev <interface>तो पैकेट को फ़िल्टर करना था जो किसी तरह गलत इंटरफ़ेस पर सेट था जिसे ओवरराइड मार्ग द्वारा सही इंटरफ़ेस से लड़ने की आवश्यकता थी लेकिन इंटरफ़ेस द्वारा फ़िल्टर करने वाला नियम ऐसा होने से रोक रहा था।
बिंकी

2
अधिकांश अन्य लोगों की तरह, मुझे इस काम के लिए कमांड dev <interface>से हटाना पड़ा ip rule। कृपया जवाब अपडेट करें! उस विस्तार को छोड़कर, यह एक आकर्षण की तरह काम करता था। बहुत बहुत धन्यवाद, @ खिलाड़ी!
मूनस्वीप

6

निम्न आदेश eth1पैकेट के लिए एक वैकल्पिक मार्ग तालिका बनाते हैं जिसमें 1 चिह्न होता है (पैकेट को छोड़कर लोकलहोस्ट)। ipआदेश से है iproute2 सूट (उबंटू: iproute iproute http://bit.ly/software-small स्थापित करें , iproute-डॉक स्थापित iproute-डॉक http://bit.ly/software-small )।

ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth1

नौकरी के अन्य आधे पैकेट को पहचानना है जो 1 अंक प्राप्त करना चाहिए; फिर iptables -t mangle -A OUTPUT … -j MARK --set-mark 1इन पैकेटों का उपयोग राउटिंग टेबल के माध्यम से करने के लिए करें। मुझे लगता है कि निम्नलिखित को यह करना चाहिए (गैर-डिफ़ॉल्ट-मार्ग इंटरफ़ेस के पते से 1.2.3.4 को बदलें):

iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1

मुझे यकीन नहीं है कि अगर यह पर्याप्त है, तो आने वाले पैकेटों पर एक और नियम की आवश्यकता होती है ताकि उन्हें ट्रैक करने के लिए कनेक्ट मॉड्यूल को बता सकें।


अच्छा लगा। मैं मार्किंग के बारे में सब भूल गया। मुझे वहीं मिलना चाहिए।
शॉन जे। गोफ

5

मेरे पास पीटर द्वारा सुझाए गए समाधान के साथ स्थानीय रूप से उत्पन्न पैकेट के मुद्दे थे, मैंने पाया है कि निम्नलिखित सही हैं:

echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> table isp2 priority 900
ip rule add from dev <interface> table isp2 priority 1000
ip route add default via <gateway_IP> dev <interface> table isp2
ip route add <interface_prefix> dev <interface> proto static scope link src <interface_IP> table isp2

नोट: आप उपर्युक्त 4 वीं पंक्ति के साथ सिंटैक्स समस्याओं में चला सकते हैं। ऐसे मामलों में 4 वें कमांड के लिए सिंटैक्स अब यह हो सकता है:

ip rule add iif <interface> table isp2 priority 1000

बहुत कोशिश की लेकिन मेरे परिदृश्य पर कुछ भी काम नहीं किया, इसके अलावा .. बहुत धन्यवाद।
अगगी

3

मैं मान रहा हूं कि आप लिनक्स चला रहे हैं और आगे, कि आप एक RedHat / CentOS- आधारित वितरण का उपयोग कर रहे हैं। अन्य यूनिक्स के और वितरण को समान चरणों की आवश्यकता होगी - लेकिन विवरण अलग होगा।


परीक्षण से शुरू करें (ध्यान दें कि यह @ पीटर के उत्तर के समान है। मैं निम्नलिखित मान रहा हूं:

  • eno0 isp0 है और इसमें समग्र डिफ़ॉल्ट गेटवे है
  • eno1 isp1 है और इसमें गेटवे 192.168.1.1 के साथ IP / रेंज 192.168.1.2/24 है

आदेश इस प्रकार हैं:

$ echo 200 isp1 >> /etc/iproute2/rt_tables
$ ip rule add from eno1 table isp1
$ ip route add default via 192.168.1.1 dev eno1 table isp1

फ़ायरवॉल किसी भी तरह से शामिल नहीं है। उत्तर पैकेट हमेशा सही आईपी से भेजे गए होंगे - लेकिन पहले गलत इंटरफ़ेस के माध्यम से भेजे जा रहे थे। अब सही IP से इन पैकेट्स को सही इंटरफ़ेस के माध्यम से भेजा जाएगा।


उपरोक्त काम को मानते हुए, आप अब नियम और मार्ग परिवर्तन को स्थायी बना सकते हैं। यह इस बात पर निर्भर करता है कि आप यूनिक्स के किस संस्करण का उपयोग कर रहे हैं। पहले की तरह, मैं एक आरएच / सेंटोस-आधारित लिनक्स वितरण मान रहा हूं।

$ echo "from eno1 table isp1" > /etc/sysconfig/network-scripts/rule-eno1
$ echo "default via 192.168.1.1 dev eno1 table isp1" > /etc/sysconfig/network-scripts/route-eno1

परीक्षण करें कि नेटवर्क परिवर्तन स्थायी है:

$ ifdown eno1 ; ifup eno1

यदि वह काम नहीं करता है, तो आरएच / सेंटोस के बाद के संस्करणों पर आपको दो विकल्पों में से एक के साथ जाने की आवश्यकता है:

  • डिफ़ॉल्ट NetworkManager.service का उपयोग न करें ; इसके बजाय network.service का उपयोग करें । मैंने इसके लिए आवश्यक सटीक चरणों का पता नहीं लगाया है। मैं कल्पना करूंगा कि इसमें सेवाओं को सक्षम / अक्षम करने के लिए मानक chkconfig या systemctl कमांड शामिल हैं।
  • NetworkManager-dispatcher-routing-rules पैकेज स्थापित करें

व्यक्तिगत रूप से मैं नियम पैकेज स्थापित करना पसंद करता हूं क्योंकि यह अधिक समर्थित दृष्टिकोण है।

$ yum install NetworkManager-dispatcher-routing-rules

एक और मजबूत सिफारिश यह है कि arp छानने को सक्षम किया जाए क्योंकि यह दोहरी नेटवर्क कॉन्फ़िगरेशन के साथ अन्य संबंधित मुद्दों को रोकता है। RH / CentOS के साथ, /etc/sysctl.conf फ़ाइल में निम्न सामग्री जोड़ें:

net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.