Gentoo Archives: gentoo-user-ru

From: "Anton S. Ustyuzhanin" <kit@×××××××××.kz>
To: gentoo-user-ru@l.g.o
Subject: Re: [gentoo-user-ru] 1 комп, 2 соединения с интернетом
Date: Tue, 02 Dec 2008 15:57:24
Message-Id: 49355AD2.1020701@miras.edu.kz
In Reply to: Re: [gentoo-user-ru] 1 комп, 2 соединения с интернетом by spirit
1 spirit пишет:
2 > Ты же добавлял в nat POSTROUTING SNAT правило по марку...
3 > и говорил что все работает...
4 Да, если добавить -t nat -o tap0 -m mark --mark 0x1 -j SNAT --to-source
5 10.1.0.2, то начинает работать.
6
7 > Дело видать в том, что адрес источника определяется до того, как пройдет
8 > mangle OUTPUT.. поэтому адрес источника старый - соответствующий
9 > базовому route. после mangle OUTPUT меняется маршрут пакета, но не его
10 > загововки.. его выплевывает в tap0 со старым source addr...
11 Пожалуй, да.
12
13 Тут еще есть одна засада. Дело в том что мне нужно принудительно
14 отрубать эти соединения при определенных условиях. Это нужно вот для
15 чего. Дело в том, что пользователям позволено менять себе
16 интернет-канал. Каналы отличаются скоростью. На самом деле каналов у
17 меня 4, а пользователей более 3000. Так вот, когда пользователь меняет
18 себе канал интернета, нужно отрубить все его текущие соединения с
19 инетом. Это нужно для того, чтобы предотвратить такую ситуацию:
20 пользователь переключается на дорогой скоростной канал, ставит закачку,
21 переключается на дешевый канал и у него трафик билингуется по низкой
22 цене, а закачка продолжается по дорогому скоростному каналу.
23
24 Я немного переписал cutter под свои нужды, чтобы рубить соединения прям
25 с локального компа. Алгоритм таков:
26 вызывается утилита local_cutter c аргументами src_ip:src_port
27 dst_ip:dst_port.
28 с помощью библиотеки libpcap запускается сбор пакетов с фильтром host
29 src_ip and port src_port
30 с помощью библиотеки libnet отправляется пакет FIN с dst_ip:dst_port на
31 src_ip:src_port, чтобы приложение подумало что это отправил удаленный
32 сервер.
33 приложение отвечает пакетом ACK. я его улавливаю pcap'ом и беру из этого
34 ответа правильный seq номер, чтобы собрать "правильный" RST пакет. и
35 отправляю на src_ip:src_port этот RST.
36 Все, приложение думает что сервер закрыл соединение.
37
38 Но вот это работает только для тех соединений, у которых сразу стоит
39 правильный src_ip. Поэтому я убрал правило из iptables nat POSTROUTING,
40 и начал пробовать добиться нужного эффекта с iproute2.
41
42 Между прочим, если в табличку knet добавить
43 ip ro add 94.100.176.20 via 10.1.0.1 ta knet
44 то у всех пользователей соединение с 94.100.176.20 устанавливается сразу
45 с правильным src_ip (10.1.0.2). И мой local_cutter такое соединение
46 может отрубить. Поэтому я так понимаю что не достаточно ip rule fwmark
47 0x1 ta adsl, чтобы пакеты от user пошли через tap0.

Replies

Subject Author
Re: [gentoo-user-ru] 1 комп, 2 соединения с интернетом Alex Efros <powerman@××××××××××××××××××.com>