ஒரு cgroup இலிருந்து வரும் பரிமாற்றத்தைக் குறிப்பது எளிய பகுதி. ஒரு பயன்பாடு இயற்பியல் இடைமுகம் வழியாக வெளியேறி மற்ற அனைத்தும் சுரங்கப்பாதையில் இருக்க, மூன்று தனித்தனி முடிவுகள் ஒத்துப்போக வேண்டும்: எந்த சாக்கெட் விலக்குக்கு உரியது, குறி எந்த வழித் தேடலைத் தூண்டுகிறது, புறப்படும்போது பாக்கெட் எந்த மூல முகவரியைச் சுமக்கிறது. தோல்வியடைந்த முயற்சிகளில் பெரும்பாலானவை முதன்மையைச் சரியாகச் செய்கின்றன, இரண்டாவதைப் பாதியாக, மூன்றாவதை ஒருபோதும் பார்ப்பதில்லை.

மூன்று முடிவுகள், ஒன்றல்ல

வகைப்படுத்தல் யாருக்கு விலக்கு என்பதற்குப் பதிலளிக்கிறது. வழியமைப்பு குறிக்கப்பட்ட பாக்கெட் அதற்குப் பதிலாக எங்கே செல்கிறது என்பதற்குப் பதிலளிக்கிறது. மூலத் தேர்வு தொலை முனை என்ன பார்க்கும், பதில் எங்கே திரும்ப வேண்டும் என்பதற்குப் பதிலளிக்கிறது.

இவை தனித்தனியாகத் தோல்வியடைகின்றன. ஒரு பாக்கெட் வகைப்படுத்தப்பட்டு, இயற்பியல் இடைமுகத்திற்கு மீண்டும் வழியமைக்கப்பட்டும், எந்த மேல்நிலை வழியமைப்பான் திருப்பி அனுப்ப முடியாத தனிப்பட்ட முகவரியைச் சுமக்கலாம்; இது ஃபயர்வால் தடுப்பைப் போலவே தோன்றும் நேர முடிவை உருவாக்குகிறது. வகைப்படுத்தல் படியில் இதைப் பற்றி எதுவும் எச்சரிக்காது. வழிப் படியிலும் எதுவும் இல்லை.

வரிசையும் முக்கியம். பாக்கெட் உருவாகும்போது வகைப்படுத்தல் நடக்கிறது, அதன் பிறகு வழியமைப்பு, வெளியேறும் இடத்தில் மொழிபெயர்ப்பு.

மூன்று நிலைகளில் எது பழுதடைந்தது என்று சொல்ல முடியாவிட்டால், நீங்கள் பிழைதிருத்தம் செய்யவில்லை, விதிகளை மறுசீரமைத்து நம்பிக்கை வைக்கிறீர்கள்.

நாளையும் இருக்கும் cgroup உடன் பொருந்துங்கள்

nftables ஒரு சாக்கெட்டின் cgroup v2 உறுப்பினர் நிலையைச் சோதிக்க முடியும்; இது இலக்கை அல்ல, செயல்முறையைப் பின்பற்றுவதால் உண்மையில் பயனுள்ளது. பொறி அடையாளங்காட்டியில் உள்ளது. மெனுவிலிருந்து தொடங்கும் டெஸ்க்டாப் பயன்பாடு அடுத்த தொடக்கத்தில் பெயர் மாறும் தற்காலிக scope இல் வாழ்கிறது.

nft list ruleset
systemctl status session.slice 2>/dev/null
cat /proc/self/cgroup

ஒரு அமர்விலிருந்து scope பெயரை நகலெடுத்து கடினமாக எழுதுவது இன்று வேலை செய்து நாளை அமைதியாகப் பொருந்தாத விதியை உருவாக்குகிறது. அதற்குப் பதிலாக பயன்பாட்டை நீங்கள் கட்டுப்படுத்தும் தனி scope அல்லது unit போன்ற வேண்டுமென்றே அமைக்கப்பட்ட நிலையான இயக்கச் சூழலில் வைத்து அதனுடன் பொருத்துங்கள். பின்னர் விதி மறுதொடக்கங்களையும் தொகுப்பு புதுப்பிப்புகளையும் தாண்டி நிலைக்கும். உங்கள் அமர்வு வரலாறு இல்லாமல் சக ஊழியர் இதைப் பற்றிச் சிந்திக்கக்கூடிய ஒன்றாகவும் ஆகிறது.

எந்த இயங்குமுறையைப் பயன்படுத்துகிறீர்கள் என்பதிலும் துல்லியமாக இருங்கள். cgroup v1 இன் net_cls வகைப்படுத்தலும் cgroup v2 இன் சாக்கெட் பொருத்தமும் வேறு விஷயங்கள், ஆவணங்களில் ஒரே பெயரில் உள்ள புலம் அவற்றை மாற்றக்கூடியதாக்காது.

இரண்டாவது தேடலைத் தூண்டுவது route சங்கிலி

உள்நாட்டில் உருவாக்கப்படும் பரிமாற்றத்திற்கு, குறி வைக்கப்பட்ட பிறகு ஏதேனும் நடக்கிறதா என்பதைச் சங்கிலி வகை தீர்மானிக்கிறது. filter வகை output சங்கிலி பாக்கெட்டைக் குறிக்கலாம், கர்னல் ஏற்கனவே தேர்ந்தெடுத்த வழியையே தொடர்ந்து பயன்படுத்தும். route வகை சங்கிலியே புதிய தேடலைக் கோரும் இயங்குமுறை.

table inet bypass {
  chain mark {
    type route hook output priority mangle; policy accept;
    socket cgroupv2 level 2 "app.slice" meta mark set 0x1 comment "app bypass"
  }
}
ip rule add fwmark 0x1 lookup 200
ip route add default via 203.0.113.1 dev wlan0 table 200

பின்னர் குறிக்கு அதை அட்டவணைக்கு அனுப்பும் கொள்கை விதி தேவை, அந்த அட்டவணை முழுமையாக இருக்க வேண்டும்: இயல்புநிலை வழி, பயன்பாட்டிற்கு இன்னும் தேவையான உள்நாட்டு இலக்குகள், உண்மையில் பதிலளிக்கும் மேல்நிலை நுழைவாயில்.

குறியின் மதிப்பை வேண்டுமென்றே தேர்ந்தெடுங்கள். WireGuard வெளிப்புற போக்குவரத்து பரிமாற்றத்திற்கு அதன் சொந்த fwmark ஐப் பயன்படுத்துகிறது, தற்செயலாக அதே எண்ணில் இறங்குவது சுரங்கப்பாதையின் சொந்த வழி விலக்கைக் கண்டறிய கடினமான வழிகளில் பாதிக்கலாம்.

மூல முகவரி வழியைப் பின்பற்றாது

சுரங்கப்பாதை பாதைக்கு ஏற்கனவே மூல முகவரியைத் தேர்ந்தெடுத்த சாக்கெட், மீண்டும் வழியமைத்த பிறகும் அந்த முகவரியையே வைத்திருக்கும். வழி மாற்றத்தில் அதை மீண்டும் எழுதுவது எதுவும் இல்லை, அதனால்தான் மேல்நிலை வலையமைப்பு திருப்பி அனுப்ப முடியாத தனிப்பட்ட மூலத்துடன் பாக்கெட் இயற்பியல் இடைமுகத்தின் வழியாக வெளியேறுகிறது.

தெரியும் அறிகுறி, தரவை அனுப்புவது போலத் தோன்றி ஒருபோதும் பதில் பெறாத பயன்பாடு, பாக்கெட் ஒருபோதும் திரும்பாததால் எதையும் காட்டாத ஃபயர்வால் பதிவு.

குறுகிய திருத்தம், அந்தப் பயன்பாட்டின் குறி மற்றும் அதன் உண்மையான வெளியீட்டு இடைமுகத்திற்கு மட்டுப்படுத்தப்பட்ட, ஏற்கனவே உள்ள NAT உடன் ஒருங்கிணைந்த, அதை மாற்றாத மூல மொழிபெயர்ப்பு விதி:

table inet bypass {
  chain postrouting {
    type nat hook postrouting priority srcnat; policy accept;
    meta mark 0x1 oifname "wlan0" masquerade
  }
}

விலக்கை மட்டும் மொழிபெயர்க்கவும், வேறு எதையும் அல்ல. பொதுவான masquerade விதி அறிகுறியைச் சரிசெய்து எந்தப் பரிமாற்றம் எந்த வழியை எடுத்தது என்று சொல்லும் திறனை அழிக்கிறது. குறி, உண்மையான வெளியீட்டு இடைமுகம், முடிந்தால் பயன்பாட்டின் சொந்த முகவரியுடன் பொருத்துங்கள். அகலமான விதிகளை எழுதுவது எளிது, பின்னர் தணிக்கை செய்வது கிட்டத்தட்ட சாத்தியமற்றது.

இன்னும் விலக்கிலிருந்து தப்பிப்பது

பெயர் தீர்வு வேறு cgroup இல் உள்ள தனி resolver செயல்முறையிலிருந்து வரலாம், எனவே உலாவியின் சாக்கெட்டை வகைப்படுத்துவது அதன் தேடல்களை வகைப்படுத்தாது. resolver இன் வினவல்கள் சுரங்கப்பாதையில் இருக்கும்போது இணைப்பு அதற்கு வெளியே சென்றால், split-horizon பதில்கள் வழியுடன் பொருந்தாமல் போகலாம். அந்தப் பொருந்தாமை DNS பிழைகள் போலத் தோன்றும் ஆனால் அல்லாத கோளாறுகளை உருவாக்குகிறது.

பெரும்பாலான அமைப்புகளில் குழந்தை செயல்முறைகள் cgroup ஐ மரபுரிமையாகப் பெறுகின்றன, ஆனால் தன்னைத் தன் சொந்த scope க்கு நகர்த்தும் உதவியாளர் பெறுவதில்லை. அனுமானிக்காமல் சரிபார்க்கவும், குறிப்பாக தன்னை மீண்டும் இயக்கும் அனைத்திற்கும்.

இறுதியாக, சுரங்கப்பாதை கீழே இருக்கும்போது என்ன நடக்க வேண்டும் என்பதை முடிவு செய்யுங்கள். அமைதியாக முழுமையான தவிர்ப்பாக மாறும் விலக்கு, தோல்வியில் மூடப்படும் விலக்கிலிருந்து வேறுபட்ட பாதுகாப்பு நிலை, அவற்றில் ஒன்று மட்டுமே நீங்கள் கருதியது.

தொடர்புடைய கட்டுரைகள்