The OpenNET Project / Index page

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

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

"Iptables SNAT. Не попадают пакеты в цепочку nat POSTROUTING"  +/
Сообщение от gunb1rd (ok) on 05-Ноя-15, 16:25 
Добрый день! Есть такая схемка:

client -> proxy:5060 -> server:5060

Приложение клиента общается с proxy:tcp:5060. Прокси работает прозрачно, используя TPROXY (реализовано через haproxy), т.е. он берёт IP:PORT клиента, и при пересылке пакетов на server, подставляет их как SOURCE. Сервер видит, что отправитель пакетов - client, и отправляет пакеты на client:IP:PORT, НО cо своим адресом в поле SOURCE (server:tcp:5060), следовательно, клиент не сможет обработать эти сообщения, т.к. он ждёт ответа от proxy:tcp:5060. И поэтому я хочу научить сервер подставлять в поле SOURCE ip адрес proxy сервера (proxy:tcp:5060)

Добавляю правило:

# Generated by iptables-save v1.3.5 on Thu Nov  5 14:38:24 2015
*mangle
:PREROUTING ACCEPT [710363:567027885]
:INPUT ACCEPT [704372:566539955]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [753088:91182712]
:POSTROUTING ACCEPT [753309:91198200]
COMMIT
# Completed on Thu Nov  5 14:38:24 2015
# Generated by iptables-save v1.3.5 on Thu Nov  5 14:38:24 2015
*nat
:PREROUTING ACCEPT [24883:1646686]
:POSTROUTING ACCEPT [4320:257154]
:OUTPUT ACCEPT [4146:245907]
-A POSTROUTING -j SNAT --to-source 1.1.1.1
COMMIT
# Completed on Thu Nov  5 14:38:24 2015
# Generated by iptables-save v1.3.5 on Thu Nov  5 14:38:24 2015
*filter
:INPUT ACCEPT [2499922263:423836859984]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2652526754:403919398770]
COMMIT
# Completed on Thu Nov  5 14:38:24 2015

Проверяю, локальные пакеты натятся:

14:37:14.149450 IP 1.1.1.1 > 8.8.8.8: ICMP echo request, id 55064, seq 1, length 64
14:37:15.149680 IP 1.1.1.1 > 8.8.8.8: ICMP echo request, id 55064, seq 2, length 6

Но для приложения, сервер всё равно отвечает со своим адресом:

14:39:35.172003 IP 192.168.55.55.46390 > 192.168.100.246.sip: S 2735509705:2735509705(0) win 29200 <mss 1460,sackOK,timestamp 154932215 0,nop,wscale 7>
14:39:35.172142 IP 192.168.100.246.sip > 192.168.55.55.46390: S 2647903661:2647903661(0) ack 2735509706 win 5792 <mss 1460,sackOK,timestamp 3733232086 154932215,nop,wscale 7>
14:39:35.172689 IP 192.168.55.55.46390 > 192.168.100.246.sip: R 2735509706:2735509706(0) win 0

 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 0a:c3:4a:44:3e:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.216.246/30 brd 192.168.106.247 scope global eth0
    inet 192.168.110.159/32 scope global eth0
    inet6 fe80::8c3:4aff:fe44:3ebb/64 scope link
       valid_lft forever preferred_lft forever


Добавляю логирование для цепочки nat и не вижу чтобы пакеты попадали в POSTROUTING:


mangle PREROUTING: IN=eth0 OUT= SRC=192.168.55.55 DST=192.168.100.246 LEN=60 TOS=0x18 PREC=0xA0 TTL=61 ID=31487 DF PROTO=TCP SPT=48328 DPT=5060 WINDOW=29200 RES=0x00 SYN URGP=0
nat PREROUTING: IN=eth0 OUT= SRC=192.168.55.55 DST=192.168.100.246 LEN=60 TOS=0x18 PREC=0xA0 TTL=61 ID=31487 DF PROTO=TCP SPT=48328 DPT=5060 WINDOW=29200 RES=0x00 SYN URGP=0
mangle OUTPUT: IN= OUT=eth0 SRC=192.168.100.246 DST=192.168.55.55 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=5060 DPT=48328 WINDOW=5792 RES=0x00 ACK SYN URGP=0
mangle POSTROUTING: IN= OUT=eth0 SRC=192.168.100.246 DST=192.168.55.55 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=5060 DPT=48328 WINDOW=5792 RES=0x00 ACK SYN URGP=0
mangle PREROUTING: IN=eth0 OUT= SRC=192.168.55.55 DST=192.168.100.246 LEN=40 TOS=0x18 PREC=0xA0 TTL=63 ID=50715 DF PROTO=TCP SPT=48328 DPT=5060 WINDOW=0 RES=0x00 RST URGP=0


# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
# sysctl net.ipv4.conf.eth0.rp_filter
net.ipv4.conf.eth0.rp_filter = 0


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

Оглавление

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


1. "Iptables SNAT. Не попадают пакеты в цепочку nat POSTROUTING"  +/
Сообщение от Andrey Mitrofanov on 05-Ноя-15, 17:28 
> client -> proxy:5060 -> server:5060
> Приложение клиента общается с proxy:tcp:5060.
> Прокси работает прозрачно, используя TPROXY

Две сроки выше противоречат. Если "$чего-то-там прозрачно", то клиент должен соединяться с server:5060 и имеет полное право ничего не знать об прокси, прозрачности, NAT-ах.

> адресом в поле SOURCE (server:tcp:5060), следовательно, клиент не сможет обработать эти
> сообщения, т.к. он ждёт ответа от proxy:tcp:5060. И поэтому я хочу
> научить сервер подставлять в поле SOURCE ip адрес proxy сервера (proxy:tcp:5060)

Да, Вы делаете что-то не так. Либо "[клиент] ждёт ответа от proxy:tcp:5060", либо "$чего-то-там прозрачно". Никаких смесей и блендов.

> Добавляю правило:

Проблема не а правилах.

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

2. "Iptables SNAT. Не попадают пакеты в цепочку nat POSTROUTING"  +/
Сообщение от gunb1rd (ok) on 06-Ноя-15, 10:25 
>[оверквотинг удален]
> Две сроки выше противоречат. Если "$чего-то-там прозрачно", то клиент должен соединяться
> с server:5060 и имеет полное право ничего не знать об прокси,
> прозрачности, NAT-ах.
>> адресом в поле SOURCE (server:tcp:5060), следовательно, клиент не сможет обработать эти
>> сообщения, т.к. он ждёт ответа от proxy:tcp:5060. И поэтому я хочу
>> научить сервер подставлять в поле SOURCE ip адрес proxy сервера (proxy:tcp:5060)
> Да, Вы делаете что-то не так. Либо "[клиент] ждёт ответа от proxy:tcp:5060",
> либо "$чего-то-там прозрачно". Никаких смесей и блендов.
>> Добавляю правило:
> Проблема не а правилах.

Кароче. Мне нужно отправлять пакеты на один сервер (сервер A), там это дело будет проксироваться (на сервер B с подменой src ip), и получать ответы от другого (сервер C)

Нашел способ использовать для этого stateless nat используя tc и подменяя src ip сервера C на ip сервера А, НО текущая версия ядра на сервере С, похоже, этого не желает делать:


# tc filter add dev eth0 protocol ip parent 1: prio 10 u32 match ip src 92.168.100.246/32 match ip protocol 6 0xff match ip sport 5689 0xffff action nat egress 192.168.100.246/32 192.168.49.56
bad action type nat
Usage: ... gact <ACTION> [RAND] [INDEX]
Where:     ACTION := reclassify | drop | continue | pass
    RAND := random <RANDTYPE> <ACTION> <VAL>
    RANDTYPE := netrand | determ
    VAL : = value not exceeding 10000
    INDEX := index value used

bad action parsing
parse_action: bad value (4:nat)!
Illegal "action"


Как заставить его работать не прибегая к обновлению ядра?

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

3. "Iptables SNAT. Не попадают пакеты в цепочку nat POSTROUTING"  +/
Сообщение от reader (ok) on 07-Ноя-15, 10:59 
snat в output в сторону клиента пробовали?
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

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

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




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

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