рд▓рд┐рдирдХреНрд╕ рдкрд░ рдлрд╛рд╕реНрдЯ рд░реВрдЯрд┐рдВрдЧ рдФрд░ NAT

рдЬреИрд╕рд╛ рдХрд┐ IPv4 рдкрддреЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП рд╣реИрдВ, рдХрдИ рджреВрд░рд╕рдВрдЪрд╛рд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдкрддрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рддрдХ рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдкрд╣реБрдВрдЪ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХрдореЛрдбрд┐рдЯреА рд╕рд░реНрд╡рд░ рдкрд░ рдХреИрд░рд┐рдпрд░ рдЧреНрд░реЗрдб NAT рд╕реНрддрд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛


IPv4 рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рд╡рд┐рд╖рдп рдЕрдм рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реВрдЪреА RIPE рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА, рдлрд┐рд░ рдРрд╕реЗ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдереЗ, рдЬрд┐рди рдкрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрддреЗ рдХреЗ рдмреНрд▓реЙрдХ рдХрд╛ рдХрд╛рд░реЛрдмрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреЗ рдХрд┐рд░рд╛рдП рдХреЗ рд▓реЗрдирджреЗрди рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ред рдзреАрд░реЗ-рдзреАрд░реЗ, рджреВрд░рд╕рдВрдЪрд╛рд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдиреЗ рдкрддреЗ рдФрд░ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕реЗрд╕ рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдХрд┐рд╕реА рдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ "рд╢реНрд╡реЗрдд" рдкрддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкрддреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рдХрд┐рд╕реА рдиреЗ рджреНрд╡рд┐рддреАрдпрдХ рдмрд╛рдЬрд╛рд░ рдореЗрдВ рдкрддреЗ рдЦрд░реАрджрдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдХреЗ рдкреИрд╕реЗ рдмрдЪрд╛рдиреЗ рд╢реБрд░реВ рдХрд░ рджрд┐рдПред рдиреЗрдЯрд╡рд░реНрдХ рдЙрдкрдХрд░рдг рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдиреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╕реНрддрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдпрд╛ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MX рд░рд╛рдЙрдЯрд░ рд▓рд╛рдЗрдирдЕрдк (рдирд╡реАрдирддрдо MX104 рдФрд░ MX204 рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдореЗрдВ рдЬреБрдирд┐рдкрд░ рдХреЗ рд╕рд╛рде, NAPT рдХреЛ рдПрдХ рдЕрд▓рдЧ MS-MIC рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд┐рд╕реНрдХреЛ ASR1k рдХреЛ рдПрдХ GN рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ,рд╕рд┐рд╕реНрдХреЛ ASR9k рдкрд░, рдПрдХ рдЕрд▓рдЧ A9K-ISM-100 рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП A9K-CGN-LIC рд▓рд╛рдЗрд╕реЗрдВрд╕ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЦреБрд╢реА рдореЗрдВ рдмрд╣реБрдд рдкреИрд╕рд╛ рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИред

iptables


NAT рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдкреНрд░реЛрд╕реЗрд╕рд░ рдЬреЛ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рд╣реЛрдо рд░рд╛рдЙрдЯрд░ рдореЗрдВ, рдЗрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╡рд╛рд╣рдХ рдкреИрдорд╛рдиреЗ рдкрд░, FreeBSD (ipfw / pf) рдпрд╛ GNU / Linux (iptables) рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдореЛрдбрд┐рдЯреА рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо FreeBSD рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрд╕ рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЬреАрдПрдирдпреВ / рд▓рд┐рдирдХреНрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВред

рдкрддреЗ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдиреЗрдЯ рдЯреЗрдмрд▓ рдореЗрдВ 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

рдЗрди рд╕рд░рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрддреЗ рдХреЛ рдмрд╛рд╣рд░реА рдкреВрд▓ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЦрд░рд╛рдм рд╣реИред рдПрдирдПрдЯреА (2013 рдХреЗ рдЖрд╕рдкрд╛рд╕) рдХреЗ рд▓рд┐рдП рдЬреАрдПрдирдпреВ / рд▓рд┐рдирдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ, рдореИрдВ рдкреНрд░рддрд┐ рд╕рд░реНрд╡рд░ (рдПрдХреНрд╕реЛрди рдИ 5-1650 рд╡реА 2) 0.8Mpps рдкрд░ рд▓рдЧрднрдЧ 7Gbit / s рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЙрд╕ рд╕рдордп рд╕реЗ, GNU / Linux рдХрд░реНрдиреЗрд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреИрдХ рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдХреВрд▓рди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдПрдХ рд╣реА рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдПрдХ рд╕рд░реНрд╡рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд▓рдЧрднрдЧ 1.8-1.9 Mpps рдкрд░ 18-19 Gbit / s рддрдХ рдмрдврд╝ рдЧрдпрд╛ рд╣реИ (рдпреЗ рд╕реАрдорд╛ рдорд╛рди рдереЗ), рд▓реЗрдХрд┐рди рдЯреНрд░реИрдлрд╝рд┐рдХ рд╡реЙрд▓реНрдпреВрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛, рдПрдХ рдПрдХрд▓ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд, рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдмрдврд╝рд╛ред рдирддреАрдЬрддрди, рд╡рд┐рднрд┐рдиреНрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЛрдб рд╕рдВрддреБрд▓рди рдпреЛрдЬрдирд╛рдПрдВ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИрдВ, рд▓реЗрдХрд┐рди рдЗрди рд╕рднреА рдиреЗ рд╕реЗрдЯрдЕрдк рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдмрдврд╝рд╛ рджрд┐рдпрд╛,рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рд╕реЗрд╡рд╛ рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ред

Nftables


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

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

рд╡рд┐рдиреНрдпрд╛рд╕


рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:

  • рдПрдХ рддрд╛рдЬрд╛ рдЧрд┐рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗрд╡рд▓ 4.16 рдХрд░реНрдиреЗрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдпрд╣ рдмрд╣реБрдд "рдХрдЪреНрдЪрд╛" рдерд╛ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХрд░реНрдиреЗрд▓ рдЖрддрдВрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рджрд┐рд╕рдВрдмрд░ 2019 рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕рдм рдХреБрдЫ рд╕реНрдерд┐рд░ рд╣реЛ рдЧрдпрд╛, рдЬрдм рдПрд▓рдЯреАрдПрд╕ рдЧреБрдард▓реА 4.19.90 рдФрд░ 5.4.5 рдЬрд╛рд░реА рдХреА рдЧрдИред
  • Nftables рдХреЗ рдПрдХ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ nftables рдкреНрд░рд╛рд░реВрдк рдореЗрдВ iprables рдирд┐рдпрдо рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред рд╕рдВрд╕реНрдХрд░рдг 0.9.0 рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдпрджрд┐ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рд╕рд╛рде рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреЛ рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рджреМрд░рд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ (CONFIG_NFT_FLOW_OFFLOAD = m), рддреЛ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Nftables рдирд┐рдпрдореЛрдВ рдХреЛ iptables рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рд▓рдЧрднрдЧ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ, iptables рд╕реЗ nftables рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдирд┐рдпрдо рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рднреА рд╣реИрдВ ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ NAT рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдСрдлрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рдХрд┐рдВрд╡рджрдВрддреА: <i_if>, <o_if> рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред <pool_addr_start>, <pool_addr_end> - "рд╕рдлреЗрдж" рдкрддреЛрдВ рдХреА рд╢реНрд░реЗрдгреА рдХрд╛ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдкрддрд╛ред

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;
        }
}

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреВрд░рд╛ рд╕реЗрдЯрдЕрдк рд╣реИред рдЕрдм рд╕рднреА рдЯреАрд╕реАрдкреА / рдпреВрдбреАрдкреА рдЯреНрд░реИрдлрд┐рдХ рдлрд╛рд╕реНрдЯрдиреИрдЯ рдЯреЗрдмрд▓ рдкрд░ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдВрдЧреЗред

рдкрд░рд┐рдгрд╛рдо


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



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

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА рдЬреЛ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред

All Articles