рд▓рд┐рдирдХреНрд╕рдорд╛ рджреНрд░реБрдд рдорд╛рд░реНрдЧ рд░ NAT

IPv4 рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рд╕рдорд╛рдкреНрдд рднрдПрдкрдЫрд┐, рдзреЗрд░реИ рджреВрд░рд╕рдВрдЪрд╛рд░ рдЕрдкрд░реЗрдЯрд░рд╣рд░реВрд▓реЗ рдареЗрдЧрд╛рдирд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЖрдлреНрдирд╛ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓рд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдХреЛ рд╕рд╛рдордирд╛ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреНред рдпрд╕ рд▓реЗрдЦрдорд╛ рдо рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдмрддрд╛рдЙрдиреЗрдЫреБ рдХрд┐ рддрдкрд╛рдЗрдБ рдХрд╕рд░реА рдХрдореЛрдбрд┐рдЯреА рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рдХреНрдпрд╛рд░рд┐рдпрд░ рдЧреНрд░реЗрдб 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 рд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрджреИрдиреМрдВ, рдХрд┐рдирдХрд┐ ... рдореИрд▓реЗ рдпреЛ OS рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдзреЗрд░реИ рд╕рдордп рдкрд╣рд┐рд▓реЗ рд░реЛрдХреЗрдХреЛ рдерд┐рдПрдБ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА 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 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдореЗрд░реЛ рдкрд╣рд┐рд▓реЛ рдкреНрд░рдпрд╛рд╕рдорд╛, рдореИрд▓реЗ рдкреНрд░рддрд┐ рд╕рд░реНрднрд░ (Xeon E7-0.8v5) 1650Mpps рдорд╛ рд▓рдЧрднрдЧ 2Gbit/s рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрд╖рдо рднрдПрдБред рддреНрдпрд╕ рд╕рдордпрджреЗрдЦрд┐, GNU/Linux рдХрд░реНрдиреЗрд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рдзреЗрд░реИ рдлрд░рдХ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирд╣рд░реВ рдмрдирд╛рдЗрдПрдХрд╛ рдЫрдиреН, рдПрдЙрдЯреИ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░рдорд╛ рдПрдЙрдЯрд╛ рд╕рд░реНрднрд░рдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди 18-19 Mpps рдорд╛ рд▓рдЧрднрдЧ 1.8-1.9 Gbit/s рдорд╛ рдмрдвреЗрдХреЛ рдЫ (рдпреА рдЕрдзрд┐рдХрддрдо рдорд╛рдирд╣рд░реВ рдерд┐рдП)ред , рддрд░ рдЯреНрд░рд╛рдлрд┐рдХ рднреЛрд▓реНрдпреБрдордХреЛ рдорд╛рдЧ, рдПрдХ рд╕рд░реНрднрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢реЛрдзрди рдзреЗрд░реИ рдЫрд┐рдЯреЛ рдмрдвреНрдпреЛред рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд╡рд┐рднрд┐рдиреНрди рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рд▓реЛрдб рд╕рдиреНрддреБрд▓рди рдЧрд░реНрди рдпреЛрдЬрдирд╛рд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░рд┐рдпреЛ, рддрд░ рдпреА рд╕рдмреИрд▓реЗ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХрд╛ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рд╕реНрдерд╛рдкрдирд╛, рдорд░реНрдордд рд░ рдорд░реНрдорддрд╕рдореНрднрд╛рд░рдорд╛ рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╛рдпреЛред

NFT рдЯреЗрдмрд▓рд╣рд░реВ

