αα
ααααααα’αΆααααααΆα IPv4 ααΆααααααΆααααα ααααα·ααααα·ααααΌαααααΆααααααΆα
αααΎαααααΌαααααααα»αααΉααααααΌαααΆααααα»αααΆααααααα±ααα’αα·αα·αααααααα½αααααΌαααΆαα
αΌαααααΎαααααΆααααααααΎααΆαααααααα’αΆααααααΆαα αα
αααα»αα’αααααααα αααα»αααΉαααααΆααα’αααααΈαααααααα’αααα’αΆα
ααα½αααΆα Carrier Grade NAT performance αα
ααΎ servers αααα·αα
ααααα·α αααααααααα·ααΆααααα
αααααΆαααααααΆαα ααααΏαααα αα’αΆααααααΆα IPv4 αααααΆααΏαααααΈαααα αΎαα αα α ααα»α αα½αα ααα½α αααααΈαααα αΆαααΆαααα α‘αΎααα αααα»α RIPE αααααΆααααααΆαααααΆααααααΌαααΆαααα α‘αΎαααααααα»αααα’αΆααααααΆαααααΌαααΆααα½αααΌα α αΎααα·α αα αααααααααααααΌαααΆααααα ααααΎααααΈαα½ααα½αααα ααααα·α ααααα ααααα·ααααα·ααααΌαααααΆααααααΆαα αΆααααααΎααααααααααΆα αΌαααααΎα’ααΈαααΊαα·ααααααααΎα’αΆααααααΆα αα·αααΆαααααααα αααα α’ααααααααα·αααΆααααααααααααΎααααΈααα½αααΆαα’αΆααααααΆααααααααααΆααααΎααααΈα ααα’αΆααααααΆα "α" αααα’αα·αα·ααααααΆααα αααααααααα’αααααααααααααΆαα αΆααααααΎααααααααααΆαααααααα·ααααα·ααα·αα’αΆααααααΆααα ααΎααΈααααΆααααααΆαααααααα αααα»αα αα»αααα·αα§ααααααααααΆαααΆαααΆαααααααα·αααα ααΈααααα αα»αααΆααααααΆααααααΆααΆαααΆααααΌαα»ααααααα α¬α’αΆααααΆαααααα α§ααΆα ααα αα αααα»ααα½ααααα Juniper ααααααααα MX (ααΎαααααα MX104 αα·α MX204 α α»αααααααααα»α) NAPT α’αΆα ααααΌαααΆαα’αα»αααααα ααΎααΆαααααΆαααα MS-MIC ααΆα ααααα‘αα Cisco ASR1k ααΆαααΆαα’αΆααααΆααααα CGN Cisco ASR9k ααΆαααΆααααΌαα»α A9K-ISM-100 ααΆα ααααα‘ααα αα·αα’αΆααααΆααααα A9K-CGN -LIC αα ααΆααα ααΆααΌαα ααΆααααααΆαααααΌαα αααΆαααααΆααα αααΎαα
α’αΆαααΈααΈααΈ
ααΆααα·α αα ααααΆαα’αα»αααα NAT αα·ααααααΌαα±ααααΆαααααΆααα»αααααΌαααα―αααααα ααΆα’αΆα ααααΌαααΆααααααααΆααααααααααααααααΎαααΆαααΌαα αααααααΌαααΆαααα‘αΎαα§ααΆα ααααα αααα»ααααααααααααααΆαα½αα αα ααΎααΆαααααααΆαααααααα·ααααα·ααααΌαααααΆαααα αααα αΆαααα’αΆα ααααΌαααΆααααααααΆααααααααΎαααΆαααΈααααααα·αααααααα»αααααΎαααΆα FreeBSD (ipfw/pf) α¬ GNU/Linux (iptables) α ααΎαααΉααα·ααα·α αΆαααΆ FreeBSD ααααααα ... αααα»αααΆααααααααΎ OS αααααΌαα αΎα ααΌα ααααααΎαααΉααα ααΆααααΉα GNU/Linuxα
ααΆαααΎαααΆαααααααα’αΆααααααΆααα·ααα·ααΆαααΆαααααααα ααααΌαα’αααααααΌαα α»ααααααα αααΆαααα αααα»α iptables αα αααα»αααΆααΆα nat:
iptables -t nat -A POSTROUTING -s 100.64.0.0/10 -j SNAT --to <pool_start_addr>-<pool_end_addr> --persistent
ααααααααααααα·ααααα·ααΆαααΉααααα»ααααΌαα»α nf_conntrack αααααΉααααα½ααα·αα·αααααΆαααααΆαααααααααΆααα’αα αα·αα’αα»ααααααΆααααααααα αΆαααΆα αα ααΆα subtleties ααΆα αααΎααα ααΈαααα ααΈαα½α αααααΆαααΎααααα»ααα·ααΆαα’αααΈ 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 ααααααααΆαα»αααΆαααααΆαααΆααα’αα (αααααΊααΆαααααΎααα αααα»ααααΌαα»α nf_conntrack):
options nf_conntrack hashsize=1572864
αααααΆααααΈα§ααΆαααααΆααααααΆααααα ααΆααα ααΆαααααααΎαααΆαααΆαααααα»αααααΌαααΆαααα½α αααα’αΆα ααααααα’αΆααααααΆαα’αα·αα·αααα½αα ααα½ααααα αααα»ααααα»αααΆααααα α αααααΆαααΆαααΆαααααααΆαα’αα»αααααααααααααααΆαααααα»αα±ααααα»αααααΆα αααΎαα ααααΆαα αα αααα»αααΆαααα»ααααααΎαααααΌααααααααα»ααααα»αααΆαααααΎααααΆαα GNU/Linux αααααΆαα NAT (αααα ααααααΆα 2013) αααα»αα’αΆα ααα½αααΆαααααΎαααΆααααα αα 7Gbit/s αα 0.8Mpps αααα»ααα½α server (Xeon E5-1650v2)α α αΆααααΆααααΈαααααααα ααΆααααααΎαααααα·αααααΆαααααααααααΆααΆα αααΎαααααΌαααΆαααααΎα‘αΎααα αααα»αααααααααΆαααΊααα GNU/Linux ααααΎαααΆααααααΆαααΈααααα½ααα ααΎαααααααΉαααΌα ααααΆααΆαααΎαα‘αΎααααααααΎααα 18-19 Gbit/s αα 1.8-1.9 Mpps (ααΆαααααααΊααΆαααααα’αα·ααααΆ) ααα»αααααααααΌαααΆααααααΆααααα·ααΆαα ααΆα ααααααααΎαααΆαααααααΆαααΈααααααα½αααΆαααΎαα‘αΎαααΏαααΆααα»αα ααΆαααααα αααααααΆαααααααΌαααΆααααααΎαα‘αΎαααΎααααΈααααΎα±ααααΆααα»αααααΆαααααααα»ααα ααΎαααΆαααΈαααααααααααααΆ ααα»ααααααΆααα’αααααααΆααααααΎαααΆααααα»αααααΆαααααΆαααα‘αΎα ααΆααααααααΆ αα·ααααααΆαα»αααΆαααααααΆαααααααααΆααααααα
NTFables
ααααααααααα αα·ααααΆααΆααααΌαααΆαααααααα
αααα»ααααααα·ααΈ "ααΆααΌαααααΆααααααΌα" ααΊααΆαααααΎααααΆαα DPDK αα·α XDP α α’αααααααΆα
αααΎαααααΌαααΆααααααααΎαααααΆαααααα αα»αααααααΆααααααααααΆααΆα
αααΎαααααΌαααΆαααααΎα‘αΎα α αΎαααα·αααααΆαα·ααααααααααα»αααα
α‘αΎα (α§ααΆα ααα SKAT ααΈ VasExperts)α ααα»αααααααααΆαααααΆαααααααααααα·ααΈααΆααααααααααααααα·ααααα·ααααΌαααααΆαααα ααΆαα·αααΆααΆααααα αΆαααα»αααΆααααααΎα "ααα·ααα" ααΆαα½ααααααα’ααααΎαααααααααααΆαααααααααααα½αα―αα ααΆααΉαααΆααααααααΆααααα»αααααΎαααΆααααααααααΆαααααααααΆαααα’ααΆαα ααΆαα·ααα α§ααααααα·αα·α
ααααααΉαααααΌααααααΎαα α§ααΆα ααα tcpdump αααααααΆαααΆαα½α DPDK ααΉααα·αααααΎαααΆαααΌα
ααααα α αΎαααΆααΉααα·α "ααΎα" αααα
αααααααΆαααααΎαααα‘αααα
αααααααΎααααααααΎ XDP ααα α
ααααααΆαααΆααα·ααΆααααΆααΆααα’ααα’αααΈαα
αα
αααα·ααααΆααααΈαααααΆαααααα
αααααα
ααααααααΆααααααΌααααααα
ααΆααααααααα’αααααααΎααααΆαα αα½ααααα·αααΆαααΆαα
αΆααα’αΆαααααα
αααα·αααααΆααααΊααΆααααα·αααΎαααααααααΆαααααααΆαααααα ααααααααΆαααΈαααααα½ααααα»ααα·ααα ααΆααααΈαααααα αΌα (αααα TCP ααΆαα αΌααα αααα»αααααΆαααΆα ESTABLISHED) ααααα·αα αΆαααΆα αααααααΆαααααα ααααααααΆαααΆαααααααααΆαααααααααααααΆααααα αααΆαααααααΆααααααΎαααΆααα’ααααααα ααααα ααΆααααα½ααα·αα·αααααΆααα’αααααααΉααα αααααα ααααααααα ααααααααΆαααααΌαααΆααααααααααααααααα ααΆααααΆααααααΌαααααα α αΎαααΎααα·αα αΆαααΆα αααααΎαααΎαααααΌααα - ααΎαααΉααα½α α αΎαα’αααΈα ααα»α αααααΆαααα½αααΆ αα·ααααΆαααΈααα½αααΆαααααΎαααααΌαααααΎαααα ααααααααΆααα αααα»ααααααααα α’αααΈααααα ααααααααΊαααααΆαα»αααααααΆαααα α αΎαααααΎααΆαααααΆαααααααααααΌααα ααααΆααααΆαααααΌαααααααΎαααΆααααα ααααααααΆαα αα αααααααΎαααΆα NAT α αΆαααΆα αααααΌααααααΆαα»αααααααΆαααααααα’αααΈααΆαααααΆααααααΌαα’αΆααααααΆα αα·αα ααααααααααααααααααΌαα»α nf_conntrack α ααΆα/α αΆαα αααα»αααααΈααααααΌααΈααααααα αα·αααααααΆα αα·αα αααΆαααααα·αα·αααααααααα αααα»α iptables αααααααΎαααΆα ααα»αααααα αααα»ααααααααααααααΆααα·α αα αααα NAT ααΆα ααααα‘αα α¬α§ααΆα αααααααααα ααΆαα·αααααΆαααα ααΈαααααααααΆαααα ααααΌαααΆαα ααα αΆααα ααΌααΆααα§αααααα
ααΆααααααβαα ααΆαααααααα
ααΎααααΈααααΎαα»αααΆαααα ααΎαααααΌαααΆαα
- ααααΎααΊααααααααα αααααΈααΆααΆααα·ααααααΆαα»αααΆααααα½αααΆαααα αΆααααα½ααα αααα»αααΊααα 4.16 αααααααααΆ "αα " α’ααααααααααΆααΌαααα αΎαα αΎααααααΆαα±ααααΆαααΆαααααααααααααααααααΊαααααΆαααααΆααα α’αααΈααααααααΆαααΆααααααααΆααα αα»ααα·αααααααΌ ααααΆα 2019 αα ααααααααΊααα LTS 4.19.90 αα·α 5.4.5 ααααΌαααΆαα ααααααΆαα
- αααααα αααΆαα iptables α‘αΎααα·αααΆαααααα nftables αααααααΎαααα nftables ααααΈααααα ααααΎαααΆααααΆααα·αααααΆαααα αααα»ααααα 0.9.0
ααααα·αααΎα’αααΈαααΆααα’ααααΆαααααΆαααα
αααΆααααΆααααΆαα½αααΉαα
ααα»α
ααΈαα½α ααΏαααααΆααααΊαα»αααααα
αααα
αΌααααΌαα»ααααα»αααΆαααααααα
ααΆααααααααααα‘α»αααααα½αααααα»αααααΆ (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
}
}
ααΆαα½αααΉαααα αΌα 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) αααααααΌαααΆαααααααα ααΆααααααααααΌα ααααΆ αααααααΎααΊαααααΈαα»α ααΌα ααααΆ ααα»ααααααααΎαααΆα NAT αα αααα»α iptables (NAT4) αα·ααααα»α nftables (NAT5)α
αα·αααΆαααααΆα αααααααα
ααααααααΆααααα»ααα½ααα·ααΆααΈαα
αααα»αααΌαααα’αααααααααααααα»αααααα
αααα»ααααααααααα»ααααααΆαααΈαααααΆαααααααα ααααα
ααααααααΆαααΆαααααααΊαα
αα»ααα·α 800 αα ααΌα
αααααααααααΆαααα 1.5Mpps α ααΌα
αααα’αααα’αΆα
ααΎααααΆαααΈααααααααΆα nftables ααΆααα»αααααα»αααααα·ααααα·ααΆαααααα αα
αα
α»αααααα αααΆαααΈααααααααααΎαααΆααα αΌαααα 30Gbit/s αα
ααααΏα 3Mpps α αΎαα
αααΆααααΆααααΆα’αΆα
αααααααΆαααΆαααααααααααΆαααΆααααααααα 40Gbps αααααααααααΆαααααΆα CPU α₯ααα·αααααα
αααα»ααααααΉαααΆαααααΆαααααααΉαααΆαααααααααααααα·ααααααααααΆαααααααα»αααααΆααΆααααααα’ααααΎαααΆααααααΆαααΈααααααααα½αααα
ααααα: www.habr.com