ලිනක්ස් හි වේගවත් මාර්ගගත කිරීම සහ NAT

IPv4 ලිපින ක්ෂය වන විට, බොහෝ ටෙලිකොම් ක්‍රියාකරුවන් තම සේවාදායකයන්ට ලිපින පරිවර්තනය භාවිතයෙන් ජාල ප්‍රවේශය ලබා දීමේ අවශ්‍යතාවයට මුහුණ දී සිටිති. මෙම ලිපියෙන් මම ඔබට භාණ්ඩ සේවාදායකයන් මත Carrier Grade NAT කාර්ය සාධනය ලබා ගන්නේ කෙසේදැයි ඔබට කියමි.

ඉතිහාසය ටිකක්

IPv4 ලිපින අවකාශය අවසන් වීම පිළිබඳ මාතෘකාව තවදුරටත් අලුත් නොවේ. යම් අවස්ථාවක දී, පොරොත්තු ලේඛන RIPE හි දිස් විය, පසුව ලිපින කොටස් වෙළඳාම් කරන ලද හුවමාරු මතු වූ අතර ඒවා බදු දීමට ගනුදෙනු අවසන් විය. ක්රමානුකූලව, ටෙලිකොම් ක්රියාකරුවන් ලිපිනය සහ වරාය පරිවර්තනය භාවිතා කරමින් අන්තර්ජාල ප්රවේශ සේවා සැපයීමට පටන් ගත්හ. එක් එක් ග්‍රාහකයාට "සුදු" ලිපිනයක් නිකුත් කිරීමට ප්‍රමාණවත් ලිපින ලබා ගැනීමට සමහරු සමත් නොවූ අතර අනෙක් අය ද්විතීයික වෙළඳපොලේ ලිපින මිලදී ගැනීම ප්‍රතික්ෂේප කිරීමෙන් මුදල් ඉතිරි කිරීමට පටන් ගත්හ. ජාල උපකරණ නිෂ්පාදකයින් මෙම අදහසට සහාය දැක්වීය, මන්ද මෙම ක්‍රියාකාරීත්වයට සාමාන්‍යයෙන් අමතර දිගු මොඩියුල හෝ බලපත්‍ර අවශ්‍ය වේ. උදාහරණයක් ලෙස, ජුනිපර්ගේ MX රවුටර පේළියේ (නවතම MX104 සහ MX204 හැර), ඔබට වෙනම MS-MIC සේවා කාඩ්පතකින් NAPT සිදු කළ හැකිය, Cisco ASR1k සඳහා CGN බලපත්‍රයක් අවශ්‍ය වේ, Cisco ASR9k සඳහා වෙනම A9K-ISM-100 මොඩියුලයක් අවශ්‍ය වේ. සහ A9K-CGN බලපත්‍රයක් -LIC ඔහුට. පොදුවේ ගත් කල, සතුට සඳහා විශාල මුදලක් වැය වේ.

IPTables

NAT ක්‍රියාත්මක කිරීමේ කාර්යයට විශේෂිත පරිගණක සම්පත් අවශ්‍ය නොවේ; එය සාමාන්‍ය අරමුණු ප්‍රොසෙසර මගින් විසඳා ගත හැකිය, උදාහරණයක් ලෙස, ඕනෑම ගෘහ රවුටරයක ස්ථාපනය කර ඇත. ටෙලිකොම් ක්‍රියාකරුගේ පරිමාණයෙන්, මෙම ගැටළුව FreeBSD (ipfw/pf) හෝ GNU/Linux (iptables) ධාවනය වන භාණ්ඩ සේවාදායක භාවිතයෙන් විසඳා ගත හැක. අපි FreeBSD සලකා බලන්නේ නැත, මන්ද ... මම බොහෝ කලකට පෙර මෙම මෙහෙයුම් පද්ධතිය භාවිතා කිරීම නැවැත්තුවා, එබැවින් අපි GNU/Linux වෙත රැඳී සිටිමු.

ලිපින පරිවර්තනය සක්රිය කිරීම කිසිසේත් අපහසු නැත. පළමුව ඔබ nat වගුවේ iptables හි රීතියක් ලියාපදිංචි කළ යුතුය:

iptables -t nat -A POSTROUTING -s 100.64.0.0/10 -j SNAT --to <pool_start_addr>-<pool_end_addr> --persistent

මෙහෙයුම් පද්ධතිය nf_conntrack මොඩියුලය පූරණය කරනු ඇත, එය සියලුම සක්‍රීය සම්බන්ධතා නිරීක්ෂණය කර අවශ්‍ය පරිවර්තන සිදු කරයි. මෙහි සියුම් කරුණු කිහිපයක් තිබේ. පළමුව, අපි ටෙලිකොම් ක්‍රියාකරුගේ පරිමාණයෙන් NAT ගැන කතා කරන බැවින්, කල් ඉකුත්වීම් සකස් කිරීම අවශ්‍ය වේ, මන්ද පෙරනිමි අගයන් සමඟ පරිවර්තන වගුවේ ප්‍රමාණය ඉක්මනින් ව්‍යසනකාරී අගයන් දක්වා වර්ධනය වේ. පහත දැක්වෙන්නේ මම මගේ සේවාදායකයේ භාවිතා කළ සැකසුම් සඳහා උදාහරණයකි:

net.ipv4.ip_forward = 1
net.ipv4.ip_local_port_range = 8192 65535

net.netfilter.nf_conntrack_generic_timeout = 300
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 60
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 600
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 45
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_udp_timeout = 30
net.netfilter.nf_conntrack_udp_timeout_stream = 60
net.netfilter.nf_conntrack_icmpv6_timeout = 30
net.netfilter.nf_conntrack_icmp_timeout = 30
net.netfilter.nf_conntrack_events_retry_timeout = 15
net.netfilter.nf_conntrack_checksum=0

දෙවනුව, පරිවර්තන වගුවේ පෙරනිමි ප්‍රමාණය ටෙලිකොම් ක්‍රියාකරුවෙකුගේ කොන්දේසි යටතේ ක්‍රියා කිරීමට සැලසුම් කර නොමැති බැවින්, එය වැඩි කළ යුතුය:

net.netfilter.nf_conntrack_max = 3145728

සියලුම විකාශන ගබඩා කරන හැෂ් වගුව සඳහා බාල්දි ගණන වැඩි කිරීම ද අවශ්‍ය වේ (මෙය nf_conntrack මොඩියුලයේ විකල්පයකි):

options nf_conntrack hashsize=1572864

මෙම සරල උපාමාරු වලින් පසුව, සේවාදායක ලිපින විශාල ප්‍රමාණයක් බාහිර ඒවා සංචිතයකට පරිවර්තනය කළ හැකි සම්පූර්ණයෙන්ම ක්‍රියාකාරී සැලසුමක් ලබා ගනී. කෙසේ වෙතත්, මෙම විසඳුමේ කාර්ය සාධනය අපේක්ෂා කිරීමට බොහෝ දේ ඉතිරි වේ. NAT (2013 දී පමණ) සඳහා GNU/Linux භාවිතා කිරීමේ මගේ පළමු උත්සාහයේදී, මට සේවාදායකයකට 7Mpps (Xeon E0.8-5v1650) 2Gbit/s පමණ කාර්ය සාධනයක් ලබා ගැනීමට හැකි විය. එතැන් සිට, GNU/Linux කර්නල් ජාල තොගයේ විවිධ ප්‍රශස්තිකරණයන් සිදු කර ඇත, එකම දෘඪාංගයේ එක් සේවාදායකයක කාර්ය සාධනය 18-19 Mpps හි 1.8-1.9 Gbit/s දක්වා වැඩි වී ඇත (මෙය උපරිම අගයන් විය) , නමුත් එක් සේවාදායකයක් විසින් සකසන ලද රථවාහන පරිමාව සඳහා ඉල්ලුම වඩා වේගයෙන් වර්ධනය විය. එහි ප්රතිඵලයක් වශයෙන්, විවිධ සේවාදායකයන් මත පැටවීම සමතුලිත කිරීම සඳහා යෝජනා ක්රම සකස් කරන ලදී, නමුත් මේ සියල්ල සපයනු ලබන සේවාවන්හි ගුණාත්මකභාවය සැකසීම, නඩත්තු කිරීම සහ පවත්වාගෙන යාමේ සංකීර්ණත්වය වැඩි විය.

NTFables

වර්තමානයේ, මෘදුකාංග "මාරු කිරීමේ බෑග්" හි විලාසිතාමය ප්රවණතාවක් වන්නේ DPDK සහ XDP භාවිතයයි. මෙම මාතෘකාව පිළිබඳ ලිපි රාශියක් ලියා ඇත, විවිධ කථා රාශියක් සිදු කර ඇති අතර වාණිජ නිෂ්පාදන දිස්වේ (උදාහරණයක් ලෙස, VasExperts වෙතින් SKAT). නමුත් ටෙලිකොම් ක්‍රියාකරුවන්ගේ සීමිත ක්‍රමලේඛන සම්පත් අනුව, මෙම රාමු මත පදනම්ව ඕනෑම “නිෂ්පාදනයක්” ඔබ විසින්ම නිර්මාණය කිරීම තරමක් ගැටළු සහගතය. අනාගතයේදී එවැනි විසඳුමක් ක්රියාත්මක කිරීම වඩා දුෂ්කර වනු ඇත; විශේෂයෙන්, රෝග විනිශ්චය මෙවලම් සංවර්ධනය කිරීමට සිදුවනු ඇත. උදාහරණයක් ලෙස, DPDK සමඟ සම්මත tcpdump එලෙසම ක්‍රියා නොකරනු ඇති අතර, එය XDP භාවිතයෙන් වයර් වෙත ආපසු යවන ලද පැකට් "නොපෙනේ". පරිශීලක-අවකාශයට පැකට් ෆෝවර්ඩිං ප්‍රතිදානය සඳහා නව තාක්ෂණයන් පිළිබඳ සියලු කතා මධ්‍යයේ, ඒවා අවධානයට ලක් නොවීය. වාර්තා и ලිපි පැබ්ලෝ නීරා අයුසෝ, iptables නඩත්තුකරු, nftables හි ප්‍රවාහ අක්‍රිය කිරීම වර්ධනය කිරීම ගැන. මෙම යාන්ත්රණය දෙස සමීපව බලමු.

ප්‍රධාන අදහස නම් රවුටරය එක් සැසියකින් ප්‍රවාහයේ දෙපැත්තටම පැකට් ලබා දුන්නේ නම් (TCP සැසිය ස්ථාපිත තත්වයට ගියේය), එවිට මෙම සැසියේ පසු පැකට් සියලුම ෆයර්වෝල් නීති හරහා සම්මත කිරීමට අවශ්‍ය නොවේ, මන්ද මෙම සියලු චෙක්පත් පැකට්ටුව තවදුරටත් මාර්ගගත කිරීම වෙත මාරු කිරීමත් සමඟ අවසන් වේ. ඇත්ත වශයෙන්ම අපට මාර්ගයක් තෝරා ගැනීමට අවශ්‍ය නැත - මෙම සැසිය තුළ පැකට් යැවිය යුත්තේ කුමන අතුරු මුහුණතට සහ කුමන ධාරකයටද යන්න අපි දැනටමත් දනිමු. ඉතිරිව ඇත්තේ මෙම තොරතුරු ගබඩා කිරීම සහ පැකට් සැකසීමේ මුල් අවධියේදී එය මාර්ගගත කිරීම සඳහා භාවිතා කිරීමයි. NAT සිදු කරන විට, nf_contrack මොඩියුලය මගින් පරිවර්තනය කරන ලද ලිපින සහ වරායන්හි වෙනස්කම් පිළිබඳ තොරතුරු අතිරේකව ගබඩා කිරීම අවශ්ය වේ. ඔව්, ඇත්ත වශයෙන්ම, මෙම නඩුවේදී iptables හි විවිධ පොලිස් නිලධාරීන් සහ වෙනත් තොරතුරු සහ සංඛ්‍යාලේඛන රීති වැඩ කිරීම නවත්වයි, නමුත් වෙනම ස්ථාවර NAT හෝ, උදාහරණයක් ලෙස, මායිමක කාර්යයේ රාමුව තුළ, මෙය එතරම් වැදගත් නොවේ, මන්ද සේවාවන් උපාංග හරහා බෙදා හරිනු ලැබේ.

වින්‍යාසය

මෙම කාර්යය භාවිතා කිරීමට අපට අවශ්‍ය වන්නේ:

  • නැවුම් කර්නලයක් භාවිතා කරන්න. ක්‍රියාකාරීත්වය කර්නලය 4.16 හි දර්ශනය වී තිබුණද, සෑහෙන කාලයක් තිස්සේ එය ඉතා “අමු” වූ අතර නිතිපතා කර්නල් භීතියට හේතු විය. LTS කර්නල් 2019 සහ 4.19.90 මුදා හරින විට 5.4.5 දෙසැම්බර් මාසයේදී පමණ සියල්ල ස්ථාවර විය.
  • nftables හි තරමක් මෑත අනුවාදයක් භාවිතා කරමින් iptables රීති nftables ආකෘතියෙන් නැවත ලියන්න. හරියටම 0.9.0 අනුවාදයේ ක්‍රියා කරයි

