फ्रीबीएसडी में परमाणु एनएटी का एक संक्षिप्त अवलोकन

FreeBSD के तहत NAT के कुछ सामान्य संस्करण हैं। यह natd, ipnat, pfnat, ng_nat या एक विकल्प के रूप में "एएसए 5550 खरीदें और बाहर खड़े न हों।"


दुर्भाग्य से, हाल ही में मैं ipfw नेट के बारे में बहुत कम अच्छे और सबसे महत्वपूर्ण रूप से सुलभ लेखों में आया हूं जो कि दिखाई देते हैं यदि स्मृति मुझे 7.0 के रूप में जल्दी से कार्य करती है।
फिर हम आज इसे एक आवर्धक कांच के तहत विचार करेंगे।

सच्चे पीएफ अनुयायियों को सलाह दी जाती है कि वे बिल्ली के नीचे न देखें ताकि अत्यधिक ज्ञान से खुद को घायल न करें।



सबसे पहले, मैं समझाऊंगा कि क्यों ipfw nat
सबसे पहले, क्योंकि मैं सरल और स्पष्ट समाधानों का समर्थक हूं, जिसका समर्थन व्यावहारिक रूप से पहली नज़र में बिना किसी विषय पर लंबे ध्यान और प्रतिबिंब के संभव है ”यह कैसे काम करता है? ऊँ। " दुर्भाग्य से, मैं इस तरह के रूप में ipfw + pfnat के गैर-तुच्छ संकर का गुणन नहीं कर सकता।
दूसरे, ng_nat और pfnat पर पहले से ही बहुत सारे दस्तावेज हैं (किसी चीज़ को किसी चीज़ से किसी चीज़ पर इंटनेट पर - - extif - s?)।
तीसरा, मैं ipfw का उपयोग करता हूं, और मुझे यह पसंद है - इसकी सादगी, दृश्यता, पूर्वानुमेयता, dummynet और संकर के रूप के लिए ipfw + pf + altq ... सामान्य तौर पर, "प्रथम" देखें।

मैटेरियल।
हम ऊपर दिखाए गए वैक्यूम में गोलाकार घोड़े के आकार के नेटवर्क के उदाहरण के रूप में आईपीएफडब्ल्यू एनएटी पर विचार करेंगे। दरअसल, योजना के अनुसार, सब कुछ बहुत स्पष्ट है - हम तुरंत एक आरक्षण करेंगे कि हम 172.16.0.0/21 को नेटवर्क करेंगे, em1 का एक पता है, आइए 8.8.8.8 और आंतरिक नेटवर्क संसाधन कहते हैं जिससे हमें पते का अनुवाद करने की आवश्यकता नहीं है - उदाहरण के लिए, कॉर्पोरेट पोर्न अभिलेखागार मेल सर्वर और अन्य आवश्यक चीजें पते के साथ जीवित रहेंगी 8.8.8.9, 8.8.8.10
Ipfw nat कार्यक्षमता लगभग पूरी तरह से libalias कार्यक्षमता को डुप्लिकेट करती है, जो natd, ng_nat भी उपयोग करती है।
यदि एनएटी सर्वर का अंत अपने आप में आंतरिक इंटरफ़ेस (हमारे मामले में em0) के पैकेटों में src-ip को बदलने के लिए बहुत कम हो जाता है, तो आउटगोइंग इंटरफ़ेस का पता (हमारे उदाहरण em1 में) और आवश्यक पैकेट के आगमन पर रिवर्स रूपांतरण के लिए इसके पत्राचार तालिका में डेटा दर्ज करना। जवाब में। इसके अलावा, उचित रूप से पैक किए गए सभी पैकेट या तो डिफ़ॉल्ट रूप से या जहां भी आपको आवश्यकता होती है (यदि, कहते हैं, ढेर किए गए पीबीआर) छोड़ देते हैं।

मूल संस्करण में कुल हमें निम्नलिखित की आवश्यकता है

Ipfw, ipfw nat, libalias और फिर स्वाद के लिए समर्थन के साथ कर्नेल पर जाएं

