DStalker Posted February 19 Posted February 19 Попробовал свой NAT поднять до провайдера, но не сильно получилось. # uname -an Linux host 6.5.0-21-generic #21~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 9 13:32:52 UTC 2 x86_64 x86_64 x86_64 GNU/Linux # nft -v nftables v1.0.2 (Lester Gooch) сделал простые правила NAT table ip nat { set real_nat_92.119.131.249 { type ipv4_addr flags interval elements = { 10.250.16.100 } } chain prerouting { type nat hook prerouting priority dstnat; policy accept; } chain postrouting { type nat hook postrouting priority srcnat; policy accept; ip saddr @real_nat_92.119.131.249 oif "enp-ext0" snat to 92.119.131.249 } } а если смотреть на исходящий интерфейс - видно что пакеты частично уходят без NAT (например когда винда обновляется, 23.35.104.105 - это из akamai ) Ходил по сайтам - работает NAT, но некоторые IP всё таки без NAT идут. Непонятно. (ответ от 23.35.104.105 приходит т.к. есть вышестоящий NAT от провайдера) И я думаю в IP тут 23.35.104.105 не вопрос, трафик разный немного просачивается то UDP какой нибудь Даже не знаю куда копать # tcpdump -nv -i enp-ext0 host 10.250.16.100 tcpdump: listening on enp-ext0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 16:48:41.339621 IP (tos 0x0, ttl 125, id 2037, offset 0, flags [DF], proto TCP (6), length 41) 10.250.16.100.35231 > 23.35.104.105.443: Flags [.], cksum 0x0b92 (correct), seq 535198780:535198781, ack 1774744595, win 1023, length 1 16:48:41.404967 IP (tos 0x0, ttl 57, id 28070, offset 0, flags [DF], proto TCP (6), length 52) 23.35.104.105.443 > 10.250.16.100.35231: Flags [.], cksum 0x9f11 (correct), ack 1, win 546, options [nop,nop,sack 1 {0:1}], length 0 16:49:26.448268 IP (tos 0x0, ttl 125, id 2038, offset 0, flags [DF], proto TCP (6), length 41) 10.250.16.100.35231 > 23.35.104.105.443: Flags [.], cksum 0x0b92 (correct), seq 0:1, ack 1, win 1023, length 1 16:49:26.513498 IP (tos 0x0, ttl 57, id 28071, offset 0, flags [DF], proto TCP (6), length 52) 23.35.104.105.443 > 10.250.16.100.35231: Flags [.], cksum 0x9f11 (correct), ack 1, win 546, options [nop,nop,sack 1 {0:1}], length 0 16:50:11.647961 IP (tos 0x0, ttl 125, id 2039, offset 0, flags [DF], proto TCP (6), length 41) 10.250.16.100.35231 > 23.35.104.105.443: Flags [.], cksum 0x0b92 (correct), seq 0:1, ack 1, win 1023, length 1 16:50:11.713184 IP (tos 0x0, ttl 57, id 28072, offset 0, flags [DF], proto TCP (6), length 52) 23.35.104.105.443 > 10.250.16.100.35231: Flags [.], cksum 0x9f11 (correct), ack 1, win 546, options [nop,nop,sack 1 {0:1}], length 0 16:50:56.819922 IP (tos 0x0, ttl 125, id 2040, offset 0, flags [DF], proto TCP (6), length 41) 10.250.16.100.35231 > 23.35.104.105.443: Flags [.], cksum 0x0b92 (correct), seq 0:1, ack 1, win 1023, length 1 16:50:56.885172 IP (tos 0x0, ttl 57, id 28073, offset 0, flags [DF], proto TCP (6), length 52) 23.35.104.105.443 > 10.250.16.100.35231: Flags [.], cksum 0x9f11 (correct), ack 1, win 546, options [nop,nop,sack 1 {0:1}], length 0 ^C 8 packets captured 370 packets received by filter 0 packets dropped by kernel # sysctl net.nf_conntrack_max net.nf_conntrack_max = 6291456 # sysctl net.netfilter.nf_conntrack_max net.netfilter.nf_conntrack_max = 6291456 # cat /sys/module/nf_conntrack/parameters/hashsize 1572864 # sysctl -a | grep checksum net.mptcp.checksum_enabled = 0 net.netfilter.nf_conntrack_checksum = 0 # sysctl -a | grep ip_forward net.ipv4.ip_forward = 1 net.ipv4.ip_forward_update_priority = 1 net.ipv4.ip_forward_use_pmtu = 0 Вставить ник Quote
DStalker Posted February 20 Author Posted February 20 Добавил. table inet filter { chain input { type filter hook input priority filter; policy accept; } chain forward { type filter hook forward priority filter; policy accept; ct state { established, related } accept comment "allow tracked connections" ct state invalid drop comment "early drop of invalid connections" } chain output { type filter hook output priority filter; policy accept; } } так-же попробовал ещё IP из другой подсети NAT сделать. NAT работает - но частично. table ip nat { set real_nat_45.87.218.70 { type ipv4_addr flags interval elements = { 10.250.8.214 } } chain prerouting { type nat hook prerouting priority dstnat; policy accept; } chain postrouting { type nat hook postrouting priority srcnat; policy accept; ip saddr @real_nat_45.87.218.70 oif "enp-ext0" snat to 45.87.218.70 } } Почему частично, потому, что вижу пакетики без NAT иногда пролетают на исходящем интерфейсе. # tcpdump -nv -i enp-ext0 host 10.250.8.214 tcpdump: listening on enp-ext0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 07:32:31.310409 IP (tos 0x0, ttl 61, id 44538, offset 0, flags [DF], proto TCP (6), length 75) 10.250.8.214.37358 > 64.233.161.188.5228: Flags [P.], cksum 0x4b5f (correct), seq 2704382194:2704382217, ack 2241921261, win 311, options [nop,nop,TS val 182628020 ecr 2160121876], length 23 07:32:31.395036 IP (tos 0x0, ttl 118, id 40823, offset 0, flags [none], proto TCP (6), length 52) 64.233.161.188.5228 > 10.250.8.214.37358: Flags [.], cksum 0x1962 (correct), ack 23, win 1050, options [nop,nop,TS val 2160181583 ecr 182628020], length 0 07:32:31.822329 IP (tos 0x0, ttl 61, id 44539, offset 0, flags [DF], proto TCP (6), length 100) 10.250.8.214.37358 > 64.233.161.188.5228: Flags [P.], cksum 0x6bd6 (correct), seq 23:71, ack 1, win 311, options [nop,nop,TS val 182628532 ecr 2160181583], length 48 07:32:31.901634 IP (tos 0x0, ttl 118, id 40824, offset 0, flags [none], proto TCP (6), length 52) 64.233.161.188.5228 > 10.250.8.214.37358: Flags [.], cksum 0x1537 (correct), ack 71, win 1050, options [nop,nop,TS val 2160182090 ecr 182628532], length 0 07:32:31.901981 IP (tos 0x0, ttl 118, id 40825, offset 0, flags [none], proto TCP (6), length 79) 64.233.161.188.5228 > 10.250.8.214.37358: Flags [P.], cksum 0x69d0 (correct), seq 1:28, ack 71, win 1050, options [nop,nop,TS val 2160182090 ecr 182628532], length 27 07:32:32.230335 IP (tos 0x0, ttl 61, id 44540, offset 0, flags [DF], proto TCP (6), length 52) 10.250.8.214.37358 > 64.233.161.188.5228: Flags [.], cksum 0x1664 (correct), ack 28, win 311, options [nop,nop,TS val 182628943 ecr 2160182090], length 0 ^C 6 packets captured 334 packets received by filter 0 packets dropped by kernel $ whois 64.233.161.188 | grep OrgName OrgName: Google LLC # conntrack -L -n -s 10.250.8.214 -d 64.233.161.188 tcp 6 183785 ESTABLISHED src=10.250.8.214 dst=64.233.161.188 sport=35020 dport=5228 packets=30 bytes=2935 src=64.233.161.188 dst=45.87.218.70 sport=5228 dport=35020 packets=31 bytes=14804 [ASSURED] mark=0 use=1 tcp 6 261610 ESTABLISHED src=10.250.8.214 dst=64.233.161.188 sport=38988 dport=5228 packets=105 bytes=8009 src=64.233.161.188 dst=45.87.218.70 sport=5228 dport=38988 packets=104 bytes=32591 [ASSURED] mark=0 use=1 tcp 6 194048 ESTABLISHED src=10.250.8.214 dst=64.233.161.188 sport=56744 dport=5228 packets=14 bytes=1885 src=64.233.161.188 dst=45.87.218.70 sport=5228 dport=56744 packets=14 bytes=4218 [ASSURED] mark=0 use=1 tcp 6 97691 ESTABLISHED src=10.250.8.214 dst=64.233.161.188 sport=35516 dport=5228 packets=53 bytes=4289 src=64.233.161.188 dst=77.83.73.203 sport=5228 dport=35516 packets=50 bytes=29094 [ASSURED] mark=0 use=1 Возможно конечно, что сам IP 45.87.218.70 не прописан физически на интерфейсе где нибудь, а аплинку маршрут по bgp отдаётся как /32 /etc/bird/bird.conf protocol static nat { include "nat.txt"; } # grep 45.87.218.70 /etc/bird/nat.txt route 45.87.218.70/32 unreachable; в таблице маршрутизации выглядит вот так: # route -n | grep 45.87.218.70 45.87.218.70 - 255.255.255.255 !H 0 - 0 - Вставить ник Quote
DStalker Posted February 21 Author Posted February 21 chain forward { type filter hook forward priority filter; policy accept; ct state invalid drop comment "early drop of invalid connections" } если state invalid drop дропать - то перестаёт работать EoIP транзитный, делема Вставить ник Quote
DStalker Posted February 23 Author Posted February 23 ИИ рекомендует chain forward { type filter hook forward priority filter; policy accept; ip protocol gre accept ct state { established, related } accept ct state invalid drop } но вот будут ли такие пакеты NAT-ится - вопрос Вставить ник Quote
Savchenko Posted February 23 Posted February 23 https://habr.com/ru/articles/501234/ Вставить ник Quote
DStalker Posted February 23 Author Posted February 23 По этой статье тюнинг и делал ядра. про "fastnat" это только для tcp/udp и опредёлённых in, out интерфейсах и не понятно будет ли это работать на нескольких in интерфейсах и как оно работает другими протоколами кроме tcp udp и будет ли вообще работать. Тут надо проверять, кто-нибудь проверял? по поводу что NAT не работает с invalid и фрагментированными пакетами туту ИИ советует, что-бы всё таки эти пакеты попадали в NAT делать: (кроме all и default ешё и на уже поднятые интерфейсы по имени) net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2 и смотреть net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 + как писал выше drop invalid кроме GRE протокола Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.