சுரங்கப்பாதை வழியாக தொலை /24 ஐ அடைதல்: NETMAP, DNAT அல்லது வழி?
NETMAP மூலம் முழு முன்னொட்டையும் வரைபடமாக்குங்கள், ஒவ்வொரு புரவலனுக்கும் DNAT விதிகளைச் சேர்க்கவும் அல்லது உண்மையான வரம்பை வழிமாற்றவும், மேலும் தொலைப் பக்கம் என்ன பார்க்க வேண்டும், யார் போக்குவரத்தைத் தொடங்கலாம் என்பதன் அடிப்படையில் முடிவு செய்யுங்கள்.
சுரங்கப்பாதை முனைக்குப் பின்னால் உள்ள துணை வலையமைப்பை நீங்கள் மூன்று வழிகளில் அடையலாம், ஒரு நிமிட உண்மை சேகரிப்பு பொதுவாக இரண்டை நீக்கிவிடும். உண்மைகள்: அங்குள்ள சேவையகங்கள் பயனர்களை வேறுபடுத்த வேண்டுமா, அங்கிருந்து யாராவது எப்போதாவது உங்கள் வரம்பை நோக்கி அழைப்பார்களா, தொலை வழியியக்கியை யார் திருத்தலாம். இந்த மூன்றுக்கும் பதில் சொல்லுங்கள், வடிவமைப்பே தேர்ந்தெடுக்கப்படும். மீதமுள்ளது நீங்கள் முனையை இயக்கி அதன் firewall ஐ திருத்தலாம் என்று கருதுகிறது.
மூன்று விருப்பங்கள், ஒவ்வொன்றும் உண்மையில் என்ன மாற்றுகிறது
முன்னொட்டு வரைபடமாக்கல், ஒவ்வொரு புரவலனுக்கும் DNAT, மற்றும் வழிமாற்றப்பட்ட முன்னொட்டு அனைத்தும் ஒரே இரண்டு வரம்புகளுக்கு இடையே பாக்கெட்டுகளை நகர்த்துகின்றன, ஆனால் வெவ்வேறு விஷயங்களை மாற்றுகின்றன. வரைபடமாக்கல் ஒரு மாற்றுப் பெயர் வரம்பை உருவாக்கி பயணத்தின் போது முகவரிகளை கணிதரீதியாக மீண்டும் எழுதுகிறது. புரவலன் விதிகளும் மீண்டும் எழுதுகின்றன, ஆனால் ஒவ்வொரு இலக்கும் கையால் பெயரிடப்படுகிறது. வழிமாற்றப்பட்ட முன்னொட்டு எதையும் மீண்டும் எழுதுவதில்லை: பாக்கெட்டுகள் உண்மையான முகவரிகளைத் தக்கவைத்துக்கொள்கின்றன, அந்த முகவரிகள் எங்கு வாழ்கின்றன என்பதை இரு முனைகளும் ஏற்றுக்கொள்கின்றன.
| What the far side needs | Prefix mapping | Per-host DNAT | Routed prefix |
|---|---|---|---|
| Users visible to its logs | Only without source NAT | Same condition | Yes, unchanged |
| To start a connection toward you | No, alias is local | No, same reason | Yes, both ends route |
| To absorb a new host | Yes, arithmetic only | No, one rule per address | Yes, it simply routes |
| To require no config change | Yes, with source NAT | Yes, same condition | No, it needs a route back |
நீக்குதலை தொலைப் பக்கத்திலிருந்து தொடங்குங்கள், அங்கே கட்டுப்பாடுகளை மாற்றுவது மிகக் கடினம். அங்குள்ள சேவையகம் வாடிக்கையாளர் முகவரிகளை பதிவுகளில் எழுதினால், அவற்றை அனுமதிப் பட்டியலுடன் சரிபார்த்தால் அல்லது வேறு அமைப்புக்கு வழங்கினால், மூலத்தை மொழிபெயர்ப்பது அதன் ஒரே அடையாளங்காட்டியை அழிக்கிறது. தொலைப் பக்கமும் உள்ளே அழைக்க வேண்டும் என்றால், மொழிபெயர்ப்பு முழுவதுமாக விலக்கப்படுகிறது, ஏனெனில் அங்கு யாருக்கும் மாற்றுப்பெயர் இருப்பதே தெரியாது. தொலைப் பக்கம் கோரிக்கைகளுக்கு பதிலளிக்கும் போது மட்டுமே மலிவான விருப்பங்கள் பாதுகாப்பாகின்றன.
முன்னொட்டு இணைகள், ஏன் அளவுகள் பொருந்த வேண்டும்
NETMAP என்பது ஒரே நீளமுள்ள முன்னொட்டு இணையில் வேலை செய்யும் nat அட்டவணையின் இலக்கு. உள்ளே ஒவ்வொரு முகவரிக்கும் அட்டவணை இல்லை: முன்னொட்டை அகற்றி, புரவலன் பிட்களை வைத்துக்கொண்டு புதிய முன்னொட்டில் மீண்டும் இணைக்கிறது, அதனால்தான் /24 என்பது /24 ஆக வரைபடமாகிறது, ஒருபோதும் /25 ஆக அல்ல. நிலை திசையை தீர்மானிக்கிறது: PREROUTING இல் இலக்குப் பொருத்தம் பாக்கெட் எங்கு செல்கிறது என்பதை மீண்டும் எழுதுகிறது, POSTROUTING இல் மூலப் பொருத்தம் அது எங்கிருந்து வந்தது என்பதை மீண்டும் எழுதுகிறது.
192.168.2.17 இல் உள்ள புரவலன் உங்கள் வாடிக்கையாளர்களுக்கு 10.50.1.17 ஆகத் தெரிகிறது, கடைசி ஆக்டெட் அலங்காரம் அல்ல — அது இரு பக்கமும் ஒரே எண். நாளை 192.168.2.40 இல் ஒரு புரவலனைச் சேர்க்கவும், அதன் மாற்றுப்பெயர் 10.50.1.40 ஆக இருக்கும், திருத்த வேண்டிய விதி எதுவும் இல்லை.
வாடிக்கையாளர்களுக்கு மாற்றுப்பெயர் வரம்பிற்கு உங்கள் பெட்டியை நோக்கும் வழி இன்னும் தேவை, மாற்றுப்பெயர் அவர்கள் ஏற்கனவே அடையும் துணை வலையமைப்பில் இல்லாத வரை. நுழைவாயிலுக்கு மாற்றுப்பெயருக்கு வழி தேவையில்லை, ஏனெனில் இலக்கு மொழிபெயர்ப்பு வழித் தேடலுக்கு முன் PREROUTING இல் இயங்குகிறது. forwarding கூட இயக்கப்பட்டிருக்க வேண்டும், இல்லையெனில் மீண்டும் எழுதிய பிறகு கர்னல் பாக்கெட்டை நிராகரிக்கும். கீழே உள்ள மூன்று கட்டளைகள் வாடிக்கையாளர்கள் br0 இல், மாற்றுப்பெயர் 10.50.1.0/24 இல், சுரங்கப்பாதை tun0 இல் உள்ள Debian பாணி நுழைவாயிலில் முழு அமைப்பும் ஆகும்.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -i br0 -d 10.50.1.0/24 -j NETMAP --to 192.168.2.0/24
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADEபதில் தானே திரும்பும் வழியைக் கண்டடைய வேண்டும்
இலக்கை மீண்டும் எழுதுவது பாக்கெட் எங்கு வழங்கப்படுகிறது என்பதை மட்டுமே தீர்மானிக்கிறது. தொலைச் சேவையகம் இன்னும் தான் அடையக்கூடிய முகவரிக்கு பதிலளிக்க வேண்டும், அதை ஒழுங்கமைக்க இரண்டு வழிகள் உள்ளன. பதில்கள் உங்கள் பெட்டிக்குத் திரும்பும்படி மூலத்தை மொழிபெயர்க்கவும், அல்லது மூலத்தை விட்டுவிட்டு தொலைப் பக்கத்திற்கு வாடிக்கையாளர் வரம்பிற்கு வழி கொடுக்கவும்.
வெளிச்செல்லும் பாதையில் masquerade என்பது குறுகிய வழி: POSTROUTING இல் ஒரு விதி, தொலைப் பக்கம் உங்கள் சுரங்கப்பாதை முகவரியைப் பார்க்கிறது, எனவே அதற்கு சொந்த வழி தேவையில்லை. விலை என்னவென்றால் ஒவ்வொரு பயனரும் ஒரே முகவரியில் சுருங்குகிறார், பயனர் வாரியான பதிவுகள் அர்த்தமற்றவையாகின்றன. மூலத்தை அப்படியே விட்டால் அந்தத் தகவல் தக்கவைக்கப்படும், ஆனால் பின்னர் தொலைத் தளம் வாடிக்கையாளர் வரம்பின் பதில்களை சுரங்கப்பாதை வழியாகத் திருப்பி அனுப்ப வேண்டும்.OpenVPN சேவையகத்தில் அது push செய்யப்பட்ட push "route 10.50.9.0 255.255.255.0", மேலும் route 192.168.2.0 255.255.255.0 வரி.
விலை உயர்ந்த தோல்வி என்பது ஒவ்வொன்றின் பாதியைச் செய்வது. சில போக்குவரத்தை masquerade செய்யும்போது தொலைப் பக்கம் மற்ற போக்குவரத்திற்கு திரும்பும் வழியையும் சுமந்தால், பதில்கள் இணைப்புக் கண்காணிப்பு பதிவு ஒருபோதும் காணப்படாத இடைமுகத்திற்கு வருகின்றன. சேவையகம் சேவை செய்ததாகப் பதிவு செய்த கோரிக்கைக்கு வாடிக்கையாளர் நேரம் முடிந்ததாகத் தெரிவிக்கிறார். ஒரு ஓட்டத்தின் இரு திசைகளும் ஒரே netfilter நிகழ்வைக் கடக்க வேண்டும்: ஒரு நுழைவாயில் மொழிபெயர்க்கிறது, தொடரில் இரண்டு firewall அல்ல.
conntrack -L -d 10.50.1.17
iptables -t nat -L PREROUTING -v -nபதிவை இரு திசைகளிலும் படியுங்கள்: அசல் tuple இலக்கில் உங்கள் மாற்றுப்பெயரை வைத்திருக்கிறது, பதில் tuple உண்மையான முகவரியைச் சுமக்கிறது. பதில் tuple இல்லை என்றால், பிரச்சினை விதி அல்ல, திரும்பும் பாதை. PREROUTING எண்ணிகள் ஒருபோதும் நகரவில்லை என்றால், பாக்கெட் அந்த hook ஐ ஒருபோதும் அடையவில்லை.
மோதல்கள் மற்றும் முதலில் இயங்கும் தேடல்
இரண்டு வேறுபட்ட வரம்புகள் மோதலாம், இரண்டு தோல்விகளும் மோசமான விதியை விட உடைந்த சுரங்கப்பாதை போலவே தெரிகின்றன. நீங்கள் உருவாக்கும் மாற்றுப்பெயர் முழுப் பாதையிலும் பயன்படுத்தப்படாததாக இருக்க வேண்டும், உண்மையான தொலை வரம்பு உங்கள் வலையமைப்பில் ஏற்கனவே இருக்கக்கூடாது. நகல் இடைவெளியில் தவறான புரவலனுக்கு போக்குவரத்தை உருவாக்குகிறது, அதை நிராகரிக்கப்பட்ட இணைப்பை விட கண்டறிவது கடினம். விதியைச் சேர்ப்பதற்கு முன் வழிமாற்று அட்டவணையிடம் கேளுங்கள்.
நுழைவாயிலில், ip route get 192.168.2.17 சுரங்கப்பாதை சாதனத்தைப் பெயரிட வேண்டும்; உள்ளூர் bridge என்றால் தொலை வரம்பு மறைக்கப்பட்டுள்ளது, எந்த nat விதியும் அதைச் சரிசெய்யாது. உங்கள் வலையமைப்பு ஏற்கனவே 192.168.2.0/24 ஐப் பயன்படுத்தினால், மோதலின் மேல் வரைபடத்தை அடுக்குவதற்குப் பதிலாக தொலைத் தளத்தை மீண்டும் எண்ணிடுங்கள்.
உண்மையான வாடிக்கையாளரிடமிருந்து சோதித்து, பின்னர் தக்கவைத்தல்
மாற்றுப்பெயரை உண்மையில் பயன்படுத்தப்போகும் இயந்திரத்திலிருந்து சோதியுங்கள், நுழைவாயிலிலிருந்து அல்ல, ஏனெனில் உள்ளூரில் உருவாகும் போக்குவரத்து PREROUTING ஐ ஒருபோதும் அதே வழியில் கடக்காது. மாற்றுப்பெயர் கொண்ட ஒரு புரவலனுக்கு இணைப்பைத் திறந்து எண்ணிகளும் conntrack பதிவும் ஒன்றாகத் தோன்றுவதைப் பாருங்கள், பின்னர் மூடி பதிவு போவதை உறுதிப்படுத்துங்கள். பழைய பதிவு அரை-திறந்த இணைப்பைக் குறிக்கிறது, அதாவது பொதுவாக பதில் ஒருபோதும் திரும்பவில்லை என்று அர்த்தம்.
curl -sv http://10.50.1.17/ -o /dev/null
ss -tn dst 10.50.1.17
conntrack -L -d 10.50.1.17இரண்டு அல்லது மூன்று வெற்றிகரமான இணைப்புகள் கணிதத்தை நிரூபிக்கின்றன, ஆனால் நிலைத்தன்மை அல்லது அடுத்த பொறியாளர் பற்றி எதுவும் சொல்லவில்லை. விதிகளை boot செயல்முறை படிக்கும் இடத்தில் சேமியுங்கள், Debian மற்றும் Ubuntu இல் அது iptables-save > /etc/iptables/rules.v4 netfilter-persistent இயக்கப்பட்ட நிலையில் என்பதாகும். மறுதொடக்கத்தில் மறையும் வரைபடம் எதுவும் இல்லாததை விட மோசம், ஏனெனில் செயலிழப்பு குற்றம் சொல்லக்கூடிய சமீபத்திய மாற்றம் இல்லாமல் வருகிறது.
விதிகளுக்கு அருகில் ஒரு குறிப்பை விடுங்கள்: மாற்றுப்பெயர் வரம்பு, உண்மையான வரம்பு, இணையின் காரணம், எந்தப் பக்கம் தொடங்கலாம். அந்தக் குறிப்பு ஒரு வடிவமைப்பை யாரும் அழிக்கத் துணியாத விதிக் குவியலிலிருந்து பிரிக்கிறது. பின்னர் வரும் கேள்வியையும் அது தீர்க்கிறது: தொலைத் தளம் ஒரு புரவலனைச் சேர்க்கும்போது, யாரும் கட்டமைக்காத முகவரி ஏற்கனவே பதிலளிக்கிறது. குறிப்பு தொலைப் பக்கத்திற்கு திரும்பும் வழி தேவை என்று சொன்னால், masquerade விதியை அகற்றுவது இணைப்பை முறிக்கும் என்பதை அடுத்தவர் அறிவார். இங்கே ஆவணப்படுத்தல் மலிவு; இரவு மூன்று மணிக்கு NAT சார்பை மீண்டும் கண்டுபிடிப்பது மலிவல்ல.