# cd /sys/i386/conf/
# cp GENERIC NAT
# vim NAT


फिर कुछ इसी तरह डालें:

ident NAT
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_FORWARD
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_NAT
options LIBALIAS
options ROUTETABLES=2
options DUMMYNET
options HZ="1000"


हम नए कर्नेल को पुराने के एहतियाती बैकअप के रूप में इकट्ठा और स्थापित करते हैं

# cp -R /boot/kernel /boot/good
# config NAT
# cd ../compile/NAT
# make depend
# make
# make install


/Etc/rc.conf में जोड़ें
firewall_enable="YES"
firewall_nat_enable="YES"
dummynet_enable="YES"
firewall_type="/etc/firewall"


इस तथ्य की ओर संकेत करने के लिए कि हम ipfw / / / फ़ायरवॉल का उपयोग करते हुए आरंभीकरण करेंगे, जिसे हम सरलतम मामले में देखना चाहेंगे, उदाहरण के लिए, इस तरह:

#
table 2 add 172.16.0.0/21

# nat
table 9 add 8.8.8.8
table 9 add 8.8.8.9
table 9 add 8.8.8.10

# nat =)
nat 1 config log if em1 reset same_ports
add 1200 nat 1 ip from table\(2\) to not table\(9\) via em1
add 1300 nat 1 ip from any to 8.8.8.8 via em1


अपने विवेक को शांत करने के लिए, आप /etc/sysctl.conf में कुछ और कर सकते हैं

net.inet.ip.fw.one_pass=1
net.inet.ip.fastforwarding=1
net.inet.tcp.maxtcptw=40960
kern.ipc.somaxconn=4096
kern.ipc.nmbclusters=65536
net.inet.tcp.nolocaltimewait=1
net.inet.ip.portrange.randomized=0


रिबूट के बाद, सब कुछ काम करना चाहिए। यह सत्यापित है कि यह बहुत सरलता से काम कर रहा है।

ipfw nat 1 show
nat 1: icmp=271, udp=45462, tcp=61534, sctp=0, pptp=0, proto=1, frag_id=2 frag_ptr=0 / tot=107270


यहाँ pfctl –sa की तुलना में इस तरह के छोटे आँकड़े हैं, लॉग पैरामीटर ipfw nat कलेक्ट करता है।

संक्षेप में अल्प ज्ञान के विकल्पों पर जाएं जो हम मनुष्य से सीख सकते हैं:

अगर - इंटरफ़ेस जिस पर एड्रेस ट्रांसलेशन किया जाएगा
लॉग - आंतरिक कनेक्शनों पर "संपूर्ण" आंकड़ों के लॉगिंग को सक्षम करता है जिसे हमने पहले ही देखा है (ipfw nat1 show)
रीसेट - संकेत देता है कि इंटरफ़ेस बदलते समय, आंतरिक लेबल को साफ किया जाना चाहिए
deny_in - बाहर से आने वाले पैकेट पर प्रतिबंध लगाता है जिसके लिए आंतरिक लेबल में कोई मिलान नहीं मिला।
same_ports - यदि संभव हो, तो मूल पोर्ट को आउटगोइंग पैकेट में छोड़ दें (इसे सक्षम करने के लिए अनुशंसित है)
unreg_only - मास्क केवल "अवास्तविक" नेटवर्क से आने वाले पैकेट हैं।
redirect_addr intip extip - मशीन से एक्सिप करने के लिए आने वाले ट्रैफिक को इंटिप के साथ लपेटने का निर्देश देता है। Redirect_port और redirect_proto विकल्प समान तरीके से काम करते हैं, जो NAT के लिए आवश्यक सेवाओं के साथ कुछ मशीनों को "रेंडर" करने के लिए उपयोगी होते हैं।

