Малоизвестные траблы NAT

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Малоизвестные траблы NAT

Сообщение Alex2ndr »

Всем доброго времени суток!
Решил я для себя разобраться с таким вопросом как выход в интернет через 2 канала и соот какая-нить балансировка нагрузки. Теоретической инфы прочитал много (например Linux Advanced Routing & Traffic Control HOWTO) а с практикой пока никак. Поэтому чтобы постучаться о все подводные камни я решил сделать свой тестовый стенд (поднять виртуальную сеть при помощи VMware Server 2.0.1). С этой задачей я справился - получилась вот такая сеть:

Собственно deb_serv_03 и test_xp эмулируют локальную сеть с выходом в инет через 2 канала - на deb_serv_03 висит маскарадинг eth0 и eth1(т е как бы сеть за NAT). Все остальное эмулирует интернет (скорее сеть провайдера :rolleyes: ). Для того чтобы оценить как идет трафик (повторюсь - идея в балансировании нагрузки между двумя каналами) я повесил на интерфейсы серверов deb_serv_01 и deb_serv_02, смотрящие в "Локальную сеть" flow-сенсоры (fprobe). Коллектор я поставил на deb_serv_00 (flow-capture). Затем для своего удобства я поставил там mysql и стал парсить данные в 4 таблицы (соотв входящий и исходящий для deb_serv_01 и deb_serv_02 ). Парсил я через этот скрипт -
по таким правилам -
(если на пальцах то для deb_serv_01 входящим считается трафик имеющий адрес назначения принадлежащий 172.16.5.0/24 или 172.16.3.0/24, исходящим наоборот и тд). Перед тем как пробовать саму балансировку нагрузки я решил проверить как эта сеть работает в нормальном режиме - я просто выключил deb_serv_02 и стал копировать файлы с deb_home(172.16.250.1) на test_xp(172.16.5.2) через sftp (по winscp заходил на deb_home и копировал себе файлики). Вот тут я получил странные вещи о которых даже не подозревал -
1. В трафике присутствуют входящие и исходящие запросы к/от 172.16.5.2. Как такое может быть если этот адрес сидит за NAT(т е "NAT with port overload" по терминологии Cisco) и как я понимаю ситуацию вместо 172.16.5.2 должен стоять 172.16.3.1:<какой-нить порт выше 1024>. Как это получается кто-нить может объяснить?
2. При пересылке по sftp файла размером 147 Мб получаю еще более странную картину по трафику - привожу выборку из базы (sshd у меня на 2222 порту).

Код: Выделить всё

mysql> select srcaddr,dstaddr,srcport,dstport,prot,doctets/1024/1024 from deb_serv_01_dwn;
+--------------+------------+---------+---------+------+-------------------+
| srcaddr      | dstaddr    | srcport | dstport | prot | doctets/1024/1024 |
+--------------+------------+---------+---------+------+-------------------+
| 172.16.250.1 | 172.16.3.1 |    2222 |    1071 |    6 |        0.00011444 |
| 172.16.250.1 | 172.16.3.1 |       3 |       3 |    1 |        0.00055504 |
| 172.16.250.1 | 172.16.5.2 |    2222 |    1071 |    6 |        0.00003815 |
| 172.16.250.1 | 172.16.3.1 |       0 |       0 |    1 |        0.00051498 |
| 172.16.250.1 | 172.16.5.2 |       0 |       0 |    1 |        0.00017166 |
| 172.16.250.1 | 172.16.3.1 |       3 |       3 |    1 |        0.00055504 |
| 172.16.250.1 | 172.16.3.1 |    2222 |    1071 |    6 |      371.14932251 |
| 172.16.250.1 | 172.16.5.2 |    2222 |    1071 |    6 |      100.92908096 |
+--------------+------------+---------+---------+------+-------------------+
8 rows in set (0.00 sec)

