The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"nat под нагрузкой  не заменяет адреса"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Маршрутизация, NAT / Linux)
Изначальное сообщение [ Отслеживать ]

"nat под нагрузкой  не заменяет адреса"  +/
Сообщение от Romk email(ok) on 27-Мрт-14, 22:48 
хостер отключил сеть за то что из моего сервера  выходят некоторые пакеты с неправильным адресом  отправителя  (не тем который выдал хостер)

ситуация такая:

все запросы на 80 порт пробрасываются на виртуалку

iptables -t nat -A PREROUTING -p tcp  --dst $EXTERNALIP  --dport 80 -j DNAT --to-destination 192.168.0.10:80

так  же есть правила  разрешающие интернет в сети
iptables -t nat -A POSTROUTING   -o eth0 -j SNAT --to-source $EXTERNALIP


проблема в том что при большом числе соединений адрес отправителя не заменяется на $EXTERNALIP и некоторые пакеты уходят с адресом отправителя 192.168.0.10  что не приемлемо.

#  tcpdump -nnn -vvv -i eth0 src net 192.168.0

192.168.0.10.80 > ___.___.___.___.4035: Flags [R], cksum 0x8866 (correct), seq 1610568574, win 0, length 0
19:09:54.331214 IP (tos 0x0, ttl 63, id 20204, offset 0, flags [DF], proto TCP (6), length 40)
    192.168.0.10.80 > ___.___.___.___.49987: Flags [F.], cksum 0xd8d2 (incorrect -> 0x238f), seq 1858483675, ack 904336                                    574, win 178, length 0

(и еще много подобного вывода)

в чем может быть проблема , что делать? Может что то нужно тюнить для высоких нагрузок

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "nat под нагрузкой  не заменяет адреса"  +/
Сообщение от asavah (ok) on 28-Мрт-14, 01:25 
инвалидов надо дропать. (INVALID)
и RELATED,ESTABLISHED первым делом разрешать.
это так, на правах гадалки...
хотите правильный ответ? задайте правильно вопрос (полный список правил iptables, версия ядра,  дистр ...)
а то хз что вы там наиндусили.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "nat под нагрузкой  не заменяет адреса"  +/
Сообщение от anonymous (??) on 28-Мрт-14, 09:51 
>[оверквотинг удален]
> proto TCP (6), length 40)
>     192.168.0.10.80 > ___.___.___.___.49987: Flags [F.], cksum 0xd8d2 (incorrect
> -> 0x238f), seq 1858483675, ack 904336      
>            
>            
>         574, win 178,
> length 0
> (и еще много подобного вывода)
> в чем может быть проблема , что делать? Может что то нужно
> тюнить для высоких нагрузок

Предполагаю, что нагрузка тут не при чем, просто неправильно составлены правила.
Покажите iptables-save.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "nat под нагрузкой  не заменяет адреса"  +/
Сообщение от reader (ok) on 28-Мрт-14, 10:20 
> хостер отключил сеть за то что из моего сервера  выходят некоторые
> пакеты с неправильным адресом  отправителя  (не тем который выдал
> хостер)
> ситуация такая:
> все запросы на 80 порт пробрасываются на виртуалку

как организована сеть для виртуалки?

> iptables -t nat -A PREROUTING -p tcp  --dst $EXTERNALIP  --dport
> 80 -j DNAT --to-destination 192.168.0.10:80

что будет если 192.168.0.10 попытается обратится на 80 порт на $EXTERNALIP

> так  же есть правила  разрешающие интернет в сети
> iptables -t nat -A POSTROUTING   -o eth0 -j SNAT --to-source
> $EXTERNALIP

если 192.168.0.10 не за eth0, то это правило при пробросе работать не будет, обратное преобразование будет в DNAT автоматом

>[оверквотинг удален]
> proto TCP (6), length 40)
>     192.168.0.10.80 > ___.___.___.___.49987: Flags [F.], cksum 0xd8d2 (incorrect
> -> 0x238f), seq 1858483675, ack 904336      
>            
>            
>         574, win 178,
> length 0
> (и еще много подобного вывода)
> в чем может быть проблема , что делать? Может что то нужно
> тюнить для высоких нагрузок

скорей всего , как уже сказали , дропать INVALID и смотреть что бы 192.168.0.10 подсеть не была мостом на eth0 , если конечно eth0 это внешний интерфейс.
А нагрузка тут при том что при ней пакеты закрытия соединения идут когда таймауты уже закончились

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "nat под нагрузкой  не заменяет адреса"  +/
Сообщение от Romk (ok) on 28-Мрт-14, 11:40 
~ # uname -a
Linux server 2.6.32-26-pve #1 SMP Mon Oct 14 08:22:20 CEST 2013 x86_64 GNU/Linux

> как организована сеть для виртуалки?

два интерфейса в виртуалке один  192.168.0.10 на  vmbr2   через гейт 192.168.0.1
другой  192.168.1.<какойто> на  vmbr1:0     для внутренней сети

вот сеть на хосте
# cat /etc/network/interfaces  

auto lo
iface lo inet loopback

# device: eth0
auto  eth0
iface eth0 inet static
  address   ______________
  broadcast 148.251.0.127
  netmask   255.255.255.224
  gateway   ______________
  # default route to access subnet
  up route add -net ________ netmask 255.255.255.224 gw ___________ eth0

