AWS VPC + IPtables + NAT: पोर्ट अग्रेषण काम नहीं कर रहा है


10

कल, मैंने यहां एक प्रश्न पोस्ट किया था लेकिन मुझे लगता है कि मेरे शब्दों में पर्याप्त स्पष्ट नहीं था। BTW, यह प्रश्न डुप्लिकेट नहीं है।

मेरे पास नीचे की तरह AWS VPC सेटअप है।

यहाँ छवि विवरण दर्ज करें

लक्ष्य / समस्या : इंटरनेट से सर्वर ए पर एसएसएच। और यह काम नहीं कर रहा है।

सर्वर A निजी सबनेट में है और इसलिए मैं अपने नैट उदाहरण पर iptables NATing को सक्षम करना चाहता हूं ताकि मैं सीधे इंटरनेट से सेवर ए को ssh कर सकूं

मैं इसका और यही अनुसरण कर रहा हूं

मैं NAT उदाहरण पर कमांड से नीचे भागा:

NAT# iptables -t nat -A PREROUTING  -p tcp --dport 2222 -j DNAT --to-destination 10.0.1.243:22

NAT उदाहरण पर IP अग्रेषण सक्षम किया गया है:

NAT# sysctl  -p
net.ipv4.ip_forward = 1

MASQUERADE NAT उदाहरण पर चल रहा है:

NAT# iptables -t nat -vnL POSTROUTING
Chain POSTROUTING (policy ACCEPT 6 packets, 312 bytes)
 pkts bytes target     prot opt in     out     source               destination
  199 16466 MASQUERADE  all  --  *      eth0    10.0.0.0/16          0.0.0.0/0

इस परीक्षण मामले के लिए आवश्यक विभिन्न पहुँच की अनुमति देने के लिए AWS सुरक्षा समूहों को ठीक से कॉन्फ़िगर किया गया है।

समस्या निवारण:

मैं नेट 22 से सर्वर ए पर पोर्ट 22 पर टेलनेट कर सकता हूं। इसलिए एक्सेस अच्छा है।

जब मैं telnet 54.213.116.251 2222अपने लैपटॉप पर चलता हूं, तो मैं NAT पर tcpdump में नीचे प्रविष्टि देखता हूं:

NAT# tcpdump -n -i eth0 dst 10.0.1.243 and port 22
09:59:13.738316 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S], seq 1868541786, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
09:59:16.737009 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S], seq 1868541786, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
09:59:22.775567 IP xxx.xxx.xxx.xxx.51709 > 10.0.1.243.ssh: Flags [S], seq 1868541786, win 8192, options [mss 1460,nop,nop,sackOK], length 0

तो इसका मतलब है कि iptables पैकेट को रूट कर रहा है 10.0.1.243। (BTW, xxx.xxx.xxx.xxxमेरे लैपटॉप का सार्वजनिक आईपी पता है)

लेकिन जब मैं सर्वर A पर tcpdump चलाता हूं, तो मुझे ऐसा कुछ भी नहीं दिखता है 10.0.0.54जिसमें से NAT का आंतरिक / निजी IP पता हो ( और मुझे लगता है कि यह समस्या है ):

Server A# tcpdump  -n src 10.0.0.54
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 

लेकिन अगर मैं NAT उदाहरण के लिए सर्वर A से टेलनेट करता हूं, तो मुझे सर्वर A पर tcpdump में अच्छा सामान दिखाई देता है ( इसका मतलब है, मेरा समग्र PREROUTINGनियम अपेक्षित रूप से काम नहीं कर रहा है ):

Server A# tcpdump  -n src 10.0.0.54
05:01:47.500080 IP 10.0.0.54.44627 > 10.0.1.243.ssh: Flags [S], seq 2862522431, win 14600, options [mss 1460,sackOK,TS val 3013083 ecr 0,nop,wscale 7], length 0
05:01:47.501601 IP 10.0.0.54.44627 > 10.0.1.243.ssh: Flags [.], ack 760676524, win 115, options [nop,nop,TS val 3013083 ecr 12074896], length 0
05:01:47.535720 IP 10.0.0.54.44627 > 10.0.1.243.ssh: Flags [.], ack 22, win 115, options [nop,nop,TS val 3013092 ecr 12074928], length 0

निष्कर्ष:

NAT पर tcpdump आउटपुट से, ऐसा लगता है कि Iptables मेरे पैकेट को ठीक कर रहा है।

सर्वर ए पर टीसीपी डंप से, मुझे एनएटी से सर्वर ए तक अच्छी कनेक्टिविटी है।

लेकिन एंड-टू-एंड में, मैं अपने लैपटॉप से ​​सर्वर ए से कनेक्ट करने में सक्षम नहीं हूं।

( BTW, मैं SSH सुरंग और अन्य अच्छी चीजें जानता हूं। लेकिन मैं केवल Iptables चाहता हूं कि मुझे इसके साथ मदद मिले। )


2
क्या आपने अपने NAT उदाहरण पर स्रोत / गंतव्य जाँच अक्षम कर दी थी?
दुसान बजिक

इसका क्या मतलब है? कैसे करें जांच? मैंने पूरे Iptables मैन पेज को खोजा, लेकिन स्रोत / गंतव्य जाँच के बारे में बात नहीं करता (जब तक कि मुझे कुछ भी याद न हो।)
slayedbylucifer

आपको ऐसा AWS वेब कंसोल (या CLI) में करना होगा। docs.aws.amazon.com/AmazonVPC/latest/UserGuide/…
Dusan Bajic

धन्यवाद। मुझे लगता है कि यह DisabledNAT उदाहरण के लिए पहले से ही है ।
slayedbylucifer

जवाबों:


8

अंत में, मैंने इसे क्रैक किया !!!!

NAT उदाहरण पर, मुझे कमांड के नीचे बदलना पड़ा:

से:

iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/16 -j MASQUERADE

सेवा:

iptables -t nat -A POSTROUTING -j MASQUERADE

और यह काम किया !!!!

इसलिए, मैं सर्वरफॉल्ट पर एक नया प्रश्न जल्द ही बनाऊंगा, जिसमें यह पूछा जाएगा कि दो आदेशों का उपयोग करने के क्या फायदे और नुकसान हैं।


एक लाख में आदमी धन्यवाद। वही समस्या थी, वही .... हर कदम जगह पर था ... लेकिन यह "-o eth0" भी था। इसे हटा दिया, आकर्षण की तरह काम किया। लाख में धन्यवाद।
नेवैन

इसका कारण यह है कि काम करता है क्योंकि "-s 10.0.0.0/16" केवल स्रोत आईपी ​​के साथ पैकेट का अनुवाद करने के लिए कहता है 10.xxx मैं अनुमान लगा रहा हूं कि आपके घर का लैपटॉप आपके घर के नेटवर्क पर था और कुछ बाहरी आईपी से आ रहा था इसलिए एनएटी आपके लैपटॉप के अनुरोधों को अनदेखा कर रहा था। अन्य लोग linux कमांड लाइन पर "ip r" चलाना चाह सकते हैं यह देखने के लिए कि क्या eth0 वास्तव में उनके ईथरनेट डिवाइस का नाम है। यदि नहीं, तो इसे बदल दें जो भी आपके एथ डिवाइस का नाम है (उदाहरण के लिए। सुनिश्चित 192 या जो भी हो)।
रेयान शिलिंग्टन

ओह, इसके अलावा, मैंने iptables मैन पेज को पढ़कर उपरोक्त सीखा। यह वास्तव में अच्छा है और लंबे समय तक पढ़ा नहीं गया है। मैं इसकी पुरजोर सलाह देता हूँ। "मैन iptables" को कमांड प्रॉम्प्ट से चलाकर देखें, यह सब महिमा में है।
रयान शिलिंग्टन

