The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Данные с RAW сокета не попадают на MASQUERADE"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от geragray email(??) on 15-Апр-08, 13:16 
Я пишу серверное приложение (своего рода VPN сервер для роутера с линуксом на борту), читающее IP пакеты от клиентов и посылающих их с помощью IPv4 RAW сокета.

sockrawip = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

struct sockaddr_in sindest;
sindest.sin_family = AF_INET;
sindest.sin_addr.s_addr = ip_header->daddr;

sendto(sockrawip, ip_header, ntohs(ip_header->tot_len),
       0, (struct sockaddr *) &sindest, sizeof (sindest));

Все работает замечательно для пакетов предназначенных для локальной сети. Но на пакеты посылаемые в интернет я никогда не получаю ответ. Ваиршарк показывает что пакет послан скажем гуглу, но source IP у такого пакета остается прежний (те локальный IP). Судя по всему данные с "сырого" сокета не попадают в цепочку MASQUERADE и следовательно роутер не делает наттинг для них. Прав ли я и как это починить? Заранее спасибо.


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

 Оглавление

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


1. "Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от Romik (??) on 15-Апр-08, 19:17 
Если это приложение запускается на самом роутере, то почему бы не биндить его к внешнему, или вообще ко всем адресам сразу (0.0.0.0 в IPv4)? Тогда никакого маскарада ему не нужно будет.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от angra (ok) on 16-Апр-08, 05:39 
Скорее всего в правиле ната указан протокол tcp, а вы работаете на уровень ниже. Попробуйте убрать критерий протокола -p tcp из правила, ну и специфические для этого протокола условия тоже. Также стоит проверить, что стоит в FORWARD, скорее всего опять таки пускаются только tcp пакеты и только с определенными флагами.


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

3. "Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от geragray email(??) on 17-Апр-08, 15:09 
>Скорее всего в правиле ната указан протокол tcp, а вы работаете на уровень ниже.

Да вроде бы нет, правило для маскарада только одно

iptables -t nat -A POSTROUTING -j MASQUERADE

так что по идее и tcp/udp/icmp траффик должен обрабатываться. Скорее всего проблемма в самом сокете :(

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

4. "Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от chip email(ok) on 17-Апр-08, 17:22 
>>Скорее всего в правиле ната указан протокол tcp, а вы работаете на уровень ниже.
>
>Да вроде бы нет, правило для маскарада только одно
>
>iptables -t nat -A POSTROUTING -j MASQUERADE
>
>так что по идее и tcp/udp/icmp траффик должен обрабатываться. Скорее всего проблемма
>в самом сокете :(

Для чего на машине, которая имеет public ip отправлять пакеты через nat?

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

5. "Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от geragray email(??) on 18-Апр-08, 12:10 
>Для чего на машине, которая имеет public ip отправлять пакеты через nat?

Хмм, а как по вашему роутеры работаю? К коробке с внешним ip подключены несколько компьютеров = локальная сеть. Любой пакет посланный одним из этих комптютеров натится роутером, иначе ответный пакет будет послан на локальный айпи отправителя. Я по большому счету эмулирую этот самый локально подключенный компьютер с помощью raw сокета. Но к сожалению ответ от гугла не приходит, следовательно бокс не делает нат для подобных пакетов.

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

6. "Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от chip email(ok) on 18-Апр-08, 12:56 
>>Для чего на машине, которая имеет public ip отправлять пакеты через nat?
>
>Хмм, а как по вашему роутеры работаю? К коробке с внешним ip
>подключены несколько компьютеров = локальная сеть. Любой пакет посланный одним из
>этих комптютеров натится роутером, иначе ответный пакет будет послан на локальный
>айпи отправителя. Я по большому счету эмулирую этот самый локально подключенный
>компьютер с помощью raw сокета. Но к сожалению ответ от гугла
>не приходит, следовательно бокс не делает нат для подобных пакетов.

Еще раз, если Вы отправляете пакет с машины, которая подключена непосредственно к интернету и пытаетесь запихнуть его в цепочку MASQUERADE - то это глупость.

Если Вы пытаетесь отправить пакет с локальной машины через роутер с MASQ - для других пакетов MASQ работает?

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

7. "Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от geragray email(??) on 18-Апр-08, 15:56 
>Еще раз, если Вы отправляете пакет с машины, которая подключена непосредственно к
>интернету и пытаетесь запихнуть его в цепочку MASQUERADE - то это
>глупость.

Давайте объясню еще раз. Для начала рассмотрим типичню сеть
компьютер - ЛАН - роутер  - интернет - гугл
адрес Х           адрес У              адрес Г

Если с компьютера сделать пинг гуглу, то он пошлет пакет ОтХдоГ который попадет на роутер. Роутер (который имеет паблик айпи - адрес У) же в свою очередь пошлет в интернет пакет с адресами вида ОтУдоГ. Гугл получит этот пакет и ответит на адрес У.

В моем случае, приложение запущенное на роутере получает(как именно и зачем, не суть вопроса) пакет ОтХдоГ и посылает его в сеть с помощю сырого сокета. НО, роутер не заменяет адресХ на адрес У и поэтому в интернет уходит пакет для гугла, но с обратным адресом Х. То есть когда гугл ответит на посланный пинг, ответ удет на адрес типа 192.168.1.10.

>Если Вы пытаетесь отправить пакет с локальной машины через роутер с MASQ
>- для других пакетов MASQ работает?

Да, работает.

Есть идеи?


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

8. "Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от Николай Попов email on 22-Апр-08, 16:50 
В POSRTOUTING попадают только транзитные пакеты. Локально сгенерированый трафик отправляется в nat.OUTPUT

Не уверен что для этой цепочки применим SNAT/MASQUERADE, но это и не нужно. Будучи запущеным на роутере, приложение в состоянии отправлять пакеты с адреса реального интерфейса и без всяких шаманств с iptables.

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

10. "Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от geragray email(??) on 22-Апр-08, 21:00 
> Будучи запущеным на роутере, приложение в состоянии отправлять пакеты с
>адреса реального интерфейса и без всяких шаманств с iptables.

Так я и не говорю что пакеты не отправляются. Очень даже отправляются, только вот исходящий адрес там не совсем верный. Я чуть выше http://www.opennet.ru/openforum/vsluhforumID9/7319.html#7
более подробно описал что происходит.


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

9. "Данные с RAW сокета не попадают на MASQUERADE"  
Сообщение от chip email(ok) on 22-Апр-08, 16:55 
>Есть идеи?

В этом случае NAT должен выполняться средствами приложения. См. natd из FreeBSD например.


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

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

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




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

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