വളയ്ക്കാനാകാത്ത ഒരു ആവശ്യകത നിങ്ങൾക്കുണ്ട്: അയച്ചയാൾ പുറപ്പെടുവിക്കുന്ന അതേ 1,500 ബൈറ്റ് IP പാക്കറ്റ്, ഹെഡറുകൾ ഉൾപ്പെടെ, എതിർവശം സ്വീകരിക്കണം. ആ പാക്കറ്റും സ്വന്തം ഫ്രെയിമിംഗും രണ്ടാമത്തെ 1,500 ബൈറ്റ് IP പാക്കറ്റിനുള്ളിൽ ഒതുക്കാൻ ടണലിന് കഴിയില്ല, അതിനാൽ രൂപകൽപ്പനയിൽ എന്തെങ്കിലും വിട്ടുകൊടുക്കണം. താഴെയുള്ള ക്രമമാണ് ഞാൻ മാറ്റവിൻഡോയിൽ ഉപയോഗിക്കുന്നത്: ബൈറ്റ് ബജറ്റ് എഴുതുക, അണ്ടർലേയ്ക്ക് യഥാർത്ഥത്തിൽ എന്ത് വഹിക്കാനാകുമെന്ന് തെളിയിക്കുക, പിന്നീട് കൃത്യമായി ഒരു വാഹക സംവിധാനം തിരഞ്ഞെടുത്ത് എതിർവശത്ത് ആന്തരിക പാക്കറ്റ് സ്ഥിരീകരിക്കുക.

പ്രൊഫൈൽ എഡിറ്റ് ചെയ്യുന്നതിന് മുമ്പ് ബൈറ്റ് ബജറ്റ് എഴുതുക

എൻകാപ്സുലേഷൻ പല പാളികളിലും ബൈറ്റുകൾ ചേർക്കുന്നു, ആകെത്തുക നിങ്ങളുടെ പ്രൊഫൈലിന്റെ സ്വഭാവമാണ്, കണ്ടെത്താവുന്ന ഒരു സ്ഥിരാങ്കമല്ല. വിലാസ കുടുംബം, സൈഫർ തിരഞ്ഞെടുപ്പ്, ഗതാഗത പ്രോട്ടോക്കോൾ, ഏതെങ്കിലും കംപ്രഷൻ അല്ലെങ്കിൽ ഫ്രെയിമിംഗ് ഓപ്ഷൻ എന്നിവ സംഖ്യ മാറ്റുന്നു, അതിനാൽ മറ്റൊരു വിന്യാസത്തിൽ നിന്ന് പകർത്തിയ കുറയ്ക്കൽ ബജറ്റായി ഉപയോഗശൂന്യമാണ്. ആന്തരിക ആവശ്യകതയിൽ നിന്ന് തുടങ്ങി, നിങ്ങളുടെ കോൺഫിഗറേഷന്റെ അളന്ന ഓരോ-പാക്കറ്റ് ഓവർഹെഡ് ചേർത്ത്, ഫലമായ ബാഹ്യ വലിപ്പം ആരെങ്കിലും ഫയൽ എഡിറ്റ് ചെയ്യുന്നതിന് മുമ്പ് മാറ്റ ടിക്കറ്റിൽ എഴുതുക.

രണ്ട് സംഖ്യകൾ രൂപകൽപ്പന തീരുമാനിക്കുന്നു: ഫ്രാഗ്മെന്റേഷൻ ഇല്ലാതെ പാത വഹിക്കുന്ന ഏറ്റവും വലിയ ബാഹ്യ പാക്കറ്റ്, നിങ്ങളുടെ എൻകാപ്സുലേഷന് വേണ്ട അധിക ബൈറ്റുകൾ. ആദ്യത്തേത് രണ്ടാമത്തേതിൽ 1,500 ചേർത്തതിനേക്കാൾ ചെറുതാണെങ്കിൽ, അവയിൽ ഒന്ന് മാറണം. അപ്പോൾ തിരഞ്ഞെടുപ്പ് സർഗ്ഗാത്മകമല്ല, ഇടുങ്ങിയതാകുന്നു, അതിനാൽ ഓപ്ഷനുകൾ ചർച്ച ചെയ്യുന്നതിന് മുമ്പ് രണ്ട് സംഖ്യകളും എഴുതിവയ്ക്കുന്നു. ടണൽ പാളിയിൽ ആ ബൈറ്റുകൾ കംപ്രസ് ചെയ്ത് ഇല്ലാതാക്കുന്ന ഒന്നുമില്ല, ഒരൊറ്റ MTU പൂർണ്ണസംഖ്യയും നിങ്ങൾക്ക് നൽകിയ ആവശ്യകത നീക്കില്ല.