वास्तव में, हम नेट उदाहरणों को कई और किसी भी / आईपी इंटरफेस (आईपी 2 एनएटी 2 कॉन्फिग लॉग पर लॉग इन कर सकते हैं, यदि एम 2 रीसेट करें as_ports, उदाहरण के लिए) और उनमें ट्रैफ़िक लपेटें जैसा कि हम पसंद करते हैं।
अपने काम में ipfw नेट का उपयोग करने वाली मेमोरी कर्नेल के लिए उपलब्ध मेमोरी है और इसके साथ लगती है
# sysctl -a | grep kmem
vm.kmem_size_scale: 3
vm.kmem_size_max: 335544320
vm.kmem_size_min: 0
vm.kmem_size: 335544320


इसे कर्नेल विकल्प KVA_PAGES (अधिकतम 512 जो i386 के लिए 2GB से मेल खाती है) का उपयोग करके स्पिन करें।

किसी भी तरह से, चैनल पर एक अच्छा भार (मैं 350-400Mbit / s पर बाहर निकलता हूं) के साथ, प्लेटों को खाने वाली मेमोरी को मुक्त करने के लिए नेट उदाहरण की आवधिक पुनरारंभ की आवश्यकता हो सकती है। मुझे लगता है कि समाप्त हो चुके सत्रों को बंद करने के धीमे तंत्र के माध्यम से कुत्ते ने अफवाह उड़ाई। पुनर्स्थापना प्रपत्र की प्राथमिक स्क्रिप्ट के साथ की जा सकती है:

#!/bin/sh
/sbin/ipfw nat 1 delete && /sbin/ipfw nat 1 config log if em1 reset same_ports


साथ ही हर कोई इस तथ्य के साथ एक रेक पर चलता है कि लिबलीस खुद स्पष्ट रूप से चेकसम के हार्डवेयर काउंटरों के साथ अनुकूल नहीं है और साथ ही टीसीपी सेगमेंटेशन ऑफलोड के साथ, हम शुरुआत से उसी तरह से कार्ड कॉन्फ़िगर करने की सलाह देते हैं:

cat /etc/rc.conf | grep ifconfig
ifconfig_em1="inet 8.8.8.8 netmask 255.255.255.0 -rxcsum -txcsum -tso"


बस इतना ही। सब कुछ पारदर्शी रूप से काम करता है, शुरू में पीपीटीपी, एफटीपी (एफएनएनएटी) जैसी सेवाओं के साथ बीमारियां नहीं होती हैं और उपयोगकर्ता स्थान (एनएटीडी) पर स्विच करने के कारण निराशाजनक मंदी से ग्रस्त नहीं होता है। केवल एक चीज जो वास्तव में गायब हो सकती है, वह है पता पूल के नीचे से नैट का सामान्य तरीका। इस मामले में दिमाग में केवल एक ही बात आती है कि एलियास पर बहुत सारी प्रतियाँ छपती हैं, लेकिन ऐसा लगता है कि यह पफ्नैट के कहने के अनुसार सुंदर नहीं है।

किसी तरह गड़बड़ हुई लेकिन मुझे स्पष्ट रूप से उम्मीद है।

अगला सवाल यह सवाल करता है - क्या कोई व्यक्ति दूरस्थ NAS पर ट्रैफ़िक हटाने के साथ बिलिंग स्थापित करने और नेटफ़्लो पर लेखांकन के बारे में कदम-दर-चरण मार्गदर्शिका देखने में दिलचस्पी रखेगा? खैर, वास्तव में, कैसे समाधान हैं जो पिछले लेखों में वर्णित सब कुछ के विपरीत क्षैतिज रूप से हैं? या कुछ कम संकीर्ण के बारे में लिखें?

PS उन्होंने मुझे यहां संकेत दिया कि मैंने पहले ही "वास्तविक" आईपी की आड़ में अपने उदाहरणों में dns google का उपयोग करना शुरू कर दिया है। हां, मुझे RFC3330 के बारे में पता है जहां यह कहता है कि "192.0.2.0/24 को प्रलेखन और उदाहरण कोड में उपयोग के लिए" टेस्ट-नेट "के रूप में सौंपा गया है, लेकिन किसी भी तरह मैं नहीं जानता, यह खुद के लिए अधिक स्पष्ट है :)

Source: https://habr.com/ru/post/In102739/


All Articles