सवाल मैक ओएस एक्स के बराबर iptables


मैं अनुरोधों को अग्रेषित करना चाहता हूं 192.168.99.100:80 सेवा मेरे 127.0.0.1:8000। इस तरह मैं इसे लिनक्स का उपयोग करके करूँगा iptables:

iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000

मैकोज़ एक्स में मैं वही काम कैसे करूं? मैंने एक संयोजन की कोशिश की ipfw बिना सफलता के आदेश:

ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80

(मेरे लिए सफलता एक ब्राउज़र को इंगित कर रहा है http://192.168.99.100 और एक विकास सर्वर से प्रतिक्रिया प्राप्त कर रहा हूं जिसे मैं चल रहा हूं localhost:8000)


53
2018-01-13 20:46


मूल


क्या हम ओएसएक्स क्लाइंट या सर्वर से बात कर रहे हैं? - Scott Pack
यह बर्फ तेंदुए है। - nafe
क्या कोई कारण है कि आप अपने वेब सर्वर को केवल 192.168.99.100:80 पर सुनने के लिए कॉन्फ़िगर नहीं कर सकते हैं? - Zoredache
@Zoredache पोर्ट 80 पर सुनना सुडो और कुछ वेबसर्वर विशेषाधिकारों को सुरक्षित रूप से पर्याप्त रूप से चलाने के लिए पर्याप्त विशेषाधिकार नहीं छोड़ते हैं। - Navin


जवाब:


तो मुझे पता चला  ऐसा करने का तरीका। मुझे यकीन नहीं है कि यह पसंदीदा तरीका है लेकिन यह काम करता है! अपने पसंदीदा खोल पर:

sudo ifconfig lo0 10.0.0.1 alias
sudo ipfw add fwd 127.0.0.1,9090 tcp from me to 10.0.0.1 dst-port 80

(उपनाम lo0 प्रतीत होता है कि गायब हिस्सा है)

यदि आप इस नए उपनाम को इंगित करने के लिए एक (नकली) डोमेन चाहते हैं तो सुनिश्चित करें कि / etc / hosts में पंक्ति है:

10.0.0.1 www.your-domain.com

32
2018-01-24 00:34



आईपीएफडब्ल्यू योसामेट (मैक) पर काम नहीं करेगा और थोड़े से नापसंद लगता है - Vadorequest


मैं इसका उपयोग कर काम करने में सक्षम था ifconfig तथा pfctl मैक 10.10.2 पर आदेश। निम्नलिखित दृष्टिकोण के साथ मैं सफलतापूर्वक मैपिंग कर रहा हूं 127.0.0.1:3000 सेवा मेरे mydomain.com स्थानीय रूप से मेरी मशीन पर।

अपनी कमांड लाइन में कनेक्शन को अग्रेषित करने के लिए निम्न दो आदेश दर्ज करें 127.0.0.1:3000 सेवा मेरे 10.0.0.1:

sudo ifconfig lo0 10.0.0.1 alias
echo "rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port 80 -> 127.0.0.1 port 3000" | sudo pfctl -ef -

फिर अपना संपादित करें /etc/hosts या /private/etc/hosts फ़ाइल करें और अपने डोमेन को मैप करने के लिए निम्न पंक्ति जोड़ें 10.0.0.1

10.0.0.1 mydomain.com

अपनी मेजबान फ़ाइल को सहेजने के बाद अपने स्थानीय DNS को फ्लश करें:

sudo discoveryutil udnsflushcaches

अब खोलो mydomain.com ब्राउज़र में और आप अपने लोकहोस्ट पोर्ट पर होस्ट किए गए सर्वर को देख पाएंगे (यानी। 127.0.0.1:3000)। असल में यह प्रक्रिया एक मानचित्र है <ip>:<port> एक नए के लिए <ip> ताकि आप आईपी को होस्ट कर सकें।


22
2018-03-06 17:24



बस एक टैक्सी हैकी, लेकिन काम पूरा हो जाता है। अच्छा प्रदर्शन। - Joey Carson
धन्यवाद। आप उपनाम और अग्रेषण को पूर्ववत कैसे करेंगे? - Carlos Nuñez
नमस्ते sudo discoveryutil udnsflushcaches मुझे देता है command not foundलेकिन यह अभी भी प्रविष्टि से सही ढंग से मेल खाता है। लेकिन मैं एक दूसरा बंदरगाह कैसे मैप कर सकता हूँ? मैंने आईडी के साथ चरण 1 + 2 करने की कोशिश की: 10.0.0.2 और एक और बंदरगाह, लेकिन यह हमेशा केवल अंतिम कनेक्शन लेता है। तो अगर मैं आखिरी करता हूं 10.0.0.1 और port 3000 यह आगे 3000, अगर मैं आखिरी करता हूं 10.0.0.2 और बंदरगाह 4000 यह आगे 4000। मेरे में /private/etc/hosts मैंने दोनों प्रविष्टियों को (आईडी) अलग आईडी के साथ लिखा था। - Andi Giga
काम करता है, लेकिन जब मैं ओएसएक्स को पुनरारंभ करता हूं तो मुझे फिर से इसकी आवश्यकता होती है .... इसे किसी भी चीज़ को स्थायी रूप से सहेजने के लिए? - Kasper
कृपया अपडेट करें sudo dscacheutil -flushcache - northtree


यह मेरे लिए अच्छा काम किया:

  • सिस्टम प्राथमिकताओं के माध्यम से फ़ायरवॉल सक्षम करें
  • यहां वर्णित आईपीएफडब्ल्यू स्टार्टअप फ़ाइल बनाएं: https://serverfault.com/a/235124/94860
  • निम्न पंक्ति को स्टार्टअप फ़ाइल में जोड़ें, जैसा कि यहां वर्णित है: http://xeiam.com/port-forwarding-80-to-8080-using-ipfw-on-mac-os-x/

    add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in


3
2017-08-05 17:50





मुझे भी हाल ही में इसी तरह की चीज करना पड़ा, और खोज में इस जवाब पर आया। दुर्भाग्य से, नाफे का जवाब उपयोग करता है ipfw जो अब ओएसएक्स में बहिष्कृत और अनुपलब्ध है; और केविन लीरी का जवाब वास्तव में थोड़ा सा हैकिश है। तो मुझे कुछ बेहतर (क्लीनर) बनाना पड़ा और इसे यहां पोस्टरिटी के लिए साझा करने का फैसला किया। यह उत्तर काफी हद तक उल्लिखित दृष्टिकोण पर आधारित है यह जिस्ट

चूंकि ओपी का उल्लेख है, 1 9 2.168.99.100 पर एक ब्राउज़र को इंगित करने से स्थानीयहोस्ट पर सर्वर से प्रतिक्रिया प्राप्त होनी चाहिए: 8000। उपनाम जोड़ना ifconfig वास्तव में आवश्यक नहीं है, pfctl अकेला पर्याप्त है: इसे प्राप्त करने के लिए pf.conf पर फ़ाइल /etc/pf.conf संशोधित करने की जरूरत है।

सबसे पहले हम एक नई एंकर फ़ाइल बनाते हैं (सुडो के साथ) (चलो इसे कॉल करें redirection) पर: /etc/pf.anchors/redirection। यह मूल रूप से एक नियमित पाठ फ़ाइल है और इसमें निम्न पंक्ति शामिल है (जैसे केविन लीरी के जवाब में): rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000। एक बार नई एंकर फ़ाइल बनाई जाने के बाद, इसे संदर्भित करने की आवश्यकता है pf.conf फ़ाइल। को खोलो pf.conf सूडो के साथ फ़ाइल और जोड़ें rdr-anchor "redirection" अंतिम आरडीआर-एंकर लाइन के बाद (जो है rdr-anchor "com.apple/*") और जोड़ load anchor "redirection" from "/etc/pf.anchors/redirection" अतं मै।

आखिरकार, यह है कि pf.conf फ़ाइल इस तरह दिखनी चाहिए:

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "redirection"  #added for redirection/port forwarding
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/redirection"  #added for redirection/port forwarding

और यह लगभग है। बस पुनरारंभ करें pfctl जारी करके sudo pfctl -d इसे पहले और फिर अक्षम करने के लिए sudo pfctl -fe /etc/pf.confइसे फिर से शुरू करने के लिए।

अब, यदि आपको प्रत्येक पुनरारंभ करने के बाद स्वचालित रूप से ऐसा होने की आवश्यकता है, तो काम करने के लिए एक और छोटा काम करने की आवश्यकता है: लॉन्च डिमन pfctl अद्यतन करने की आवश्यकता है (संदर्भित गिस्ट का उल्लेख है कि पीएफ स्वचालित रूप से बूट पर सक्षम है, हालांकि यह कोड को देखने से मामला प्रतीत नहीं होता है)। खुला (सुडो के साथ) System/Library/LaunchDaemons/com.apple.pfctl.plist और इसके लिए देखो:

<array>
          <string>pfctl</string>
          <string>-f</string>
          <string>/etc/pf.conf</string>
</array>

और रेखा जोड़ें <string>-e</string> आखिरकार इसे इस तरह बनाते हैं:

<array>
         <string>pfctl</string>
         <string>-e</string>
         <string>-f</string>
         <string>/etc/pf.conf</string>
</array>

इससे हो जाना चाहिए।

चेतावनी: ऐप्पल अब लॉन्च राक्षस फ़ाइलों को इस तरह बदलने की अनुमति नहीं देता है (सुडो, न ही chmod, और न ही कुछ और के साथ)। केवल रास्ते के साथ टिंकर करने का तरीका है सिस्टम इंटीग्रटी संरक्षण सेटिंग्स: रिकवरी मोड में बूट करें और टर्मिनल लॉन्च करें। एसआईपी स्थिति की जांच करें csrutil status, यह आमतौर पर सक्षम होना चाहिए। इसे अक्षम करें csrutil disable और सामान्य मोड में रीबूट करें और फिर ऊपर चर्चा के अनुसार प्लेलिस्ट फ़ाइल में परिवर्तन करें। एक बार हो जाने पर, पुनर्प्राप्ति मोड पर वापस जाएं और जारी करके सुरक्षा (यह उचित कारण के लिए जगह में है) को फिर से सक्षम करें csrutil enable

स्पष्टीकरण: कोई जारी करके जांच कर सकते हैं ifconfig आदेश है कि 127.0.0.1 स्थानीयहोस्ट lo0 के लिए पहले से ही (डिफ़ॉल्ट) उपनाम है - इस तथ्य का उपयोग स्थानीयहोस्ट के लिए अतिरिक्त उपनाम जोड़ने और बस डिफ़ॉल्ट पते का उपयोग करने से बचने के लिए किया जा रहा है pf.conf फ़ाइल। 

अद्यतन: दुर्भाग्यवश, ऐसा लगता है कि स्टार्टअप पर फ़ाइल लोड करना काम नहीं करता है। मैं अभी भी इसे हल करने में मदद पाने की कोशिश कर रहा हूं। तब तक, चल रहा है sudo pfctl -f /etc/pf.conf शुरू करने के बाद चाल है। 


3
2017-07-02 17:03



इसके लिए धन्यवाद, यह ओएस एक्स सिएरा में मेरे लिए काम किया। यह बहुत महत्वपूर्ण है कि पुनर्निर्देशन फ़ाइल एक नई लाइन के साथ समाप्त होती है। - kadrian


10.5 से, ओएस एक्स के बजाय एक नई, एप्लिकेशन उन्मुख फ़ायरवॉल के साथ आता है ipfw। लेकिन ipfw अभी भी स्थापित है। अगर आपको इसके वाक्यविन्यास में परेशानी है, तो ग्राफिकल फ्रंटएंड की तरह देखें WaterRoof या Flying Buttress

HTH, Pera


1
2018-01-13 21:10





नियमों का क्रम महत्वपूर्ण है, सुनिश्चित करें कि आपके अनुमति नियमों, या ऐसा कुछ भी नहीं होने से पहले "सभी को अस्वीकार करें" नहीं है।


1
2018-01-13 22:06



सलाह के लिए धन्यवाद लेकिन मुझे नहीं लगता कि मेरे पास उस विशेष समस्या है (ipfw सूची केवल मेरा नियम दिखाती है और 65535 allow ip from any to any)। - nafe


आपके आदेश में नियम संख्या गुम हो रही है; प्रयत्न:

ipfw add 100 fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80

(यदि आप रूट के रूप में नहीं चल रहे हैं, तो आपको इसे सूडो के साथ उपसर्ग करना होगा)। जांच करने की एक और बात यह है कि फ़ायरवॉल सक्षम है:

sysctl net.inet.ip.fw.enable

यदि यह मान 0 (ऑफ) के साथ वापस आता है, तो इसे चालू करें:

sysctl -w sysctl net.inet.ip.fw.enable=1

... और उसके बाद कंप्यूटर रीबूट होने पर इसे पुनः प्राप्त करने के लिए व्यवस्थित करें। ऐसा करने के लिए "उचित" तरीका शायद एक बनाना है लॉन्च किया गया आइटम (Lingon यह काफी आसान बनाता है)। या सिर्फ पीईआरए के जीयूआई उपकरणों में से एक का उपयोग करें, और इसे विवरणों का ख्याल रखने दें।


1
2018-01-14 07:45