do-not-fragment ping ഉപയോഗിച്ച് അണ്ടർലേ പരിശോധിക്കുക

ഇന്റർഫേസ് MTU വിശ്വസിക്കാതെ പാത അളക്കുക, കാരണം ബാഹ്യ പാതയിലെ ഏറ്റവും ചെറിയ കണ്ണിയാണ് പ്രധാനം. Linux ൽ, -M do do-not-fragment ബിറ്റ് സെറ്റ് ചെയ്യുന്നു, -s ICMP പേലോഡ് എടുക്കുന്നു, അതിനാൽ 20 ബൈറ്റ് IP ഹെഡറും 8 ബൈറ്റ് ICMP ഹെഡറും കുറയ്ക്കുമ്പോൾ 1,500 ബൈറ്റ് ഫ്രെയിം 1,472 ബൈറ്റ് പേലോഡിൽ പ്രതികരിക്കുന്നു. പരിശോധന പരാജയപ്പെടുന്നതുവരെ പേലോഡ് കൂട്ടുക, പിന്നീട് ജംബോ വലിപ്പത്തിലേക്ക് ചാടി പാത അത് ഒട്ടും വഹിക്കുന്നുണ്ടോ എന്ന് നോക്കുക.

ping -M do -s 1472 -c 2 198.51.100.10
ping -M do -s 8972 -c 2 198.51.100.10
tracepath -n 198.51.100.10

1,472 കടന്ന് 8,972 ൽ പരാജയപ്പെടുന്ന പാതയ്ക്ക് 1,500 ബൈറ്റ് ആന്തരിക പാക്കറ്റും ഓവർഹെഡും ഒരൊറ്റ ബാഹ്യ പാക്കറ്റിൽ വഹിക്കാനാവില്ല. VPN കോൺഫിഗറേഷൻ തുറക്കുന്നതിന് മുമ്പ് നിങ്ങൾക്ക് വേണ്ടിയിരുന്ന ഉത്തരമാണിത്. അടുത്ത രണ്ട് വിഭാഗങ്ങളിൽ ഏതാണ് നിങ്ങൾക്ക് ബാധകമെന്നും ഇത് തീരുമാനിക്കുന്നു, അതിനാൽ രണ്ട് പരിശോധനാ ഫലങ്ങളും ടിക്കറ്റിന് അരികിൽ സൂക്ഷിക്കുക. ഇവിടെ ഊഹിക്കുന്നത് ഒരു അറ്റകുറ്റപ്പണി വിൻഡോ നഷ്ടപ്പെടുത്തുന്നു, കാരണം താൻ up ആണെന്ന് റിപ്പോർട്ട് ചെയ്യുന്ന ടണൽ പാത സ്വീകരിക്കുന്ന ഏറ്റവും വലിയ പാക്കറ്റിനെക്കുറിച്ച് ഒന്നും പറയുന്നില്ല.

ഓരോ ഹോപ്പും യോജിക്കുന്നിടത്ത് മാത്രം പാതയുടെ MTU ഉയർത്തുക

ജംബോ ഫ്രെയിമുകൾ end-to-end സ്വഭാവമാണ്, നിങ്ങൾ യാദൃശ്ചികമായി നിയന്ത്രിക്കുന്ന രണ്ട് എൻഡ്പോയിന്റുകളിൽ പ്രവർത്തനക്ഷമമാക്കുന്ന ക്രമീകരണമല്ല. ബാഹ്യ പാതയിലെ ഓരോ സ്വിച്ചും റൂട്ടറും ദാതാവിന്റെ കൈമാറ്റവും വലിയ വലിപ്പത്തിൽ യോജിക്കണം, ഒരൊറ്റ 1,500 ബൈറ്റ് ഹോപ്പ് നിങ്ങൾ ഇപ്പോൾ വലുതാക്കിയ പാക്കറ്റ് നിശബ്ദമായി ഉപേക്ഷിക്കും. പ്രാദേശിക ഇന്റർഫേസ് മാത്രം ഉയർത്തുന്നത് ടണൽ തകർന്നതായി കാണിക്കുകയും അണ്ടർലേ നിശബ്ദമായി ഉപേക്ഷിക്കുകയും ചെയ്യുന്ന പതിവ് പകുതി മാറ്റമാണ്.