рдЖрдЬрдХрд▓, рд╕рдлреНрдЯрд╡реЗрдпрд░ "рд╕рд┐рдлреНрдЯрд┐рдЩ рдмреНрдпрд╛рдЧ" рдорд╛ рдПрдХ рдлреИрд╢рдиреЗрдмрд▓ рдкреНрд░рд╡реГрддреНрддрд┐ DPDK рд░ XDP рдХреЛ рдкреНрд░рдпреЛрдЧ рд╣реЛред рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рдзреЗрд░реИ рд▓реЗрдЦрд╣рд░реВ рд▓реЗрдЦрд┐рдПрдХрд╛ рдЫрдиреН, рдзреЗрд░реИ рдлрд░рдХ рднрд╛рд╖рдгрд╣рд░реВ рдмрдирд╛рдЗрдПрдХрд╛ рдЫрдиреН, рд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЙрддреНрдкрд╛рджрдирд╣рд░реВ рджреЗрдЦрд╛ рдкрд░рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреН (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, VasExperts рдмрд╛рдЯ SKAT)ред рддрд░ рдЯреЗрд▓рд┐рдХрдо рдЕрдкрд░реЗрдЯрд░рд╣рд░реВрдХреЛ рд╕реАрдорд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рд╕реНрд░реЛрддрд╣рд░реВрд▓рд╛рдИ рджрд┐рдИрдпреЛ, рдпреА рдлреНрд░реЗрдорд╡рд░реНрдХрд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдХреБрдиреИ рдкрдирд┐ "рдЙрддреНрдкрд╛рджрди" рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдпреЛ рдПрдХрджрдо рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдЫред рднрд╡рд┐рд╖реНрдпрдорд╛ рдпрд╕реНрддреЛ рд╕рдорд╛рдзрд╛рди рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрди рдзреЗрд░реИ рдЧрд╛рд╣реНрд░реЛ рд╣реБрдиреЗрдЫ; рд╡рд┐рд╢реЗрд╖ рдЧрд░реА, рдирд┐рджрд╛рди рдЙрдкрдХрд░рдгрд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, DPDK рд╕рдБрдЧрдХреЛ рдорд╛рдирдХ tcpdump рд▓реЗ рддреНрдпрд╕рд░реА рдХрд╛рдо рдЧрд░реНрджреИрди, рд░ XDP рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрд╛рд░рд╣рд░реВрдорд╛ рдлрд┐рд░реНрддрд╛ рдкрдард╛рдЗрдПрдХрд╛ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ "рд╣реЗрд░реНрди" рд╣реБрдиреЗрдЫреИрдиред рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛-рд╕реНрдкреЗрд╕рдорд╛ рдкреНрдпрд╛рдХреЗрдЯ рдлрд░реНрд╡рд╛рд░реНрдбрд┐рдЩ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рдкреНрд░рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рдмреИ рдХреБрд░рд╛рдХрд╛рдиреАрдХреЛ рдмреАрдЪрдорд╛, рддрд┐рдиреАрд╣рд░реВ рдмреЗрд╡рд╛рд╕реНрддрд╛ рднрдПред рд░рд┐рдкреЛрд░реНрдЯрд╣рд░реВ ╨╕ рд▓реЗрдЦ рдкрд╛рдмреНрд▓реЛ рдиреЗрдЗрд░рд╛ рдЖрдпреБрд╕реЛ, iptables рд░рдЦрд░рдЦрд╛рд╡рдХрд░реНрддрд╛, nftables рдорд╛ рдкреНрд░рд╡рд╛рд╣ рдЕрдлрд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдмрд╛рд░реЗ рдорд╛ред рдпрд╕ рд╕рдВрдпрдиреНрддреНрд░рд▓рд╛рдИ рдердк рд╡рд┐рд╡рд░рдгрдорд╛ рд╣реЗрд░реМрдВред

рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпреЛ рд╣реЛ рдХрд┐ рдпрджрд┐ рд░рд╛рдЙрдЯрд░рд▓реЗ рдкреНрд░рд╡рд╛рд╣рдХреЛ рджреБрдмреИ рджрд┐рд╢рд╛рдорд╛ рдПрдХ рд╕рддреНрд░рдмрд╛рдЯ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкрд╛рд░ рдЧрд░реНрдпреЛ (TCP рд╕рддреНрд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдПрдХреЛ рд╕реНрдерд┐рддрд┐рдорд╛ рдЧрдпреЛ), рддрдм рд╕рдмреИ рдлрд╛рдпрд░рд╡рд╛рд▓ рдирд┐рдпрдорд╣рд░реВ рдорд╛рд░реНрдлрдд рдпрд╕ рд╕рддреНрд░рдХреЛ рдкрдЫрд┐рд▓реНрд▓рд╛ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкрд╛рд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди, рдХрд┐рдирднрдиреЗ рдпреА рд╕рдмреИ рдЬрд╛рдБрдЪрд╣рд░реВ рдЕрдЭреИ рдкрдирд┐ рдкреНрдпрд╛рдХреЗрдЯрд▓рд╛рдИ рд░рд╛рдЙрдЯрд┐рдЩрдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реЗрд░ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗрдЫрдиреНред рд░ рд╣рд╛рдореАрд▓реЗ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдорд╛рд░реНрдЧ рдЪрдпрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди - рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдиреИ рдерд╛рд╣рд╛ рдЫ рдХреБрди рдЗрдиреНрдЯрд░рдлреЗрд╕рдорд╛ рд░ рдХреБрди рд╣реЛрд╕реНрдЯрдорд╛ рд╣рд╛рдореАрд▓реЗ рдпрд╕ рд╕рддреНрд░ рднрд┐рддреНрд░ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкрдард╛рдЙрдиреБ рдкрд░реНрдЫред рдмрд╛рдБрдХреА рд╕рдмреИ рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд░ рдкреНрдпрд╛рдХреЗрдЯ рдкреНрд░рд╢реЛрдзрдирдХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЪрд░рдгрдорд╛ рд░реВрдЯрд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╣реЛред NAT рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджрд╛, nf_conntrack рдореЛрдбреНрдпреБрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рд░ рдкреЛрд░реНрдЯрд╣рд░реВрдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдмрд╛рд░реЗ рдердк рдЬрд╛рдирдХрд╛рд░реА рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд╣реЛ, рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, iptables рдорд╛ рд╡рд┐рднрд┐рдиреНрди рдкреБрд▓рд┐рд╕ рд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдирд┐рдпрдорд╣рд░реВрд▓реЗ рдХрд╛рдо рдЧрд░реНрди рд░реЛрдХреНрдЫ, рддрд░ рдЫреБрдЯреНрдЯреИ рд╕реНрдерд╛рдпреА NAT рдХреЛ рдХрд╛рд░реНрдпрдХреЛ рдврд╛рдБрдЪрд╛ рднрд┐рддреНрд░ рд╡рд╛, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕реАрдорд╛рдирд╛, рдпреЛ рддреНрдпрддрд┐ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫреИрди, рдХрд┐рдирднрдиреЗ рд╕реЗрд╡рд╛рд╣рд░реВред рдЙрдкрдХрд░рдгрд╣рд░реВрдорд╛ рд╡рд┐рддрд░рд┐рдд рдЫрдиреНред

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди

рдпреЛ рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╣рд╛рдореАрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдЫ:

  • рддрд╛рдЬрд╛ рдХрд░реНрдиреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рддрдереНрдпрдХреЛ рдмрд╛рд╡рдЬреБрдж рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдлреИ рдХрд░реНрдиреЗрд▓ 4.16 рдорд╛ рджреЗрдЦрд╛ рдкрд░реНтАНрдпреЛ, рдзреЗрд░реИ рд▓рд╛рдореЛ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдзреЗрд░реИ "рдХрдЪреНрдЪрд╛" рдерд┐рдпреЛ рд░ рдирд┐рдпрдорд┐рдд рд░реВрдкрдорд╛ рдХрд░реНрдиреЗрд▓ рдЖрддрдВрдХрдХреЛ рдХрд╛рд░рдг рдерд┐рдпреЛред рд╕рдмреИ рдХреБрд░рд╛ рдбрд┐рд╕реЗрдореНрдмрд░ 2019 рдХреЛ рдЖрд╕рдкрд╛рд╕ рд╕реНрдерд┐рд░ рднрдпреЛ, рдЬрдм LTS рдХрд░реНрдиреЗрд▓ 4.19.90 рд░ 5.4.5 рдЬрд╛рд░реА рдЧрд░рд┐рдпреЛред
  • nftables рдХреЛ рд╣рд╛рд▓реИрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ nftables рдврд╛рдБрдЪрд╛рдорд╛ iptables рдирд┐рдпрдорд╣рд░реВ рдкреБрди: рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реНред рд╕рдВрд╕реНрдХрд░рдг 0.9.0 рдорд╛ рдареАрдХ рдХрд╛рдо рдЧрд░реНрджрдЫ

