IPv4 ááááºá
á¬áá»á¬áž áá¯ááºáá¯á¶ážáá¬áááºááŸáá·áºá¡áá»áŸ áááºáá®ááœááºážá¡á±á¬áºááá±áá¬áá»á¬ážá
áœá¬ááẠááááºá
á¬áá¬áá¬ááŒááºááŒááºážááᯠá¡áá¯á¶ážááŒá¯á áááºážááá¯á·ááá±á¬ááºáááºáá»á¬ážá¡á¬áž ááœááºáááºáááºáá±á¬ááºááœáá·áºááᯠáá±ážáá±á¬ááºááẠááá¯á¡ááºááŸá¯ááŸáá·áº áááºááá¯ááºáá±ááááºá á€áá±á¬ááºážáá«ážááœáẠáá¯ááºá
ááºáá¬áá¬áá»á¬ážááœáẠCarrier Grade NAT á
áœááºážáá±á¬ááºáááºááᯠáááºáááºááá¯á·áááá¯ááºáááºááᯠáá»áœááºá¯ááºááŒá±á¬ááŒáá«áááºá
á¡áááºážáááºáá±á¬áááá¯ááºáž
IPv4 ááááºá á¬áá±áá¬áá¯ááºáááºážááŒááºážá áá±á«ááºážá ááºááẠá¡áá áºááá¯ááºáá±á¬á·áá«á áá áºáá»áááºáá»áááºááœááºá á á±á¬áá·áºááá¯ááºážá á¬áááºážáá»á¬ážááẠRIPE ááœááºáá±á«áºáá¬ááŒá®áž áááºááá·áºááááºá á¬áá¯á¶ážáá»á¬ážááᯠáá±á¬ááºážáááºáá±á¬ááºáá¬ážááŒá®áž áááºážááá¯á·ááᯠááŸá¬ážáááºážááẠááá±á¬áá°áá®áá»ááºáá»á¬áž áá±á¬ááºáá»ááºáá»áᬠáááŸááºááŸá¯áá»á¬áž ááœááºáá±á«áºáá¬áááºá áááŒááºážááŒááºážá áááºáá®ááœááºážá¡á±á¬áºááá±áá¬áá»á¬ážááẠááááºá á¬ááŸáá·áº ááááºáááºážáá¬áá¬ááŒááºááŒááºážááᯠá¡áá¯á¶ážááŒá¯á á¡ááºáá¬áááºá¡áá¯á¶ážááŒá¯ááœáá·áºáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá áááºáá±ážááŒáááºá á¡áá»áá¯á·á á á¬áááºážááœááºážáá°ááá¯ááºážá¡ááœáẠâá¡ááŒá°â ááááºá á¬áá¯ááºáá±ážááẠáá¯á¶áá±á¬ááºáá±á¬ááááºá á¬áá»á¬áž ááááŸáááŒáá±á¬áºáááºáž á¡áá»áá¯á·ááŸá¬ áá¯áááá á»á±ážááœááºááœáẠááááºá á¬áá»á¬ážáááºáá°ááẠááŒááºážáááºááŒááºážááŒáá·áº ááœá±á á¯ááŒáááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº á€á¡áá°á¡áááᯠááœááºáááºá ááºáá á¹á ááºážáá¯ááºáá¯ááºáá°áá»á¬ážá០áá±á¬ááºáá¶áá²á·ááŒáááºá á€áá¯ááºáá±á¬ááºáá»ááºááẠá¡áá»á¬ážá¡á¬ážááŒáá·áº á¡ááá¯áááºáá±á¬ááºáž modules ááá¯á·ááá¯áẠááá¯ááºá ááºáá»á¬áž ááá¯á¡ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá Juniper á MX routers ááá¯ááºážááœáẠ(áá±á¬ááºáá¯á¶ážááœáẠMX104 ááŸáá·áº MX204 ááŸááœá²á) áááºááẠáá®ážááŒá¬áž MS-MIC áááºáá±á¬ááºááŸá¯áááºááœáẠNAPT áá¯ááºáá±á¬ááºááá¯ááºáááºá Cisco ASR1k ááẠCGN ááá¯ááºá ááºááá¯á¡ááºáááºá Cisco ASR9k ááẠáá®ážááŒá¬áž A9K-ISM-100 module áá áºáᯠááá¯á¡ááºááẠááŸáá·áº A9K-CGN ááá¯ááºá áẠ-LIC ááᯠáá°á·á¡á¬ážá áá±áá°áá»á¡á¬ážááŒáá·áº áá»á±á¬áºááœáŸááºááŸá¯áᬠááá¯ááºáá¶á¡áá»á¬ážááŒá®ážáá¯ááºáá«áááºá
iptables
NAT áá¯ááºáá±á¬ááºáááºáá¬áááºááẠá¡áá°ážááŒá¯ááœááºáá»á°áá¬á¡áááºážá¡ááŒá áºáá»á¬ážáááá¯á¡ááºáá«á á¥ááá¬á áááºááá·áºá¡áááºáá±á¬ááºáá±á¬ááºáá¬ááœááºáááᯠáááºáááºáá¬ážááá·áº áá±áá¯áá»áááºááœááºáá»ááºáááá¯áááºáá¬áá»á¬ážááŒáá·áº ááŒá±ááŸááºážááá¯ááºáá«áááºá áááºáá®ááœááºážá¡á±á¬áºááá±áá¬áá áá±ážááœááºá FreeBSD (ipfw/pf) ááá¯á·ááá¯áẠGNU/Linux (iptables) á¡áá¯á¶ážááŒá¯ááá·áº áá¯ááºá ááºáá¬áá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á€ááŒá¿áá¬ááᯠááŒá±ááŸááºážááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠFreeBSD ááá¯ááá·áºááœááºážá ááºážá á¬ážáááºááá¯ááºáá±á¬ááŒá±á¬áá·áº ... áá»áœááºáá±á¬áº áá® OS ááᯠáá¯á¶ážáá±áᬠáá±á¬áºáá±á¬áºááŒá¬áá«ááŒá®á áá«ááŒá±á¬áá·áº GNU/Linux ááᯠáááºáá¬ážáááºá
ááááºá ᬠáá¬áá¬ááŒááºááŒááºážááᯠááœáá·áºááẠáá¯á¶ážá ááááºáá²áá«á áŠážá áœá¬ nat table ááŸá 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
áá¯ááºááœáŸáá·áºááŸá¯á¡á¬ážáá¯á¶ážááᯠááááºážáááºážááá·áº hash table á¡ááœáẠáá¯á¶ážá¡áá±á¡ááœááºááᯠááá¯ážááŒáŸáá·áºáááºáááºáž ááá¯á¡ááºááẠ(áááºážááẠnf_conntrack module ááœáẠááœá±ážáá»ááºááŸá¯áá áºáá¯ááŒá áºáááº)á
options nf_conntrack hashsize=1572864
á€ááá¯ážááŸááºážáá±á¬ ááŒááºááŸááºááŸá¯áá»á¬ážááŒá®ážáá±á¬ááºá áá±á¬ááºáááºááááºá á¬á¡áá»á¬ážá¡ááŒá¬ážááᯠááŒááºááá±áááºáá²ááá¯á· áá¬áá¬ááŒááºáá±ážááá¯ááºááá·áº áá¯á¶ážáá¡áá¯ááºáá¯ááºáá±á¬ áá®ááá¯ááºážááᯠáááŸááá²á·áááºá ááá¯á·áá±á¬áº á€ááŒá±ááŸááºážáá»ááºá á áœááºážáá±á¬ááºáááºááẠáá»á¬ážá áœá¬ ááá¯áá¬ážáá±á¬áá·áºááá±áá«áááºá NAT á¡ááœáẠGNU/Linux ááá¯á¡áá¯á¶ážááŒá¯ááẠáá»áœááºá¯ááºáááááá¯á¶ážááŒáá¯ážá á¬ážááŸá¯ááœáẠ(2013 áá¯ááŸá áºáááºážáá»ááº)ááœáẠáá¬áá¬áá áºáá¯áá»áŸáẠ7Mpps (Xeon E0.8-5v1650) ááŒáá·áº 2Gbit/s áááºážáá»ááºá áœááºážáá±á¬ááºáááºááᯠáááá¯ááºáá²á·áááºá ááá¯á¡áá»áááºááŸá áá GNU/Linux kernel network stack ááœáẠááá°áá®áá±á¬ ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá²á·ááŒá®ážá áá°áá®áá±á¬áá¬á·ááºáá²ááŸá áá¬áá¬áá áºáá¯áá áœááºážáá±á¬ááºáááºááẠ18-19 Mpps ááœáẠ1.8-1.9 Gbit/s áá®ážáá«ážá¡áá ááá¯ážáá¬áá«ááẠ(áááºážááá¯á·ááẠá¡ááŒáá·áºáá¯á¶ážáááºááá¯ážáá»á¬ážááŒá áºáááº) áá«áá±ááá·áº áá¬áá¬áá áºáá¯á áá¯ááºáá±á¬ááºáá²á· traffic volume á¡ááœáẠáááºááá¯á¡á¬ážá ááá¯ááŒááºáá¬áá«áááºá ááááºá¡áá±ááŒáá·áºá ááá°áá®áá±á¬áá¬áá¬áá»á¬ážááœáẠáááºááá¯áá»áááºááœááºáá»áŸá¬ááŸáááẠá¡á á®á¡á á¥áºáá»á¬ážááᯠáá®ááœááºáá²á·ááŒáá±á¬áºáááºážá á€á¡áá¬á¡á¬ážáá¯á¶ážááẠáááºáá±á¬ááºááŸá¯áá»á¬ážá á¡áááºá¡ááœá±ážááᯠáááºáááºááŒááºážá ááááºážááááºážááŒááºážááŸáá·áº ááááºážááááºážááŒááºážááá¯ááºáᬠááŸá¯ááºááœá±ážááŸá¯ááᯠááá¯ážááœá¬ážá á±áááºá
NFTables áá»á¬áž
ááá±á·áá±ááºááœááºá áá±á¬á·ááºáá²áẠâááœáŸá±á·ááŒá±á¬ááºážá¡áááºáá»á¬ážâ ááœáẠáá±ááºá
á¬ážáá¬áá±á¬ áá±ááºáá±á
á®ážááŒá±á¬ááºážááŸá¬ DPDK ááŸáá·áº XDP ááá¯á·ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒá
áºáááºá á€á¡ááŒá±á¬ááºážá¡áá¬á¡ááœáẠáá±á¬ááºážáá«ážáá»á¬ážá
áœá¬ááᯠáá±ážáá¬ážáá²á·ááŒá®ážá ááá°áá®áá±á¬ áááá·áºááœááºážáá»á¬ážá
áœá¬ááᯠááŒá¯áá¯ááºáá²á·ááŒá®áž á
á®ážááœá¬ážááŒá
áºáá¯ááºáá¯ááºáá»á¬áž áá±á«áºáá¬ááẠ(á¥ááá¬á VasExperts á០SKAT)á ááá¯á·áá±á¬áº áááºáá®ááœááºážá¡á±á¬áºááá±áá¬áá»á¬ážá á¡ááá·áºá¡áááºááŒáá·áº áááá¯ááááºáá±ážááœá²ááŒááºážááá¯ááºáᬠá¡áááºážá¡ááŒá
áºáá»á¬áž ááŒá±á¬áá·áº á€áá±á¬ááºáá»á¬ážááᯠááá·áºááá¯ááºááá¯ááºá¡áá±á«áºá¡ááŒá±áá¶á áááºááá·áº "áá¯ááºáá¯ááº" ááá¯áááᯠáááºáá®ážáááºááŸá¬ ááŒá¿áá¬áá
áºáááºááŒá
áºáááºá á¡áá¬áááºááœáẠááá¯ááá¯á·áá±á¬á¡ááŒá±ááá¯áá¯ááºáá±á¬ááºáááºááŸá¬ ááá¯ááá¯áááºáá²áááá·áºáááºá á¡áá°ážáááŒáá·áºá áá±á¬áá«ááŸá¬ááœá±áá±ážáááááá¬áá»á¬ážááᯠáá®ááœááºááááºááŒá
áºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá DPDK ááŸáá·áº á
ᶠtcpdump ááẠááá¯áá²á·ááá¯á· á¡áá¯ááºááá¯ááºáá«á ááŸáá·áº XDP ááᯠââá¡áá¯á¶ážááŒá¯á áá«áá¬áá»á¬ážáá®ááá¯á· ááŒááºááá¯á·ááá·áº áááºáá±á·ááºá»áá»á¬ážááᯠ"ááŒááºááááá·áºááẠááá¯ááºáá«á á¡áá¯á¶ážááŒá¯áá°áá±áá¬ááá¯á· packet forwarding áá¯ááºáá±ážááŒááºážá¡ááœáẠáááºážááá¬á¡áá
áºáá»á¬ážá¡ááŒá±á¬ááºáž ááœá±ážááœá±ážááŒá±á¬ááá¯ááŸá¯áá»á¬ážááŒá¬ážááœáẠáááºážááá¯á·ááẠááááááŒá¯áááá²á·ááŒáá±á
á¡ááá á¡áá°á¡áááŸá¬ Router ááẠflow á áŠážáááºáá¬ááŸá áºáá¯áá¯á¶ážááœáẠsession áá áºáá¯á០packet áá»á¬ážááᯠáá»á±á¬áºááœá¬ážáá«á (TCP session ááẠESTABLISHED state ááá¯á·áá±á¬ááºááŸáááœá¬ážáááº) ááá¯áá»áŸáẠfirewall á ááºážáá»ááºážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá»á±á¬áºááŒááºááẠáááá¯á¡ááºáá±á¬ááŒá±á¬áá·áºá á€á á áºáá±ážááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááẠpacket ááᯠrouting ááá¯á· áááºáá¶ááœáŸá²ááŒá±á¬ááºážáá±ážááŒááºážááŒáá·áº á¡áá¯á¶ážáááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááŸááºááááºááœáẠáááºážááŒá±á¬ááºážáá áºáá¯ááᯠááœá±ážáá»ááºáááºáááá¯á¡ááºáá« - áá»áœááºá¯ááºááá¯á·ááẠáááºááá·áº interface ááŸáá·áº áááºááá·áº host ááᯠá€á ááºááŸááºá¡ááœááºáž packet áá»á¬ážáá±ážááá¯á·ááẠááá¯á¡ááºáááºááᯠáá»áœááºá¯ááºááá¯á· áááá¬ážááŒá®ážááŒá áºáááºá áá»ááºáá¬á¡á¬ážáá¯á¶ážá áá®á¡áá»ááºá¡áááºááœá±ááᯠááááºážáááºážááŒá®áž packet processing áá²á· á¡á á±á¬ááá¯ááºážá¡ááá·áºááŸá¬ áááºážááŒá±á¬ááºážááŒá±á¬ááºážááá¯á·á¡ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá NAT ááá¯áá¯ááºáá±á¬ááºáá±á¬á¡áá«á nf_conntrack module ááŸááŒááºááá¯áá¬ážáá±á¬ááááºá á¬áá»á¬ážááŸáá·áº port áá»á¬ážááá¯ááºáá¬ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááŸáá·áºáááºáááºáá±á¬á¡áá»ááºá¡áááºáá»á¬ážááá¯áááºáá¶ááááºážáááºážáááºááá¯á¡ááºáááºá áá¯ááºáá«áááºá á€ááá á¹á ááœááºá iptables ááŸá áá²áááºááœá²á·áááºáá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡áá»ááºá¡áááºááŸáá·áº ááááºážááááºážá ááºážáá»ááºážáá»á¬ážááẠá¡áá¯ááºááá¯ááºáá±á¬á·áá² áá®ážááŒá¬ážáááºáááºáá±áá±á¬ NAT ááá¯á·ááá¯áẠá¥ááá¬á¡á¬ážááŒáá·áº áááºááŒá¬ážáá áºáá¯á áá¯ááºáááºážáá¬áááºááá±á¬ááºá¡ááœááºážááœáẠá€áá»áŸá¡áá±ážááŒá®ážáá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬ážááŒá áºáá±á¬ááŒá±á¬áá·áºá á ááºáá á¹á ááºážáá»á¬ážá¡ááŸá¶á· ááŒáá·áºáá±ááŒáááºá
configuration áá»á¬áž
á€áá¯ááºáá±á¬ááºáá»ááºááá¯á¡áá¯á¶ážááŒá¯ááẠáá»áœááºá¯ááºááá¯á· ááá¯á¡ááºáááº-
- áááºáááºáá±á¬ kernel ááá¯áá¯á¶ážáá«á áá¯ááºáá±á¬ááºáá»ááºááẠkernel 4.16 ááœáẠáá°á·ááá¯ááºáá° áá±á«áºáá¬áá²á·áá±á¬áºáááºážá áááºážááẠá¡áá»áááºá¡áá±á¬áºááŒá¬ "áá¯ááºááŒááºáž" ááŒá áºááŒá®áž áá¯á¶ááŸáẠkernel á¡ááááºáááá·áº ááŒá áºá á±áááºá LTS kernels 2019 ááŸáá·áº 4.19.90 ááᯠáá¯ááºááŒááºááá¯ááºáá±á¬á¡áá« 5.4.5 áá¯ááŸá Ạáá®áááºáá¬ááááºážáá»ááºááœáẠá¡áá¬á¡á¬ážáá¯á¶ážáááºááŒáááºááœá¬ážáááºá
- nftables á áááºááá±á¬áá¬ážááŸááºážááᯠá¡áá¯á¶ážááŒá¯á iptables á ááºážáá»ááºážáá»á¬ážááᯠnftables áá±á¬áºáááºááœáẠááŒááºáááºáá±ážáá¬ážáá«á áá¬ážááŸááºáž 0.9.0 ááœáẠá¡ááá¡áá»á¡áá¯ááºáá¯ááºáááºá
áá°á¡áá¡áá¬á¡á¬ážáá¯á¶ážááẠáááá¡áá»ááºááŒáá·áº ááŸááºážáááºážáá«áá á¡áááá¡áá»ááºááŸá¬ áááºáááºááŸá¯á¡ááœááºáž áááºáááºááŸá¯á¡ááœááºáž module ááᯠááá·áºááœááºážááẠááá±á·áá«ááŸáá·áº (CONFIG_NFT_FLOW_OFFLOAD=m)á ááá¯á·áá±á¬áẠáá¯áááá¡áá»ááºááŸá¬ ááŸááºážáááºážáá»áẠááá¯á¡ááºáá«áááºá nftables á
ááºážáá»ááºážáá»á¬ážááᯠiptables ááŸáá·áº áá¯á¶ážáááœá²ááŒá¬ážá
áœá¬ áá±á¬áºááŒáá¬ážáá«áááºá
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
}
}
flow offload ááŒáá·áºáááºážáááºá¡áááºážáááºááá¯ááŸá¯ááºááœá±ážáááºá ááá¯á·áá±á¬áºáá¬ážáááºááá¯ááºáááº-
#! /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) ááŒáá·áº á á áºááŸááºáá±á¬áá¬áá¬ááŸá áºáá¯ááœáẠload áá ááááºáá¯á¶áá áºáá¯á¶ááᯠáá°ážááœá²áá±á¬áºááŒáááºááŒá áºááŒá®ážá áá°áá®áá±á¬ Linux kernel ááá¯á¡áá¯á¶ážááŒá¯áᬠáá°áá®áá±á¬áá¯á¶á á¶áá°ááŒáá·áº áá¯á¶áá±á¬áºáá¬ážáá±á¬áºáááºáž iptables áá»á¬ážááœáẠNAT áá¯ááºáá±á¬ááºáá±áá«áááºá (NAT4) ááŸáá·áº nftables (NAT5) ááá¯á·ááœááºá
áááºáá¬ážááŒááºáá¬ááºáá¯á¶ááœáẠáá
áºá
áá¹ááá·áºáá»áŸáẠáááºáááºááááºáááŸááá±á¬áºáááºáž á€áá¬áá¬áá»á¬ážá áááºáááá¯ááá¯ááºááœáẠáá»ááºážáá»áŸáááºáááºá¡ááœááºá¡á
á¬ážááẠ800 bytes áááºážáá»ááºááŒá
áºáá±á¬ááŒá±á¬áá·áº áááºááá¯ážáá»á¬ážááẠ1.5Mpps á¡áá áá±á¬ááºááŸááááºá áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºážá nftables áá«áá±á¬áá¬áá¬ááœááºááŒá®ážáá¬ážáá±á¬á
áœááºážáá±á¬ááºáááºá¡áá¶ááŸááááºá áá±á¬áá±á¬áááºááœááºá á€áá¬áá¬ááẠ30Gbit/s á¡áá 3Mpps ááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºááŒá®áž á¡ááá²á· CPU á¡áááºážá¡ááŒá
áºáá»á¬ážáá«ááŸáá
ááºááœáẠáá¯ááºááá¯ááºážááá¯ááºáᬠááœááºáááºááá·áºáááºáá»áẠ40Gbps ááᯠááŒáá·áºáá®ááá¯ááºáááºááŒá
áºáááºá
á€á¡ááŒá±á¬ááºážá¡áá¬ááẠáááºážááá¯á·ááá¬áá¬áá»á¬ážá á
áœááºážáá±á¬ááºáááºááᯠááŒáŸáá·áºáááºááẠááŒáá¯ážá
á¬ážáá±áá±á¬ ááœááºáááºá¡ááºáá»ááºáá®áá¬áá»á¬ážá¡ááœáẠá¡áá¯á¶ážáááºáááá·áºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
source: www.habr.com