iface eth0 inet6 static
  address ______________::2
  netmask 64
  gateway fe80::1

auto  vmbr1
iface vmbr1 inet static
  address   10.0.0.3
  broadcast 10.0.0.255
  netmask   255.255.255.0

  bridge_ports eth1
  bridge_stp off
  bridge_fd 0

auto  vmbr1:0
iface vmbr1:0 inet static
  address   192.168.1.3
  broadcast 192.168.0.255
  netmask   255.255.255.0

auto  vmbr2
iface vmbr2 inet static
  address   192.168.0.1
  broadcast 192.168.0.255
  netmask   255.255.255.0

  bridge_ports none
  bridge_stp off
  bridge_fd 0

  post-up /root/firewall.sh

<<EOF

# vmbr1 внутреняя сеть   зацеплена на eth1
# vmbr2  сеть  192.168.0.0/24   никуда зацеплена. должна использоваться только для через NAT

вот скрипт который настраивает сеть

cat /root/firewall.sh  :


#!/bin/bash
FAILOVERIP=________
EXTERNALIP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`

sysctl -w net.netfilter.nf_conntrack_max=196608
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -F -t nat

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT


iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A FORWARD -i vmbr1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o vmbr1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i vmbr2 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o vmbr2 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -m addrtype --dst-type MULTICAST -j ACCEPT
iptables -A INPUT -m pkttype --pkt-type multicast -j ACCEPT

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


#pings
iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT


iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -s 192.168.1.1/24 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

#allow internet access for subnet
iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE

#port forwarding
iptables -t nat -A PREROUTING -p tcp  --dst $EXTERNALIP  --dport 80 -j DNAT --to-destination 192.168.0.10:80

iptables -t nat -A PREROUTING -p tcp  --dst $EXTERNALIP  --dport 8889 -j DNAT --to-destination 192.168.0.10:8889


#allow forward to routing failover ip
route add $FAILOVERIP gw 192.168.0.200
iptables -A FORWARD -i eth0 -p tcp -d $FAILOVERIP -j ACCEPT
iptables -A FORWARD -i eth0 -p icmp -d $FAILOVERIP -j ACCEPT

#open ports
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
iptables -A INPUT -p tcp --dport 5900 -j ACCEPT


<<EOF

причем получается так что не заменяются  адреса  не только тех пакетов что через NDAT идут , но и тех которые идут через маскарадинг (но их просто на порядки меньше  поэтому они могут даже не встретиться , но замечены были)  из других виртуалок.  В любом случае на общем фоне пакетов  таких неправильных сотые доли процента.. но это не дело.


> что будет если 192.168.0.10 попытается обратится на 80 порт на $EXTERNALIP

ничего не будет , он по своей воле туда никогда не обратится, если нужно будет допишем правил.

> если 192.168.0.10 не за eth0, то это правило при пробросе работать не
> будет, обратное преобразование будет в DNAT автоматом

все должно стать понятным из конфигов выше


>> ---

сейчас на другом сервере с таким же конфигом   я  убрал правило (DNAT на 80 порт остался рабочим  но  левые пакеты рубятся политикой поумолчанию DROP)
#iptables -A FORWARD -i vmbr2 -o eth0 -j ACCEPT

и разрешил только жизненонеобходимым ходить в сеть  
iptables -A FORWARD -s 192.168.0.200 -i vmbr2 -o eth0 -j ACCEPT  ( маскарадинг на всякий случай заменил на  SNAT --to-source $EXTERNALIP ,  вот здесь tcpdump и показал   очень  редкие  пакеты  с адресом 192.168.0.200   выходящими из eth0,   что говорит о том что и DNAT и SNAT   имеют одну и туже проблему сейчас)

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "nat под нагрузкой  не заменяет адреса"  +/
Сообщение от reader (ok) on 28-Мрт-14, 12:34 
>[оверквотинг удален]
> убрал правило (DNAT на 80 порт остался рабочим  но  
> левые пакеты рубятся политикой поумолчанию DROP)
> #iptables -A FORWARD -i vmbr2 -o eth0 -j ACCEPT
> и разрешил только жизненонеобходимым ходить в сеть
> iptables -A FORWARD -s 192.168.0.200 -i vmbr2 -o eth0 -j ACCEPT  
> ( маскарадинг на всякий случай заменил на  SNAT --to-source $EXTERNALIP
> ,  вот здесь tcpdump и показал   очень  
> редкие  пакеты  с адресом 192.168.0.200   выходящими из
> eth0,   что говорит о том что и DNAT и
> SNAT   имеют одну и туже проблему сейчас)

нет , это разное, но основа одна - INVALID через таблицу nat не проходят

https://www.opennet.ru/openforum/vsluhforumID10/5033.html
https://www.opennet.ru/openforum/vsluhforumID1/95327.html
https://www.opennet.ru/openforum/vsluhforumID1/88674.html

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "nat под нагрузкой  не заменяет адреса"  +/
Сообщение от asavah (ok) on 29-Мрт-14, 01:07 
добавляем "вначале" каждой соответствующей цепочки:
iptables -A INPUT   -m conntrack --ctstate INVALID -j DROP                            
#пошёл INPUT
...
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
#пошёл FORWARD
...                            
iptables -A OUTPUT  -m conntrack --ctstate INVALID -j DROP
#пошёл OUTPUT
...

profit

я ж сразу сказал дропайте инвалидов.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру