मुझे भी हाल ही में इसी तरह का काम करना था, और खोज में इस उत्तर पर आया। दुर्भाग्य से, Nafe उपयोग का उत्तर ipfwजो अब OSX में पदावनत और अनुपलब्ध है; और केविन लेरी का जवाब वास्तव में थोड़ा हैकिश है। इसलिए मुझे कुछ बेहतर (क्लीनर) बनाना पड़ा और इसे पोस्ट करने के लिए यहाँ साझा करने का फैसला किया। यह उत्तर काफी हद तक इस जिस्ट में उल्लिखित दृष्टिकोण पर आधारित है ।
ओपी का उल्लेख है, 192.168.99.100 पर एक ब्राउज़र को इंगित करते हुए स्थानीयहोस्ट पर सर्वर से प्रतिक्रिया मिलनी चाहिए: 8000। ifconfigवास्तव में आवश्यक नहीं होने के लिए एक उपनाम जोड़ना , pfctlअकेले पर्याप्त है: इस pf.confफाइल को प्राप्त /etc/pf.confकरने के लिए इसे संशोधित करने की आवश्यकता है।
पहले हम (sudo के साथ) एक नई एंकर फ़ाइल बनाते हैं (इसे कॉल करते हैं 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फ़ाइल को sudo के साथ खोलें और rdr-anchor "redirection"अंतिम rdr-anchor लाइन (जो है 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को अपडेट करने की आवश्यकता है (संदर्भित जिक्र में उल्लेख है कि पीएफ बूट पर स्वचालित रूप से सक्षम है, हालांकि ऐसा प्रतीत नहीं होता है कोड को देखने से मामला)। खोलें (sudo के साथ) 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>
इससे हो जाना चाहिए।
कैविएट : ऐप्पल अब लॉन्च दानव फ़ाइलों को बस उसी तरह बदलने की अनुमति नहीं देता है (सूडो के साथ नहीं, न ही चामॉड, और न ही कुछ और)। केवल जिस तरह से साथ टिंकर करने के लिए है सिस्टम वफ़ादारी संरक्षण पुनर्प्राप्ति मोड और प्रक्षेपण के टर्मिनल में बूट: सेटिंग्स। एसआईपी स्थिति की जांच करें csrutil status, इसे आम तौर पर सक्षम होना चाहिए। इसे csrutil disableसामान्य मोड में रीबूट और रीबूट करें और फिर ऊपर बताए अनुसार प्लिस्ट फाइल में बदलाव करें। एक बार हो जाने के बाद, पुनर्प्राप्ति मोड पर वापस जाएं और जारी करके सुरक्षा को फिर से सक्षम करें (यह अच्छे कारण के लिए है) csrutil enable।
स्पष्टीकरण: एक जारी करके जाँच कर सकते हैं ifconfigआदेश है कि 127.0.0.1पहले से ही स्थानीय होस्ट lo0 के लिए (डिफ़ॉल्ट) अन्य नाम है - इस तथ्य को स्थानीय होस्ट के लिए एक अतिरिक्त उपनाम जोड़ना होने से बचने के लिए इस्तेमाल किया जा रहा है और बस में डिफ़ॉल्ट पते का उपयोग करना pf.confफ़ाइल।
अद्यतन: दुर्भाग्य से, ऐसा लगता है जैसे स्टार्टअप पर फ़ाइल लोड करने से काम नहीं चलता है। मैं अभी भी इसे हल करने के लिए मदद लेने की कोशिश कर रहा हूं। तब तक, sudo pfctl -f /etc/pf.confशुरू करने के बाद दौड़ने की कोशिश करता है।