ip link set dev eth1 mtu 9000
ip link show dev eth1
ping -M do -s 8972 -c 2 198.51.100.10

ഇന്റർഫേസ് മാറ്റുക, പിന്നീട് മറ്റെന്തെങ്കിലും മാറ്റുന്നതിന് മുമ്പ് അതേ പാത വീണ്ടും പരിശോധിക്കുക. പരിശോധന ഇപ്പോഴും പരാജയപ്പെട്ടാൽ, പഴയപടിയാക്കുക ip link set dev eth1 mtu 1500 നിങ്ങളുടേതല്ലാത്ത ലിങ്കിനെക്കുറിച്ച് ദാതാവിനോട് തർക്കിക്കുന്നതിന് പകരം ഫ്രാഗ്മെന്റേഷനിലേക്ക് പോകുക.

അണ്ടർലേ വളരാൻ കഴിയാത്തപ്പോൾ ടണൽ ഫ്രാഗ്മെന്റേഷൻ ഉപയോഗിക്കുക

ആന്തരിക പാക്കറ്റിന് താഴെയുള്ള പിന്തുണയുള്ള ഫ്രാഗ്മെന്റേഷൻ സംവിധാനം നിരവധി ബാഹ്യ പാക്കറ്റുകൾക്ക് ഒരു ആന്തരിക പാക്കറ്റ് വഹിക്കാൻ അനുവദിക്കുന്നു, എതിർവശത്തെ ടണൽ എൻഡ്പോയിന്റ് യഥാർത്ഥ പാക്കറ്റ് സ്റ്റാക്കിന് നൽകുന്നതിന് മുമ്പ് അവ വീണ്ടും കൂട്ടിച്ചേർക്കുന്നു. Community OpenVPN ന്റെ UDP fragment ഓപ്ഷൻ ആ ആശയത്തിന്റെ ഒരു നടപ്പാക്കലാണ്, ബാഹ്യ പാക്കറ്റിന്റെ സാധാരണ IP ഫ്രാഗ്മെന്റേഷന് സമാനമല്ല. രണ്ട് പീറുകളും ആ ഫോർമാറ്റ് പിന്തുണയ്ക്കുന്ന പതിപ്പ് പ്രവർത്തിപ്പിക്കണം, ഡാറ്റാ പാത നിങ്ങൾ കരുതുന്നതായിരിക്കണം: OpenVPN 3 ക്ലയന്റുകൾക്കും കേർണൽ ത്വരിതപ്പെടുത്തിയ ഡാറ്റാ ചാനലുകൾക്കും വ്യത്യസ്ത പരിധികളാണ്, അതിനാൽ ഒരു ക്ലയന്റിൽ പ്രവർത്തിക്കുന്ന പ്രൊഫൈൽ മറ്റൊന്നിൽ പരാജയപ്പെടാം.

openvpn --config client.ovpn --tun-mtu 1500 --fragment 1400 --verb 4

സാധാരണ ബാഹ്യ ഫ്രാഗ്മെന്റേഷൻ മറ്റൊരു ഓപ്ഷനാണ്, അത് ദുർബലമാണ്. IPv6 റൂട്ടറുകൾ ഫോർവേഡ് ചെയ്ത പാക്കറ്റ് ഒട്ടും ഫ്രാഗ്മെന്റ് ചെയ്യുന്നില്ല, അതിനാൽ അമിതവലിപ്പമുള്ള ബാഹ്യ പാക്കറ്റ് വെറുതെ ചത്തുപോകുന്നു, ബന്ധപ്പെട്ട ICMPv6 സന്ദേശം പാതയിൽ അതിജീവിച്ചാൽ മാത്രമേ അയച്ചയാൾ അത് അറിയൂ. ഫ്രാഗ്മെന്റുകൾ ഫിൽട്ടറിംഗും നഷ്ട വർദ്ധനവും ക്ഷണിക്കുന്നു, അതിനാൽ ഇതിനെ ഞാൻ പദ്ധതിയല്ലാതെ കരുതൽ മാർഗമായി കാണുന്നു.

സ്ട്രീം അടിസ്ഥാനമാക്കിയ ബാഹ്യ വാഹകൻ സ്വന്തം ബൈറ്റ് സ്ട്രീം വിഭജിച്ച് വലിപ്പ ചോദ്യം ഒഴിവാക്കുന്നു, പുനർനിർമ്മിച്ച ആന്തരിക പാക്കറ്റ് ഇപ്പോഴും 1,500 ബൈറ്റ് ആകാം. ഇത് സ്വന്തം ചെലവുള്ള ഗതാഗത തീരുമാനമാണ്, TCP ക്കുള്ളിലെ TCP എന്ന പ്രസിദ്ധ സ്വഭാവം ഉൾപ്പെടെ, അതിനാൽ MTU വാദത്തിന്റെ പാർശ്വഫലമായല്ല, ബോധപൂർവം സ്വീകരിക്കുക.

ആന്തരിക പാക്കറ്റ് മാറ്റമില്ലാതെ എത്തുന്നുവെന്ന് സ്ഥിരീകരിക്കുക

പരിശോധന ഒരു വിജയകരമായ ഹാൻഡ്ഷേക്കല്ല. രണ്ടറ്റത്തും ടണൽ ഇന്റർഫേസിൽ ക്യാപ്ചർ ചെയ്യുക ആപ്ലിക്കേഷൻ യഥാർത്ഥത്തിൽ അയച്ച പാക്കറ്റിന്റെ വലിപ്പവും ഉള്ളടക്കവും എതിർവശം സ്വീകരിച്ചതുമായി താരതമ്യം ചെയ്യുക.

ip link show dev tun0
ping -M do -s 1472 -c 2 10.8.0.1
tcpdump -ni tun0 -c 5 'icmp and greater 1000'

എതിർ അറ്റത്ത് പൂർണ്ണ വലിപ്പത്തിലുള്ള ആന്തരിക പാക്കറ്റ് ക്യാപ്ചർ കാണിക്കുന്നുവെങ്കിൽ, വാഹക തിരഞ്ഞെടുപ്പ് പ്രവർത്തിക്കുന്നു, ബാക്കിയുള്ളത് അത് രേഖപ്പെടുത്തുകയാണ്. ടണൽ താൻ up ആണെന്ന് റിപ്പോർട്ട് ചെയ്യുമ്പോൾ ഒന്നും കാണിക്കുന്നില്ലെങ്കിൽ, ബാഹ്യ പാക്കറ്റ് എൻഡ്പോയിന്റുകൾക്കിടയിൽ എവിടെയോ ഉപേക്ഷിക്കപ്പെടുന്നു, ഇത് നിങ്ങളെ സൈഫർ ക്രമീകരണങ്ങളിലേക്കല്ല, പരിശോധനയിലേക്ക് തിരികെ കൊണ്ടുപോകുന്നു.

ടിക്കറ്റ് അടയ്ക്കുന്നതിന് മുമ്പ് മൂന്ന് കാര്യങ്ങൾ രേഖപ്പെടുത്തുക: അളന്ന ബാഹ്യ ബജറ്റ്, തിരഞ്ഞെടുത്ത സംവിധാനം, ആന്തരിക പാക്കറ്റ് അതിജീവിച്ചുവെന്ന് തെളിയിച്ച കമാൻഡ്. ഈ ടണൽ സ്പർശിക്കുന്ന അടുത്ത വ്യക്തിക്ക് മൂന്നും വേണ്ടിവരും, അവയൊന്നും കോൺഫിഗറേഷൻ ഫയലിൽ നിന്ന് മാത്രം പുനർനിർമ്മിക്കാനാവില്ല.

അനുബന്ധ ലേഖനങ്ങൾ