7
  • सुनिश्चित करें कि आप अपने नेट बॉक्स के लिए सिक्योरिटी ग्रुप 2222से tcp पोर्ट इनबॉड की अनुमति दे रहे हैं0.0.0.0/0
  • सुनिश्चित करें कि आपके पास अपना VPC "रूट टेबल" सेटअप ठीक से है।
  • कम से कम दो अलग-अलग टेबल (एक निजी सबनेट से जुड़ा हुआ, एक सार्वजनिक सबनेट से जुड़ा हुआ)
  • आपके 10.0.1.0(निजी) सबनेट में रूट टेबल नियम होना चाहिए जैसे: गंतव्य:, 0.0.0.0/0लक्ष्य: "नेट बॉक्स"
  • आपके 10.0.0.0(सार्वजनिक) सबनेट में एक रूट टेबल नियम होना चाहिए जैसे: गंतव्य:, 0.0.0.0/0लक्ष्य: "इंटरनेट गेटवे"
  • सुनिश्चित करें कि आपके पास अपने NAT बॉक्स के लिए NIC पर स्रोत / गंतव्य जाँच अक्षम है , इसके बिना कोई नेटिंग मज़ा नहीं है। (मुझे पता है कि आपके पास यह पहले से ही है, लेकिन यह वास्तव में महत्वपूर्ण है, इसलिए भविष्य के दर्शक के लिए इसे शामिल करें)

  • सुनिश्चित करें कि आउटबाउंड पैकेट कहाँ जाना है:

    iptables --table nat --append POSTROUTING --source 10.0.0.0/16 --destination 0.0.0.0/0 --jump MASQUERADE

  • सुनिश्चित करें कि inboud पैकेट को 2222सही तरीके से फिर से तैयार करने के लिए:

    iptables --table nat --append PREROUTING --protocol tcp --dport 2222 --jump DNAT --to-destination 10.0.1.243:22


आपके हर एक सुझाव पहले से ही मौजूद हैं। धन्यवाद।
slayedbylucifer

1
मैंने इसे सभी चरणों को दिखाने के लिए अद्यतन किया
c4urself

धन्यवाद। आपके प्रयासों के लिए +1। आपकी MASQUERADEआज्ञा मेरे मामले में सहायक नहीं है। हो सकता है कि मुझसे कुछ छूट रहा हो। केवल MASQUERADEआदेश जो मुझे उड़ान देता है वह वही है जिसका मैंने अपने उत्तर में उल्लेख किया है ।
slayedbylucifer

यह सब बहुत अच्छी सलाह है, इसके अलावा यह काम नहीं करेगा क्योंकि आप अपने पहले iptables कमांड में केवल 10.xxx रूट कर रहे हैं। वह इंटरनेट से आने वाली किसी भी चीज़ को रूट करना चाहता है। नीचे देखें ओपी का अपना जवाब
रियान शिलिंग्टन

2

इस पोस्ट ने मुझे AWS NAT को समझने में बहुत मदद की। इसलिए मैंने जांच करना शुरू किया कि iptables -t nat -A POSTROUTING -j MASQUERADEयह क्या काम करता है।

खैर मैंने जो उत्तर पाया, वह उपरोक्त कथन है कि NAT बॉक्स को NAT को 'LAPTOP' IP को '10 .0.0.54 'तक स्रोत करने की अनुमति है, जबकि उसी समय गंतव्य NAT को 10.0.1.243 तक। इस समय निजी सबनेट बॉक्स केवल NAT डिवाइस से आने वाला ssh अनुरोध है। यह कमांड वास्तव में निजी सबनेट सर्वर की सुरक्षा को कम कर रहा है। नीचे बताए अनुसार ssh और NAT बॉक्स के माध्यम से निजी सबनेट एक्सेस को ठीक करने के लिए नीचे दिए गए कमांड का उपयोग करने की सिफारिश की गई है;

iptables --table nat --append POSTROUTING --source "INTERNET IP of the Laptop" --destination 10.0.1.243 --jump MASQUERADE

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