Перейти к содержимому
Калькуляторы

SNAT странности

NAT сервер на linux.

 

Несколько десятков правил вида:

iptables -t nat -A POSTROUTING -o eth0.300 -s 192.168.200.0/27 -j SNAT --to-source ${white_ip_1}                                            
iptables -t nat -A POSTROUTING -o eth0.300 -s 192.168.200.32/27 -j SNAT --to-source ${white_ip_2}                                           
iptables -t nat -A POSTROUTING -o eth0.300 -s 192.168.200.64/27 -j SNAT --to-source ${white_ip_3}                                           
iptables -t nat -A POSTROUTING -o eth0.300 -s 192.168.200.96/27 -j SNAT --to-source ${white_ip_4}
...

 

Раньше не обращал внимания, но недавно заметил, что не внешнем интерфейсе периодически видны запросы с серыми src_ip из моего диапазона:

 

# tcpdump -nni eth0.300 net 192.168.200.0/24
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0.300, link-type EN10MB (Ethernet), capture size 96 bytes
14:23:22.220704 IP 192.168.200.236.2786 > 81.19.88.81.80: F 1380642332:1380642332(0) ack 1742972196 win 17084
14:23:23.081629 IP 192.168.200.114.59121 > 95.72.36.59.59275: F 2569647600:2569647600(0) ack 3804050925 win 92 <nop,nop,timestamp 23124665 307778>
14:23:28.113995 IP 192.168.200.140.59621 > 114.166.232.79.27694: R 3930089021:3930089021(0) ack 1431587174 win 0
14:23:28.475097 IP 192.168.200.140.59503 > 123.194.59.20.16440: R 915569888:915569888(0) ack 3963260584 win 0

 

Чем это можно объяснить? При этом в целом все работает без проблем. Из тюнинга коннтрака только:

 

net.ipv4.netfilter.ip_conntrack_max = 262144                                                                                                
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300                                                                               
net.ipv4.netfilter.ip_conntrack_generic_timeout = 300 
echo 32768 > /sys/module/ip_conntrack/parameters/hashsize

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чтобы не разлеталось:

/sbin/iptables -A FORWARD -m state --state INVALID -j DROP

 

А вообще - conntrack -S , такое получается при insert_failed != 0 я так понимаю. Возможно поможет увеличение ip_conntrack_max.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

# conntrack -S
conntrack v1.0.0 (conntrack-tools): Can't open /proc interface

 

Cудя по исходникам тулза лезет за статистикой в /proc/net/stat/nf_conntrack, а у меня там более древний вариант: /proc/net/stat/ip_conntrack.

На всякий случаю даю cat:

 

entries  searched found new invalid ignore delete delete_list insert insert_failed drop early_drop icmp_error  expect_new expect_create expect_delete
0000ce59  e5a7221a db2a074a 184d9844 037044a7 0005f7eb 18492a1d 0e75fb18 0e7d8cbf 00000007 00000000 00000000 01a56ae0  00000000 00000000 00000000 
0000ce59  e241644e da330ad9 18310967 036e734c 0005f5e5 1835515d 0e65ce63 0e5e3fca 00000009 00000000 00000000 01a5102b  00000000 00000000 00000000 
0000ce59  e48a68ad da9571aa 184a6793 036fc6ea 0005f1e8 18456580 0e7464a0 0e7c6804 00000006 00000000 00000000 01a5348d  00000000 00000000 00000000 
0000ce59  e14902b5 d9b2371e 182dc0ec 036df6a5 0005f8c4 18321ad7 0e642830 0e5cf017 00000007 00000000 00000000 01a4e617  00000000 00000000 00000000 

 

Инвалидов много ага... но ip_conntrack_max вряд ли виновен:

 

net.ipv4.netfilter.ip_conntrack_count = 54466
net.ipv4.netfilter.ip_conntrack_max = 262144

 

к тому же насколько я помню переполнение коннтрака логируется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже дело в таймерах.. например приходит от клиента FIN на закрытие, а записи в коннтраке уже нет. Пакет помечается как invalid и летит себе минуя nat.

Может кто поделиться грамотными настройками коннтрака? (sysctl -a | grep 'conntrack')

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Аккуратно попробуйте

 

sysctl -w net.netfilter.nf_conntrack_tcp_loose=0

Правда у вас может всё шмякнутся(т.е. прийдется ребутаться), все зависит от конфигурации, так что осторожно применяйте. Ну или почитайте, что оно делает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я так понял это приведет к тому, что оно не будет пытаться восстановить криво оборванные сессии, а вместо этого будет будет тихо дропать пакеты, не подходящие под текущее состояние соединения. А отрицательные последствия будут? )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всякие асимметричные схемы могут себя нехорошо вести. Потому и говорю - осторожно.

У меня такое работает на обычных NAT, но на одном почему-то не взлетело (но там спутник, и соотв. асимметрия).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.