рдпрджрд┐ рдкрд╣рд┐рд▓реЛ рдмрд┐рдиреНрджреБрд╕рдБрдЧ рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛ рд╕рдмреИ рдХреБрд░рд╛ рд╕реНрдкрд╖реНрдЯ рдЫ рднрдиреЗ, рдореБрдЦреНрдп рдХреБрд░рд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдХреЛ рд╕рдордпрдорд╛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдореЛрдбреНрдпреБрд▓ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрди рдмрд┐рд░реНрд╕рдиреБ рд╣реБрдБрджреИрди (CONFIG_NFT_FLOW_OFFLOAD=m), рддреНрдпрд╕рдкрдЫрд┐ рджреЛрд╕реНрд░реЛ рдмрд┐рдиреНрджреБрд▓рд╛рдИ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЪрд╛рд╣рд┐рдиреНрдЫред nftables рдирд┐рдпрдорд╣рд░реВ iptables рдорд╛ рднрдиреНрджрд╛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдлрд░рдХ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫред рджрд╕реНрддрд╛рд╡реЗрдЬ рд▓рдЧрднрдЧ рд╕рдмреИ рдмрд┐рдиреНрджреБрд╣рд░реВ рдкреНрд░рдХрдЯ рдЧрд░реНрджрдЫ, рддреНрдпрд╣рд╛рдБ рдкрдирд┐ рд╡рд┐рд╢реЗрд╖ рдЫрдиреН рдХрдиреНрднрд░реНрдЯрд░рд╣рд░реВ iptables рджреЗрдЦрд┐ nftables рд╕рдореНрдо рдирд┐рдпрдорд╣рд░реВред рддреНрдпрд╕рдХрд╛рд░рдг, рдо NAT рд░ рдкреНрд░рд╡рд╛рд╣ рдЕрдлрд▓реЛрдб рд╕реЗрдЯрдЕрдкрдХреЛ рдЙрджрд╛рд╣рд░рдг рдорд╛рддреНрд░ рджрд┐рдиреЗрдЫреБред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдХрдерд╛: , - рдпреА рдиреЗрдЯрд╡рд░реНрдХ рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВ рд╣реБрдиреН рдЬрд╕рдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рдЯреНрд░рд╛рдлрд┐рдХ рдкрд╛рд╕ рд╣реБрдиреНрдЫ; рд╡рд╛рд╕реНрддрд╡рдорд╛ рддреНрдпрд╣рд╛рдБ рджреБрдИ рднрдиреНрджрд╛ рдмрдвреА рд╣реБрди рд╕рдХреНрдЫред , - "рд╕реЗрддреЛ" рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдХреЛ рджрд╛рдпрд░рд╛рдХреЛ рд╕реБрд░реБ рд░ рдЕрдиреНрддреНрдп рдареЗрдЧрд╛рдирд╛ред

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 рдЯреНрд░рд╛рдлрд┐рдХ рдлрд╛рд╕реНрдЯрдирд╛рдЯ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдкрд░реНрдиреЗрдЫ рд░ рдзреЗрд░реИ рдЫрд┐рдЯреЛ рдкреНрд░рд╢реЛрдзрди рд╣реБрдиреЗрдЫред

╨а╨╡╨╖╤Г╨╗╤М╤В╨░╤В╤Л

рдпреЛ рдХрддрд┐ "рдзреЗрд░реИ рдЫрд┐рдЯреЛ" рдЫ рднрдиреЗрд░ рд╕реНрдкрд╖реНрдЯ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдо рджреБрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рд▓реЛрдбрдХреЛ рд╕реНрдХреНрд░рд┐рдирд╕рдЯ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрдиреЗрдЫреБ, рд╕рдорд╛рди рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ (Xeon E5-1650v2), рд╕рдорд╛рди рд░реВрдкрдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ, рдЙрд╣реА рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рддрд░ iptables рдорд╛ NAT рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджреИред (NAT4) рд░ nftables рдорд╛ (NAT5)ред

рд▓рд┐рдирдХреНрд╕рдорд╛ рджреНрд░реБрдд рдорд╛рд░реНрдЧ рд░ NAT

рд╕реНрдХреНрд░рд┐рдирд╕рдЯрдорд╛ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рдЧреНрд░рд╛рдл рдЫреИрди, рддрд░ рдпреА рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рд▓реЛрдб рдкреНрд░реЛрдлрд╛рдЗрд▓рдорд╛ рдФрд╕рдд рдкреНрдпрд╛рдХреЗрдЯ рд╕рд╛рдЗрдЬ рд▓рдЧрднрдЧ 800 рдмрд╛рдЗрдЯ рд╣реБрдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдорд╛рдирд╣рд░реВ 1.5Mpps рд╕рдореНрдо рдкреБрдЧреНрдЫрдиреНред рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреЗ рд░реВрдкрдорд╛, nftables рдХреЛ рд╕рд╛рде рд╕рд░реНрднрд░рдорд╛ рдареВрд▓реЛ рдкреНрд░рджрд░реНрд╢рди рд░рд┐рдЬрд░реНрдн рдЫред рд╣рд╛рд▓, рдпреЛ рд╕рд░реНрднрд░рд▓реЗ 30Mpps рдорд╛ 3Gbit/s рд╕рдореНрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрджрдЫ рд░ 40Gbps рдХреЛ рднреМрддрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рд╕реАрдорд╛ рдкреВрд░рд╛ рдЧрд░реНрди рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рд╕рдХреНрд╖рдо рдЫ, рдЬрдмрдХрд┐ рдирд┐:рд╢реБрд▓реНрдХ CPU рд╕реНрд░реЛрддрд╣рд░реВ рдЫрдиреНред

рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдХрд┐ рдпреЛ рд╕рд╛рдордЧреНрд░реА рдиреЗрдЯрд╡рд░реНрдХ рдИрдиреНрдЬрд┐рдирд┐рдпрд░рд╣рд░реБ рд▓рд╛рдИ рдЖрдлреНрдиреЛ рд╕рд░реНрднрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдЙрдкрдпреЛрдЧреА рд╣реБрдиреЗрдЫред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди