Я пишу серверное приложение (своего рода 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 и следовательно роутер не делает наттинг для них. Прав ли я и как это починить? Заранее спасибо.