ප්‍රතිපත්තිමය වශයෙන් සෑම දෙයක්ම පළමු කරුණ සමඟ පැහැදිලි නම්, ප්‍රධාන දෙය නම් එකලස් කිරීමේදී (CONFIG_NFT_FLOW_OFFLOAD=m) වින්‍යාසය තුළ මොඩියුලය ඇතුළත් කිරීමට අමතක නොකිරීමයි, එවිට දෙවන කරුණ පැහැදිලි කිරීම අවශ්‍ය වේ. nftables රීති iptables වලට වඩා සම්පූර්ණයෙන්ම වෙනස් ලෙස විස්තර කර ඇත. ප්‍රලේඛනය සියලුම කරුණු පාහේ හෙළි කරයි, විශේෂ ද ඇත පරිවර්තක iptables සිට nftables දක්වා නීති. ඒ නිසා මම NAT සහ flow offload පිහිටුවීම පිළිබඳ උදාහරණයක් පමණක් දෙන්නම්. උදාහරණයක් ලෙස කුඩා පුරාවෘත්තයක්: , - මේවා ගමනාගමනය ගමන් කරන ජාල අතුරුමුහුණත් වේ; යථාර්ථයේ දී ඒවායින් දෙකකට වඩා තිබිය හැකිය. , - "සුදු" ලිපින පරාසයේ ආරම්භක සහ අවසන් ලිපිනය.

NAT වින්‍යාසය ඉතා සරල ය:

#! /usr/sbin/nft -f

table nat {
        chain postrouting {
                type nat hook postrouting priority 100;
                oif <o_if> snat to <pool_addr_start>-<pool_addr_end> persistent
        }
}

ප්‍රවාහ අක්‍රිය වීමත් සමඟ එය ටිකක් සංකීර්ණ නමුත් තරමක් තේරුම්ගත හැකිය:

#! /usr/sbin/nft -f

table inet filter {
        flowtable fastnat {
                hook ingress priority 0
                devices = { <i_if>, <o_if> }
        }

        chain forward {
                type filter hook forward priority 0; policy accept;
                ip protocol { tcp , udp } flow offload @fastnat;
        }
}

ඇත්ත වශයෙන්ම, එය සමස්ත සැකසුමයි. දැන් සියලුම TCP/UDP ගමනාගමනය fastnat වගුවට වැටෙනු ඇති අතර වඩා වේගයෙන් සැකසෙනු ඇත.

ප්රතිඵල

මෙය කෙතරම් “වේගවත්” දැයි පැහැදිලි කිරීම සඳහා, මම එකම දෘඩාංග (Xeon E5-1650v2) සමඟ එකම ලිනක්ස් කර්නලය භාවිතා කර, නමුත් iptables තුළ NAT ක්‍රියාත්මක කරමින්, සමාන ලෙස වින්‍යාස කර ඇති, සැබෑ සේවාදායකයන් දෙකක භාරයේ තිර රුවක් අමුණමි. (NAT4) සහ nftables තුළ (NAT5).

ලිනක්ස් හි වේගවත් මාර්ගගත කිරීම සහ NAT

තිර පිටපතෙහි තත්පරයට පැකට් ප්‍රස්ථාරයක් නොමැත, නමුත් මෙම සේවාදායකයන්ගේ පැටවුම් පැතිකඩෙහි සාමාන්‍ය පැකට් ප්‍රමාණය බයිට් 800 ක් පමණ වේ, එබැවින් අගයන් 1.5Mpps දක්වා ළඟා වේ. ඔබට පෙනෙන පරිදි, nftables සහිත සේවාදායකයට විශාල කාර්ය සාධන සංචිතයක් ඇත. දැනට, මෙම සේවාදායකය 30Mpps හිදී 3Gbit/s දක්වා ක්‍රියාවට නංවන අතර නොමිලේ CPU සම්පත් තිබියදී 40Gbps භෞතික ජාල සීමාව සපුරාලීමට පැහැදිලිවම හැකියාව ඇත.

ඔවුන්ගේ සේවාදායකයන්ගේ ක්‍රියාකාරිත්වය වැඩි දියුණු කිරීමට උත්සාහ කරන ජාල ඉංජිනේරුවන්ට මෙම ද්‍රව්‍යය ප්‍රයෝජනවත් වනු ඇතැයි මම බලාපොරොත්තු වෙමි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න