The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
nat под нагрузкой  не заменяет адреса, !*! Romk, 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

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

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

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

  • nat под нагрузкой  не заменяет адреса, !*! anonymous, 09:51 , 28-Мрт-14 (2)
    >[оверквотинг удален]
    > 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.

  • nat под нагрузкой  не заменяет адреса, !*! reader, 10:20 , 28-Мрт-14 (3)
    > хостер отключил сеть за то что из моего сервера  выходят некоторые
    > пакеты с неправильным адресом  отправителя  (не тем который выдал
    > хостер)
    > ситуация такая:
    > все запросы на 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 это внешний интерфейс.
    А нагрузка тут при том что при ней пакеты закрытия соединения идут когда таймауты уже закончились

    • nat под нагрузкой  не заменяет адреса, !*! Romk, 11:40 , 28-Мрт-14 (4)
      ~ # 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   имеют одну и туже проблему сейчас)




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

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