แ แแแแแ IPv4 แแแกแแแแ แแแแ แแแแแฌแฃแ แแแ, แแแแ แ แกแแขแแแแแแแฃแแแแแชแแ แแแแ แแขแแ แ แแแแแ แกแแญแแ แแแแแก แฌแแแแจแ, แแแแฌแแแแก แแแแแแขแแแก แฅแกแแแจแ แฌแแแแแ แแแกแแแแ แแแแแก แแแ แแแแแก แแแแแงแแแแแแ. แแ แกแขแแขแแแจแ แแ แแแขแงแแแ, แแฃ แ แแแแ แจแแแแซแแแแ แแแแฆแแ Carrier Grade NAT แจแแกแ แฃแแแแ แกแแกแแฅแแแแ แกแแ แแแ แแแแ.
แแแขแแ แ แแกแขแแ แแแก
IPv4 แแแกแแแแ แแแก แกแแแ แชแแก แแแแฌแฃแ แแแก แแแแ แแฎแแแ แแฆแแ แแ แแก. แ แแฆแแช แแแแแแขแจแ RIPE-แจแ แแแฉแแแ แแแแแแแแแก แกแแแแ, แจแแแแแ แแแฉแแแ แแแ แแแแ, แ แแแแแแแแช แแแแญแ แแแแแ แแแกแแแแ แแแแแก แแแแแแแ แแ แแแคแแ แแแ แแแ แแแแแแแ แแแ แแฏแแ แแแ. แแแแแแแแ แขแแแแแแแแก แแแแ แแขแแ แแแแ แแแแฌแงแแก แแแขแแ แแแขแแแ แฌแแแแแแก แกแแ แแแกแแแแก แแแฌแแแแแ แแแกแแแแ แแแกแ แแ แแแ แขแแก แแแ แแแแแแก แแแแแงแแแแแแ. แแแแแแ แแแ แแแ แแแแฎแแ แฎแ แกแแแแแ แแกแ แแแกแแแแ แแแแแก แแแแแแแแ แแแแแแฃแแ แแแแแแแขแแกแแแแก โแแแแ แโ แแแกแแแแ แแแก แแแกแแชแแแแ, แแแแแ แแ แคแฃแแแก แแแแแแแ แแแแฌแงแ แแแแ แแ แแแแแ แแ แแแกแแแแ แแแแแก แจแแซแแแแแ แฃแแ แแก แแฅแแแ. แฅแกแแแฃแ แ แแฆแญแฃแ แแแแแแแก แแฌแแ แแแแแแแแแ แแฎแแ แ แแแฃแญแแ แแก แแ แแแแแก, แ แแแแแ แแก แคแฃแแฅแชแแ แฉแแแฃแแแแ แแ แแแแแฎแแแก แแแแแขแแแแ แแแคแแ แแแแแแก แแแแฃแแแแก แแ แแแชแแแแแแแก. แแแแแแแแแ, Juniper-แแก MX แแแ แจแ แฃแขแแแแขแแ แแแแก แฎแแแจแ (แฃแแฎแแแกแ MX104 แแ MX204-แแก แแแ แแ), แจแแแแซแแแแ แจแแแกแ แฃแแแ NAPT แชแแแแ MS-MIC แกแแ แแแก แแแ แแแแ, Cisco ASR1k แแแแแฎแแแก CGN แแแชแแแแแแก, Cisco ASR9k แแแแแฎแแแก แชแแแแ A9K-ISM-100 แแแแฃแแก. แแ A9K-CGN แแแชแแแแแ -LIC แแแกแแแแก. แแแแแแแ, แกแแแแแแแแแ แซแแแ แ แฏแแแแ.
IPTables
NAT-แแก แจแแกแ แฃแแแแแก แแแแชแแแ แแ แกแแญแแ แแแแก แกแแแชแแแแแแแแฃแ แแแแแแแแแ แ แแกแฃแ แกแแแก, แแแกแ แแแแแญแ แ แจแแกแแซแแแแแแแ แแแแแแ แแแแแจแแฃแแแแแก แแ แแชแแกแแ แแแแ, แ แแแแแแแช แแแแแแขแแแแแฃแแแ, แแแแแแแแแ, แแแแแกแแแแ แกแแฎแแแก แ แแฃแขแแ แจแ. แขแแแแแแแแก แแแแ แแขแแ แแก แแแกแจแขแแแแ, แแ แแ แแแแแแแก แแแแแแ แแแ แจแแกแแซแแแแแแแ FreeBSD (ipfw/pf) แแ GNU/Linux (iptables) แกแแกแแฅแแแแ แกแแ แแแ แแแแก แแแแแงแแแแแแ. แฉแแแ แแ แแแแแแฎแแแแแ FreeBSD-แก, แ แแแแแ... แแ แจแแแฌแงแแแขแ แแ แแแแ แแชแแฃแแ แกแแกแขแแแแก แแแแแงแแแแแ แกแแแแแแ แแแแ แฎแแแก แฌแแ, แแกแ แ แแ, แฉแแแ แแแแ แฉแแแแ 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 แแแแฃแแก, แ แแแแแแช แแแแแขแแ แแแแก แแแฃแฌแแแก แงแแแแ แแฅแขแแฃแ แแแแจแแ แก แแ แจแแแกแ แฃแแแแก แกแแญแแ แ แแแแแแ แขแแชแแแแก. แแฅ แแ แแก แ แแแแแแแแ แแแฎแแแฌแแแแแ. แแแ แแแ แ แแแจแ, แ แแแแแ แฉแแแ แแกแแฃแแ แแแ 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
แแ แแแ แขแแแ แแแแแแฃแแแชแแแแแก แจแแแแแ แแแแฆแแแ แกแ แฃแแแแ แแแฅแแแแ แแแแแแแ, แ แแแแแกแแช แจแแฃแซแแแ แแแแแแขแแก แแแกแแแแ แแแแแก แแแแ แ แแแแแแแแ แแแ แแแแ แแฃแแจแ แแแแแแฅแชแแแก. แแฃแแชแ, แแ แแแแแฌแงแแแขแแก แจแแกแ แฃแแแแ แกแแกแฃแ แแแแก แขแแแแแก. GNU/Linux-แแก NAT-แแกแแแแก แแแแแงแแแแแแก แฉแแแก แแแ แแแ แแชแแแแแแแแจแ (แแแแฎแแแแแแ 2013 แฌแแแก), แแ แจแแแซแแแ แแฃแจแแแแแก แแแแฎแแแแแแ 7 แแแแขแ/แฌแ แแแแ แกแแ แแแ แแ 0.8 แแแแแแแฅแกแแแ แฌแ (Xeon E5-1650v2). แแแก แจแแแแแ แแ แแแแแ แแแแกแฎแแแแแแฃแแ แแแขแแแแแแชแแ แแแแแแแ GNU/Linux-แแก แแแ แแแแก แฅแกแแแแก แกแขแแแจแ, แแ แแ แกแแ แแแ แแก แแฃแจแแแแ แแแแแ แแแแ แแขแฃแ แแแ แแแแแแ แแ แแแแฅแแแก 18-19 แแแแข/แฌแ-แแแ 1.8-1.9 Mpps (แแก แแงแ แแแฅแกแแแแแฃแ แ แแแแจแแแแแแแแแ) , แแแแ แแ แแ แแ แกแแ แแแ แแก แแแแ แแแแฃแจแแแแแฃแแ แขแ แแคแแแแก แแแชแฃแแแแแแ แแแแฎแแแแ แแแแ แแ แฃแคแ แ แกแฌแ แแคแแ แแแแแแ แแ. แจแแแแแแ, แจแแแฃแจแแแแ แกแฅแแแแแ แกแฎแแแแแกแฎแแ แกแแ แแแ แแแแ แแแขแแแ แแแแก แแแกแแแแแแแกแแแแแ, แแแแ แแ แแ แงแแแแแคแแ แแ แแแแแ แแ แแแฌแแแแแฃแแ แกแแ แแแกแแแแก แแแงแแแแแแก, แจแแแแ แฉแฃแแแแแกแ แแ แฎแแ แแกแฎแแก แจแแแแ แฉแฃแแแแแก แกแแ แแฃแแ.
NF แแแแแแแแ
แแฆแแกแแฆแแแแแ, แแแแฃแ แ แขแแแแแแชแแ แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก "แแแชแแแแก แฉแแแแแแจแ" แแ แแก DPDK แแ XDP แแแแแงแแแแแ. แแ แแแแแแ แแแแ แ แกแขแแขแแ แแแแฌแแ แ, แแแแ แ แกแฎแแแแแกแฎแแ แแแแแกแแแ แแแแแแแแ แแ แฉแแแแแ แแแแแ แชแแฃแแ แแ แแแฃแฅแขแแแ (แแแแแแแแแ, SKAT VasExperts-แแกแแแ). แแแแ แแ แกแแขแแแแแแแฃแแแแแชแแ แแแแ แแขแแ แแแแก แจแแแฆแฃแแฃแแ แแ แแแ แแแแ แแแแก แ แแกแฃแ แกแแแแก แแแแแแแแกแฌแแแแแแ, แกแแแแแแ แแ แแแแแแฃแ แแ แแ แฉแแ แฉแแแแแ แแแคแฃแซแแแแฃแแ แ แแแแ โแแ แแแฃแฅแขแแกโ แจแแฅแแแ แกแแแฃแแแ แแแแแ. แแแแแแแแจแ แแกแแแ แแแแแฌแงแแแขแแก แคแฃแแฅแชแแแแแ แแแ แแแชแแแแแแ แ แแฃแแ แแฅแแแแ, แแแ แซแแ, แแแแแแแกแขแแแฃแ แ แกแแจแฃแแแแแแแแก แจแแแฃแจแแแแแ แแฅแแแแ แกแแญแแ แ. แแแแแแแแแ, แกแขแแแแแ แขแฃแแ tcpdump DPDK-แแ แแ แแแฃแจแแแแแก แแกแ แแ แแแ โแแฎแแแแแกโ แกแแแแแแแจแ แแแแแแแแแ แแแแแขแแแก XDP-แแก แแแแแงแแแแแแ. แงแแแแ แกแแฃแแ แแก แคแแแแ แแฎแแแ แขแแฅแแแแแแแแแแก แจแแกแแฎแแ แแแแแขแแแแก แแแแแแแกแแแแ แแแแแก แแแแฎแแแ แแแแแก แกแแแ แชแแจแ, แแกแแแ แจแแฃแแฉแแแแแแ แแแ แฉแแแ
แแแแแแ แ แแแแ แแกแแ, แ แแ แแฃ แ แแฃแขแแ แแ แแแแแกแชแ แแแแแขแแแ แแ แแ แกแแกแแแแแ แแแแแแแก แแ แแแ แแแแแ แแฃแแแแแ (TCP แกแแกแแ แแแแแแแแ ESTABLISHED แแแแแแแ แแแแแจแ), แแแจแแ แแ แแ แแก แกแแญแแ แ แแ แกแแกแแแก แจแแแแแแแ แแแแแขแแแแก แแแแแขแแแ Firewall-แแก แงแแแแ แฌแแกแแ, แ แแแแแ แงแแแแ แแก แจแแแแฌแแแแ แแแแแช แแแกแ แฃแแแแแ แแแแแขแแก แแแ แจแ แฃแขแแแแชแแแก แจแแแแแแ แแแแแขแแแแ. แแ แฉแแแ แแแแแแแแแ แแ แแแญแแ แแแแ แแแ แจแ แฃแขแแก แแ แฉแแแ - แฉแแแ แฃแแแ แแแชแแ, แ แแแแ แแแขแแ แคแแแกแก แแ แ แแแแ แฐแแกแขแก แฃแแแ แแแแฃแแแแแแแ แแแแแขแแแ แแ แกแแกแแแก แคแแ แแแแแจแ. แ แฉแแแ แแฎแแแแ แแ แแแคแแ แแแชแแแก แจแแแแฎแแ แแ แแแกแ แแแแแงแแแแแ แแแ แจแ แฃแขแแแแชแแแกแแแแก แแแแแขแแแแก แแแแฃแจแแแแแแก แแแ แแฃแ แแขแแแแ. 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
}
}
แแแแแแแก แแแแแแขแแแ แแแแ แแก แชแแขแ แฃแคแ แ แ แแฃแแแ, แแแแ แแ แกแแแแแแ แแแกแแแแแ:
#! /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), แแแแแขแฃแ แแ แแแแคแแแฃแ แแ แแแฃแแ, แแแแแ Linux แแแ แแแแก แแแแแงแแแแแแ, แแแแ แแ แแกแ แฃแแแแก NAT-แก iptables-แจแ. (NAT4) แแ nftable-แแแจแ (NAT5).
แกแแ แแแจแแขแจแ แแ แแ แแก แแแแแขแแแแก แแ แแคแแแ แฌแแแจแ, แแแแ แแ แแ แกแแ แแแ แแแแก แแแขแแแ แแแแก แแ แแคแแแจแ แแแแแขแแก แกแแจแฃแแแ แแแแแ แแแแฎแแแแแแ 800 แแแแขแ, แแกแ แ แแ, แแแแจแแแแแแแแแ แแฆแฌแแแก 1.5 แแแแแแแฅแกแแแแ. แ แแแแ แช แฎแแแแแ, nftables แกแแ แแแ แก แแฅแแก แจแแกแ แฃแแแแแก แฃแแแ แแแแแ แ แ แแแแ แแ. แแแแแแแ, แแก แกแแ แแแ แ แแแฃแจแแแแแก 30 แแแแข/แฌแ-แแแ 3 แแแแแแแข/แฌแ แกแแฉแฅแแ แแ แแ แแจแแแ แแ แจแแฃแซแแแ แแแแแแแงแแคแแแแก แฅแกแแแแก แคแแแแแฃแ แ แจแแแฆแฃแแแ 40 แแแแขแ/แฌแ, แฎแแแ แแฅแแก CPU แแแแแกแฃแคแแแ แ แแกแฃแ แกแแแ.
แแแแแแแแแแ, แ แแ แแก แแแกแแแ แกแแกแแ แแแแแ แแฅแแแแ แฅแกแแแแก แแแแแแ แแแแกแแแแก, แ แแแแแแแช แชแแแแแแแ แแแแฃแแฏแแแแกแแ แแแแแแแแ แกแแ แแแ แแแแก แแฃแจแแแแ.
แฌแงแแ แ: www.habr.com