LINUX.ORG.RU
ФорумAdmin

Проблема с трафиком: CISCO-NAT to LINUX-NAT

 , ,


0

1

Здравствуйте!

Предыстория:
Мой парк серверов (эдакий ЦОД) охраняет Linux Firewall:
CPU: model name : Intel(R) Core(TM)2 Duo CPU E7400 @ 2.80GHz
RAM: MemTotal: 3922144 kB
Установлена ОС CENTOS 6.X (с последними обновлениями).
ЦОД обслуживает терминальное оборудование. Для лучшего понимания, в качестве аналога «терминального оборудования» приведу банковские терминалы.
Сеть терминалов насчитывает около 300штук. ЦОД рассчитан на нагрузку во много раз большую (10 000 терминалов).
Трафик от терминалов небольшой - транзакционный (до 2кб на транзакцию). Каждый терминал выходит на связь, в среднем, 1 раз в две минуты.
Транспорт - TCP/IP.
Задача шлюза - NAT трафика во внутреннюю сеть.
Часть конфигурации iptables:

-A PREROUTING -d 212.X.Y.Z/32 -p tcp -m tcp --dport 8087 -j DNAT --to-destination 192.168.2.21:8077[br]
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT[br]
-A FORWARD -d 192.168.2.21/32 -i eth0 -o eth2 -p tcp -m state --state NEW -m tcp --dport 8077 -j ACCEPT

Другой нагрузки на сервер - нет. Все работает, жалоб нет. Точнее не было...

Ситуация:
Появилась компания расставившая наши терминалы у себя в сети магазинов. Терминалов - около 150шт. Все магазины (и терминалы) работают во внутренней сети партнера организованной на базе VPN. Выход на наш сервер осуществляется централизовано с серверной площадки,используя NAT. Вся коммуникационная часть партнера построена на оборудовании CISCO.
Для трафика от партнера мы организовали отдельный порт (TCP).
По любым вопросам к партнеру, получаем ответ - «у нас CISCO, ищите проблему у себя((((».

Проблема:
С терминалов, установленных у партнера, 20-25% запросов оканчивается неудачно - «Connect timed out».
Исследование показало, что часть пакетов трафика определяются, как INVALID:

-A INPUT -p tcp -m state --state INVALID -s IP_сервера_партнера -j LOG --log-prefix "iptables INVALID-in: " --log-ip-options --log-tcp-options
Содержимое /var/log/messages наводняется такими записями:
May 21 17:42:05 gateway kernel: iptables INVALID-in: IN=eth0 OUT= MAC=00:1e:8c:0e:92:4b:00:21:a0:39:99:00:08:00 SRC=IP_сервера_партнера DST=212.X.Y.Z LEN=48 TOS=0x00 PREC=0x00 TTL=121 ID=2659 DF PROTO=TCP SPT=1034 DPT=8077 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020404EC01010402)
При включении «echo 255 >/proc/sys/net/netfilter/nf_conntrack_log_invalid»:
Message from syslogd@gateway at May 20 15:57:19 ...
 kernel:nf_ct_tcp: SEQ is under the lower bound (already ACKed data retransmitted) IN= OUT= SRC=IP_сервера_партнера DST=212.X.Y.Z LEN=48 TOS=0x00 PREC=0x00 TTL=121 ID=59687 DF PROTO=TCP SPT=1090 DPT=8077 SEQ=104560592 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020404B001010402)
Тюнинг нашего linux-сервера смог незначительно улучшить этот показатель, до 15-20%
. Снизить процент отказов помог тюнинг ядра, установкой опции:
# sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1

Прошу помочь советом, где искать источник проблемы?
Если у партнера, то как это ему аргументировать?
(P.S. Готов лично профинансировать решение вопроса, при условии пребывания человека у нас в офисе - г.Киев. Если можете кого-то рекомендовать - буду признателен).

А как канал себя ведёт, проверяли? Может потери есть?

Вообще больше похоже на глюки TCP самих терминалов.

А, хотя если терминалы идентичные и свои и у партнера, то это вряд-ли.

И еще - какой девайс у них делает нат? Роутер или ASA?

blind_oracle ★★★★★
()
Последнее исправление: blind_oracle (всего исправлений: 2)

Добавь в /etc/sysctl.conf

net.netfilter.nf_conntrack_tcp_timeout_established = 86400
net.netfilter.nf_conntrack_max = 1048576
net.nf_conntrack_max = 1048576
Потом выполни
sysctl -p /etc/sysctl.conf

Используется ли xt_recent? Сделай дамп трафика (полного и после разворачивания(декапсулирования) vpn, если в vpn используется шифрование). Скорми дамп wireshark и посмотри

andrew667 ★★★★★
()
Последнее исправление: andrew667 (всего исправлений: 1)
Ответ на: комментарий от andrew667

Сорри, но Ваши рекомендации не в тему.
У меня сессии короткие - время одной транзакции, не более 1-2 секунды. А общее количество соединений, если все терминалы подключатся одновременно (см. выше), будет 500шт. Так, что значений по умолчанию, мне более чем достаточно.

don_karleone
() автор топика
Ответ на: комментарий от don_karleone

Учитывай, что TCP или UDP соединение считается установленным и никуда НЕ ПРОПАДАЕТ НЕСКОЛЬКО МИНУТ. Касательно UDP я не дурак - соединение действительно устанавливается. Для тебя эти значения конечно оверхед, но я бы попробовал. Кстати по поводу циско - это
1) вовсе не значит, что в нем нету багов. Из своего опыта скажу, что они есть в марушртизаторах и коммутаторах за десятки килобаксов.
2) может они не могут его правильно настроить (мне одна организация выедала мозги недели две, а оказалось, что не работало из-за ихней ASA, которую может настроить только один человек, который в отпуске, а в другой организации, которая им должна помогать в настройке тупо развели руками).

Однозначно стоит сделать проверку работоспособности каналов связи на дроп.

andrew667 ★★★★★
()

Если вы разрешаете в FORWARD'е для конкретного терминала - означает ли это, что у вас default policy на форварде DROP. Небольшой хинт (чтобы не разрешать для каждого из 10к терминалов):


iptables -A FORWARD -m conntrace --ctstate DNAT -j ACCEPT

Идея ясна, в общем.

Касательно проблемы:

Нужно дампить траффик, смотреть дамп, прогонять так же iperf'ом и т.д.

anton_jugatsu ★★★★
()
Ответ на: комментарий от anton_jugatsu

Разрешен форвард для всех подключений к заданному порту. Последнее правило в FORWARD'е - REJECT, а счетчик на правиле =0 (ноль попаданий). Необходимости ограничивать подключения - нет.

don_karleone
() автор топика

Наверное, исхитряться, ловить отдельную неудачную сессию и тыкать носом партнера (или тыкаться самому) - вот, мол, от нас очередной ACK ушел, а терминал его не принял и шлет ретрансмиты.

По любым вопросам к партнеру, получаем ответ - «у нас CISCO, ищите проблему у себя((((».

А здесь можно вспомнить слово «саботаж». Или скатиться до уровня «с моей стороны пули вылетели, проблема у вас» самому.

thesis ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.