mysql> select srcaddr,dstaddr,srcport,dstport,prot,doctets/1024/1024 from deb_serv_01_upl;
+------------+--------------+---------+---------+------+-------------------+
| srcaddr    | dstaddr      | srcport | dstport | prot | doctets/1024/1024 |
+------------+--------------+---------+---------+------+-------------------+
| 172.16.3.1 | 172.16.250.1 |   54516 |      53 |   17 |        0.00019741 |
| 172.16.3.1 | 172.16.250.1 |   60173 |      53 |   17 |        0.00019741 |
| 172.16.3.1 | 172.16.250.1 |    1071 |    2222 |    6 |        0.00022888 |
| 172.16.5.2 | 172.16.250.1 |    1071 |    2222 |    6 |        0.00007629 |
| 172.16.3.1 | 172.16.250.1 |       8 |       0 |    1 |        0.00051498 |
| 172.16.5.2 | 172.16.250.1 |       8 |       0 |    1 |        0.00017166 |
| 172.16.3.1 | 172.16.250.1 |   58362 |      53 |   17 |        0.00019741 |
| 172.16.3.1 | 172.16.250.1 |   59843 |      53 |   17 |        0.00019741 |
| 172.16.3.1 | 172.16.250.1 |    1071 |    2222 |    6 |        3.18178558 |
| 172.16.5.2 | 172.16.250.1 |    1071 |    2222 |    6 |        1.06321716 |
+------------+--------------+---------+---------+------+-------------------+
10 rows in set (0.00 sec)

mysql>

Т е получаем что на 172.16.3.1 улетело 371мб а на 172.16.5.2 - 100мб (и благополучно дропнулось на 172.16.3.1 ибо iptables -P FORWARD DROP). Опять же если размышлять логически то должны были увидеть что 147мб прилетело на 172.16.3.1:<какой-то там порт> (а дальше в соотв с таблицей ната улетело на 172.16.5.2- но это уже видеть не должны). Кто может это прокомментировать? Может я неправильно считаю?

Маршрутизация на серверах такая:
deb-serv-00:

Код: Выделить всё

alex@deb-serv-00:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.4.0      172.16.2.2      255.255.255.0   UG    0      0        0 eth2
172.16.2.0      0.0.0.0         255.255.255.0   U     0      0        0 eth2
172.16.3.0      172.16.1.2      255.255.255.0   UG    0      0        0 eth1
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
172.16.250.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         172.16.250.1    0.0.0.0         UG    0      0        0 eth0

deb-serv-01:

Код: Выделить всё

alex@deb-serv-01:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.3.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         172.16.1.1      0.0.0.0         UG    0      0        0 eth0
alex@deb-serv-01:~$

deb-serv-03:

Код: Выделить всё

alex@deb-serv-03:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.4.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
172.16.5.0      0.0.0.0         255.255.255.0   U     0      0        0 eth2
172.16.2.0      172.16.4.2      255.255.255.0   UG    0      0        0 eth1
172.16.3.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.16.1.0      172.16.3.2      255.255.255.0   UG    0      0        0 eth0
0.0.0.0         172.16.3.2      0.0.0.0         UG    0      0        0 eth0
alex@deb-serv-03:~$

Кроме этого на deb-serv-03 настроен iptables:

Код: Выделить всё

iptables -P FORWARD DROP
iptables -A FORWARD -s 172.16.5.0/24 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Конфигурацию для deb-serv-02 не привожу т к он выключен.

Всем спасибо.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Малоизвестные траблы NAT

Сообщение Alex2ndr »

Продолжаю изучать ситуацию.
С описанными мной проблемами разобрался. Оказалось что при запуске fprobe (netflow-сенсор) сетевой интерфейс переводился в promiscuous mode. Из-за этого получались такие вот траблы. Запустил fprobe с ключом -p и все сразу стало считаться и работать как должно. Обнаружил случайно, причем на реальных сетевухах таких траблов не было - вероятно реализация от vmware имеет какой-то глюк связанный с этим, или криво написан модуль ядра для работы с ними. На всякий случай - кто-нить знает как смотреть переведён ли интерфейс в promiscuous mode?

Прошу модераторов не закрывать эту тему - я собственно только подобрался к цели с которой создавал свой стенд - поэтому мои основные вопросы впереди ;)
Спасибо сказали:
Аватара пользователя
arkhnchul
Сообщения: 2284
Статус: Толчковый инженер
ОС: Debian, Fedora

Re: Малоизвестные траблы NAT

Сообщение arkhnchul »

кто-нить знает как смотреть переведён ли интерфейс в promiscuous mode

ifconfgi это показывает
Losing is fun!
Спасибо сказали: