The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"SNAT iptables на icmp пакеты о ошибках не работает."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"SNAT iptables на icmp пакеты о ошибках не работает."  
Сообщение от Susanin_ email(ok) on 14-Июн-07, 19:13 
Доброго времени суток всем!

Схема такая:
LAN=============eth1-server1-eth0 ========= eth1-server2-eth0 ======[hardware gateway]====INET
server1 - только роутинг
server2 - роутинг и NAT
[hardware gateway] - только роутинг
на всех сетевках обоих серверов висят серые IP
Такая схема из-за того, что внутри LAN в некоторых VLAN сидят абоненты с реальными IP.
Для eth0 server1 на server2 делаеться SNAT в реальный IP.
Сниферим пакеты на eth0 server2.
При пингах с server1 в инет, на снифере видим что SNAT работает.
При запуске трассы с инета во внутреннюю сеть, на один из реальных IP, при получении сервер1 пакетов с ttl=1, он отвечает
соответствующим ICMP пакетом об ошибке. И вот у этого пакета (смотрим также на снифере второго сервера) SNAT не применяется.
Т.е. ICMP пакет по выходу с сервера2 имеет в поле IP источника серый IP, а не натированный в реальный.

Получается что не отрабатывает NAT на 2сервере. Т.е. для каких-то пакетов от сервера1 он работает, а для каких-то нет.

Куда копать ?
Система везде Centos4.5 full

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

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


1. "SNAT iptables на icmp пакеты о ошибках не работает."  
Сообщение от balalaikinn on 14-Июн-07, 20:42 
>Доброго времени суток всем!
>
>Схема такая:
>LAN=============eth1-server1-eth0 ========= eth1-server2-eth0 ======[hardware gateway]====INET
>server1 - только роутинг
>server2 - роутинг и NAT
>[hardware gateway] - только роутинг
>на всех сетевках обоих серверов висят серые IP
>Такая схема из-за того, что внутри LAN в некоторых VLAN сидят абоненты
>с реальными IP.
>Для eth0 server1 на server2 делаеться SNAT в реальный IP.
>Сниферим пакеты на eth0 server2.
>При пингах с server1 в инет, на снифере видим что SNAT работает.
>
>При запуске трассы с инета во внутреннюю сеть, на один из реальных
>IP, при получении сервер1 пакетов с ttl=1, он отвечает
>соответствующим ICMP пакетом об ошибке. И вот у этого пакета (смотрим также
>на снифере второго сервера) SNAT не применяется.
>Т.е. ICMP пакет по выходу с сервера2 имеет в поле IP источника
>серый IP, а не натированный в реальный.
>
>Получается что не отрабатывает NAT на 2сервере. Т.е. для каких-то пакетов от
>сервера1 он работает, а для каких-то нет.
>
>Куда копать ?
>Система везде Centos4.5 full

iptables -L -v -t nat в студию, адреса можно изменить

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "SNAT iptables на icmp пакеты о ошибках не работает."  
Сообщение от Susanin_ email(ok) on 14-Июн-07, 23:49 
>iptables -L -v -t nat в студию, адреса можно изменить

Вывод с сервера2:

Chain PREROUTING (policy ACCEPT 9243K packets, 567M bytes)
pkts bytes target     prot opt in     out     source               destination
  734 45495 DNAT       icmp --  eth0   *       0.0.0.0/0            xx.xx.xxx.53        to:172.xx.1.9 #обратный проброс для сервера1 (на его eth0)
   31  1956 DNAT       icmp --  eth0   *       0.0.0.0/0            xx.xx.xxx.49        to:172.xx.1.5 #обратный nat для сервера2 (на его eth0)
    ***************
    дальше идут клиентские пробросы
    *************

Chain POSTROUTING (policy ACCEPT 376K packets, 26M bytes)
pkts bytes target     prot opt in     out     source               destination
1965  251K SNAT       all  --  *      eth0    172.хх.1.5           0.0.0.0/0           to:хх.хх.ххх.49
29309 2127K SNAT       all  --  *      eth0    172.хх.1.9           0.0.0.0/0           to:хх.хх.ххх.53
  ******************
  дальше идет клиентское натирование.
  *******************


Chain OUTPUT (policy ACCEPT 122K packets, 14M bytes)
pkts bytes target     prot opt in     out     source               destination


Т.е. интерфейсы eth0 сервера1 и eth1 сервера2 это подсеть 172.хх.1.8/29
Т.е. интерфейсы eth0 сервера2 и [hardware gateway] это подсеть 172.хх.1.4/30

Теперь при снифе на eth0 сервера2:
    Запускаем с сервера1 пинги в инет:
    # /usr/sbin/tcpdump -i eth0 -f 'src host хх.хх.ххх.53 or dst host хх.хх.ххх.53'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
23:06:31.516921 IP хх.хх.ххх.53 > 77.234.201.242: icmp 64: echo request seq 0
23:06:31.543021 IP 77.234.201.242 > хх.хх.ххх.53: icmp 64: echo reply seq 0
23:06:32.517843 IP хх.хх.ххх.53 > 77.234.201.242: icmp 64: echo request seq 1
23:06:32.545051 IP 77.234.201.242 > хх.хх.ххх.53: icmp 64: echo reply seq 1
23:06:33.522144 IP хх.хх.ххх.53 > 77.234.201.242: icmp 64: echo request seq 2
23:06:33.548065 IP 77.234.201.242 > хх.хх.ххх.53: icmp 64: echo reply seq 2
23:06:34.523050 IP хх.хх.ххх.53 > 77.234.201.242: icmp 64: echo request seq 3
23:06:34.550374 IP 77.234.201.242 > хх.хх.ххх.53: icmp 64: echo reply seq 3
Т.е. видим, что IP 172.хх.1.9 сервера1 было на сервере2 проNATино в хх.хх.ххх.53

82.137.183.89 - IP, с которого я проверял пинги и трассу в свою локалку с инета.

Пример2 - пинг на сервер1 с инета:
#/usr/sbin/tcpdump -i eth0 -f 'src host хх.хх.ххх.53 or dst host хх.хх.ххх.53'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
23:09:13.603550 IP 82.137.183.89 > хх.хх.ххх.53: icmp 40: echo request seq 4609
23:09:13.605275 IP хх.хх.ххх.53 > 82.137.183.89: icmp 40: echo reply seq 4609
23:09:14.430659 IP 82.137.183.89 > хх.хх.ххх.53: icmp 40: echo request seq 4865
23:09:14.431198 IP хх.хх.ххх.53 > 82.137.183.89: icmp 40: echo reply seq 4865
23:09:15.431548 IP 82.137.183.89 > хх.хх.ххх.53: icmp 40: echo request seq 5121
23:09:15.432220 IP хх.хх.ххх.53 > 82.137.183.89: icmp 40: echo reply seq 5121
23:09:16.415883 IP 82.137.183.89 > хх.хх.ххх.53: icmp 40: echo request seq 5377
23:09:16.417392 IP хх.хх.ххх.53 > 82.137.183.89: icmp 40: echo reply seq 5377

Во всех примерах НАТ работает.

Ну и теперь главное - трасса с инета на реальный ИП (хх.хх.ххх.65) в локалке за сервером1:
# /usr/sbin/tcpdump -i eth0 -f 'src host 82.137.183.89 or dst host 82.137.183.89'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
23:48:46.558837 IP 82.137.183.89 > хх.хх.ххх.65: icmp 72: echo request seq 22529
23:48:46.559450 IP 172.хх.1.9 > 82.137.183.89: icmp 100: time exceeded in-transit
23:48:51.058281 IP 82.137.183.89 > хх.хх.ххх.65: icmp 72: echo request seq 22785
23:48:51.058771 IP 172.хх.1.9 > 82.137.183.89: icmp 100: time exceeded in-transit
23:48:55.543205 IP 82.137.183.89 > хх.хх.ххх.65: icmp 72: echo request seq 23041
23:48:55.544751 IP 172.хх.1.9 > 82.137.183.89: icmp 100: time exceeded in-transit

Т.е. тут уже при ответе сервера1 нат не отрабатывает и идет серый ИП.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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