Роуты на бесплатные ресурсы

Linux, безопасность, сети и все что с этим связано
@nubis
Заглянувший
Сообщения: 11
Зарегистрирован: 22 янв 2006, 20:35
Контактная информация:

Роуты на бесплатные ресурсы

Сообщение @nubis »

Помогите плиз. Есть самописный биллинг (писал не я, я в линуксе начинающий) необходимо прописать пути на некоторые адреса в обход биллинга. Могу предоставить содержимое нужных файлов конфигурации и скриптов. помогите плиз.

Вот файл rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

#/sbin/route del default
#/sbin/route add -host 213.184.238.20 gw 10.3.0.1 metric 1
#/sbin/route add -host 213.184.238.21 gw 10.3.0.1 metric 1
#/sbin/route add -host 213.184.238.22 gw 10.3.0.1 metric 1

echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
/usr/bin/perl /var/mybilling/firewall.pl &

touch /var/lock/subsys/local
[root@server root]#
строки с gw10.3.0.1 содержат адреса на которые должен быть бесплатный доступ. но если их раз#ить то кроме этих адресов ничто не работает. Помогите плиз разобраться

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

@nubis, гм, судя по всему вы заодно удаляеет и default gateway без которого ессно врядли что-то будет работать...
Опыт растет прямо пропорционально выведенному из строя оборудованию

@nubis
Заглянувший
Сообщения: 11
Зарегистрирован: 22 янв 2006, 20:35
Контактная информация:

Сообщение @nubis »

#/sbin/route del default
/sbin/route add -host 213.184.238.20 gw 10.3.0.1 metric 1
/sbin/route add -host 213.184.238.21 gw 10.3.0.1 metric 1
/sbin/route add -host 213.184.238.22 gw 10.3.0.1 metric 1

В этом варианте работают Только адреса 213.184.238.20 213.184.238.21 213.184.238.22. и то не в обход биллинга а через него.
В начале темы я скинул работоспособный конфиг (за исключением требуемых бесплатных ресурсов)

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

@nubis, чтобы работали остальные адреса - надо их прописать подобно этим трем, чтобы пропускать их мимо биллинга - надо знать как сделан биллинг, полагаю в /var/mybilling/firewall.pl самое интересное и находится, хотелось бы взглянуть на него...
Опыт растет прямо пропорционально выведенному из строя оборудованию

@nubis
Заглянувший
Сообщения: 11
Зарегистрирован: 22 янв 2006, 20:35
Контактная информация:

Сообщение @nubis »

вот содержимое /var/mybilling/firewall.pl
-------------------------------------------------------
#!/usr/bin/perl

use DBI;

require "/var/mybilling/config.pl";

sub addrule {
`$iptables -I FORWARD -d $_[0] -j IN_$billname`;
`$iptables -I FORWARD -s $_[0] -j OUT_$billname`;
`$iptables -I IN_$billname -d $_[0]`;
`$iptables -I OUT_$billname -s $_[0]`;
}

`$iptables -N IN_$billname`;
`$iptables -N OUT_$billname`;
`$iptables -F IN_$billname`;
`$iptables -F OUT_$billname`;
#`$iptables -A INPUT -j IN_$billname`;
#`$iptables -A OUTPUT -j OUT_$billname`;
#`$iptables -A FORWARD -j IN_$billname`;
#`$iptables -A FORWARD -j OUT_$billname`;

my $dbh = DBI->connect("DBI:mysql:$db_name",$db_user,$db_pass);
my $query = "SELECT users_ip FROM users;";
my $sql = $dbh->prepare($query);

$sql->execute();

while(my ($ip) = $sql->fetchrow_array())
{
&addrule($ip);
}
$sql->finish;
$dbh->disconnect;

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

@nubis, теперь /var/mybilling/config.pl ;)
В общем случае, думаю должно прокатить что-то типа:
iptables -I FORWARD 1 -d 213.184.238.20 -j ACCEPT
iptables -I FORWARD 1 -d 213.184.238.21 -j ACCEPT
iptables -I FORWARD 1 -d 213.184.238.22 -j ACCEPT

Если я правильно предполагаю, данные снимаются со счетчиков в цепочках, IN_$billname и OUT_$billname, где $billname - это некая переменная задання предположительная в /var/mybilling/config.pl
Опыт растет прямо пропорционально выведенному из строя оборудованию

@nubis
Заглянувший
Сообщения: 11
Зарегистрирован: 22 янв 2006, 20:35
Контактная информация:

Сообщение @nubis »

/var/mybilling/config.pl
---------------------------------------------
$db_host = "localhost";
$db_name = "mybilling";
$db_user = "root";
$db_pass = "***";

$iptables = "/sbin/iptables";

$billname = "BILLING";
$traff_lim = 1000000000;

1;

@nubis
Заглянувший
Сообщения: 11
Зарегистрирован: 22 янв 2006, 20:35
Контактная информация:

Сообщение @nubis »

Llama: насколько я успел разобраться
/sbin/iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
кидает весь трафик на эту хрень 10.10.10.0/24 а с неё уже разбирается по адресам каким-нить скриптом.

Мне чел который биллинг писал предолжил попробовать заменить
замени там это /sbin/iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
на
/sbin/iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j SNAT --to-source 10.3.7.194
где 10.3.7.194 - шлюз интернета. В итоге на сервере нэт есть. а на клиентских машинах VPN устонавливается но трафик не идёт

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

@nubis, вобщем-то именно это я ипредполагал... Помогло ли добавление указаных мною правил?
Опыт растет прямо пропорционально выведенному из строя оборудованию

@nubis
Заглянувший
Сообщения: 11
Зарегистрирован: 22 янв 2006, 20:35
Контактная информация:

Сообщение @nubis »

тоесть мне прокатить эти строчки?
iptables -I FORWARD 1 -d 213.184.238.20 -j ACCEPT
iptables -I FORWARD 1 -d 213.184.238.21 -j ACCEPT
iptables -I FORWARD 1 -d 213.184.238.22 -j ACCEPT

и раз#ть
/sbin/route del default
/sbin/route add -host 213.184.238.20 gw 10.3.0.1 metric 1
/sbin/route add -host 213.184.238.21 gw 10.3.0.1 metric 1
/sbin/route add -host 213.184.238.22 gw 10.3.0.1 metric 1
Вот так?
Могут ли приведённые тобой строки стать причиной неработы нэта? в случае чего как их покилять из iptables?

@nubis
Заглянувший
Сообщения: 11
Зарегистрирован: 22 янв 2006, 20:35
Контактная информация:

Сообщение @nubis »

Извините, если задаю глупый вопрос но я хочу хотьб немного разобраться....
как эти строки в иптаблсах
iptables -I FORWARD 1 -d 213.184.238.20 -j ACCEPT
iptables -I FORWARD 1 -d 213.184.238.21 -j ACCEPT
iptables -I FORWARD 1 -d 213.184.238.22 -j ACCEPT
могут решить проблему если при раз#нии этих строк в rc.local
/sbin/route del default
/sbin/route add -host 213.184.238.20 gw 10.3.0.1 metric 1
/sbin/route add -host 213.184.238.21 gw 10.3.0.1 metric 1
/sbin/route add -host 213.184.238.22 gw 10.3.0.1 metric 1
не работают абсолютно все другие адтеса интернета?
------------------------------------
так ещё инфы: при подключении VPN мой серв раздаёт ip 10.10.10.*
шлюз провайдера 10.3.0.1 адрес сетевухи которая смотрит в нэт 10.3.7.194
при регистрации новых юзеров я прописываю в иптаблсах 4 строчки
например:
iptables -A FORWARD -s 10.10.10.3 -j OUT_BILLING
iptables -A FORWARD -d 10.10.10.3 -j IN_BILLING
iptables -A OUT_BILLING -s 10.10.10.3
iptables -A IN_BILLING -d 10.10.10.3

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

@nubis, гм, надеюсь в ближайшем будущем вы таки прочитаете: http://gazette.lrn.ru/rus/articles/ipta ... orial.html
Разбираемся:
/sbin/route del default - убирает шлюз по умолчанию из таблицы маршрутизации, естественно интернет работать не будет ;)

/sbin/route add -host 213.184.238.20 gw 10.3.0.1 metric 1
/sbin/route add -host 213.184.238.21 gw 10.3.0.1 metric 1
/sbin/route add -host 213.184.238.22 gw 10.3.0.1 metric 1

Добавляет маршруты к узлам 213.184.238.20-213.184.238.22 через хост 10.3.0.1 - как я понимаю это и есть бесплатные ресурсы... Или я не прав? Т.е. если шлюз по умолчанию 10.3.0.1 - то эти строчки видимо не нужны.
Несколько не ясно с бесплатными ресурсами - это отдельные адреса к которым доступ через default gateway и к которым не надо считать траффик? Или достум к ним чсе же через другой шлюз?
Теперь по поводу всего биллинга:
У вас траффик считается путем снятия статистики с правил в цепочках:
iptables -A FORWARD -s 10.10.10.3 -j OUT_BILLING
Отправляем траффик исходящий (-s) от узла 10.10.10.3 в цепочку OUT_BILLING
iptables -A FORWARD -d 10.10.10.3 -j IN_BILLING
отправляем входящий (-d) на 10.10.10.3 траффик в цепочку IN_BILLING
iptables -A OUT_BILLING -s 10.10.10.3
Добавляем в цепочку OUT_BILLING правило для траффика идущего с хоста 10.10.10.3. Правило ничего не делает с траффиком, просто в данном случае пропускает его дальше к хосту.
iptables -A IN_BILLING -d 10.10.10.3
Аналогично для входящего траффика и цепочки IN_BILLING

В linux при прохождении траффиком определенного правила увеличивается соответсвующий эту правилу счетчик.

Код: Выделить всё

Chain POSTROUTING (policy ACCEPT 4187 packets, 261K bytes)
 pkts bytes target     prot opt in     out     source               destination
   78  4772 MASQUERADE  all  --  *      *       192.168.168.0/24    !192.168.168.0/24
Вот у меня всего одно правило, через которое прошло 4772 байта со времени последнего снятия статистики.
Судя по всему у вас переодически снимается статистика с правил в цепочках OUT_BILLING и IN_BILLING и добавляется в базу или куда-то там еще...

Теперь собственно о том как вам сделать то, что вы хотите:
Закоменнтированные строчки не трогайте, мне лично неясно их предназначение, ИМХО они не нужны.
Для того чтобы траффик идущий на бесплатные ресурсы не попадал в биллинг надо что этот самый траффик не попадал в цепочки OUT_BILLING и IN_BILLING.
Допустим есть бесплатный ресурс с адресом 1.1.1.1
Тогда делаем так:
iptables -I FORWARD 1 -s 1.1.1.1 -j ACCEPT - вставляем в начало цепочки FORWARD правило для траффика идущего с 1.1.1.1 и отправлем его сразу же по назначению, минуя остальные правила прописаные в FORWARD, в частности минуя цепочки OUT_BILLING и IN_BILLING.
iptables -I FORWARD 1 -d 1.1.1.1 -j ACCEPT -аналогично поступаем с траффиком идущем а бесплатный ресурс.

PS: насчет ручного добавления правил - будьте осторожны, правила iptables вообще-то не сохраняются при перезагрузках если иное не предусмотрено производителем дистрибутива, судя по тому коду который вы показали, скрипт берет адреса из таблицы в mysql...
Для того чтобы "покилять строчки" из цепочки используйте что-то типа iptables -D FORWARD 1 - удаляет первое правило в цепочке FORWARD. Просмотреть содержимое цепочки iptables -nL

PS: надеюсь вы таки доберетесь почитать мануал который я упоминал в самом начте этого поста...
Опыт растет прямо пропорционально выведенному из строя оборудованию

@nubis
Заглянувший
Сообщения: 11
Зарегистрирован: 22 янв 2006, 20:35
Контактная информация:

Сообщение @nubis »

за мануал спасибо завтра обязательно почитаю. И вообще спасибо что взялись мне помочь. но вот что по поводу вашего совета мне сказали на канале #Unix.

Anubis, 22.01.2006 23:51 :
iptables -I FORWARD 1 -d 213.184.238.20 -j ACCEPT
iptables -I FORWARD 1 -d 213.184.238.21 -j ACCEPT
iptables -I FORWARD 1 -d 213.184.238.22 -j ACCEPT
что-то вроде этого надо?
ugenka, 22.01.2006 23:51 :
ну смотри
ugenka, 22.01.2006 23:51 :
тут разрешается выход на эти ip
Anubis, 22.01.2006 23:51 :
так
ugenka, 22.01.2006 23:51 :
а дальше стоит правило по умолчанию
ugenka, 22.01.2006 23:52 :
которое запрещает все остальное тем, кто не вышел по vpn
ugenka, 22.01.2006 23:53 :
это фаервол
Anubis, 22.01.2006 23:53 :
так
ugenka, 22.01.2006 23:53 :
ну так блин
ugenka, 22.01.2006 23:54 :
я ж говорю
Anubis, 22.01.2006 23:54 :
эти строки разрешать выход на эти адреса без VPN
ugenka, 22.01.2006 23:54 :
,--8<-
ugenka, 22.01.2006 23:54 :
|23:52 <ugenka> а дальше стоит правило по умолчанию
ugenka, 22.01.2006 23:54 :
|23:52 <ugenka> которое запрещает все остальное тем, кто не вышел по vpm
ugenka, 22.01.2006 23:54 :
|23:52 <ugenka> vpn
Anubis, 22.01.2006 23:54 :
ну
Anubis, 22.01.2006 23:54 :
вроде так и надо
ugenka, 22.01.2006 23:54 :
и?
ugenka, 22.01.2006 23:54 :
да
ugenka, 22.01.2006 23:55 :
так это ты не обойдешь :)
Anubis, 22.01.2006 23:55 :
=))))
ugenka, 22.01.2006 23:55 :
да забей ты блин :)
Anubis, 22.01.2006 23:55 :
тоесть всёравно через билл будет если VPN подключен
Anubis, 22.01.2006 23:55 :
так?
ugenka, 22.01.2006 23:55 :
ну конечно
Anubis, 22.01.2006 23:55 :
а если не подключен?
Anubis, 22.01.2006 23:56 :
то никак не выйдешь

@nubis
Заглянувший
Сообщения: 11
Зарегистрирован: 22 янв 2006, 20:35
Контактная информация:

Сообщение @nubis »

Llama писал(а):
/sbin/route add -host 213.184.238.20 gw 10.3.0.1 metric 1
/sbin/route add -host 213.184.238.21 gw 10.3.0.1 metric 1
/sbin/route add -host 213.184.238.22 gw 10.3.0.1 metric 1
Добавляет маршруты к узлам 213.184.238.20-213.184.238.22 через хост 10.3.0.1 - как я понимаю это и есть бесплатные ресурсы... Или я не прав? Т.е. если шлюз по умолчанию 10.3.0.1 - то эти строчки видимо не нужны.
Несколько не ясно с бесплатными ресурсами - это отдельные адреса к которым доступ через default gateway и к которым не надо считать траффик? Или достум к ним чсе же через другой шлюз?
Дело в том, что на эти адреса юзер должен попасть даже если у него не подключен VPN тоесть он у себя в роутах прописывает эти адреса и сетевуху сервера которая смотрит в локалку как шлюз а сервер должен автоматически перекидывать для этих адресов пакеты с одной сетевухи на другую. (просто как роутер)

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Как я понимаю, и для юзеров подключенных через VPN и для тех, кто идет на бесплатные ресурсы шлюз по умолчанию один и тот же?
Т.е. теоретически - все должно работать и без этих строчек. Допустим юзера которые без VPN имею адреса из диапазона 192.168.0.0/24, внутрений интерфейс - 192.168.0.1. Тогда у юзеров надо прописать либо default gateway 192.168.0.1 либо отдельно маршруты для бесплатных ресурсов опять же со шлюзом 192.168.0.1, у провайдера надо прописать маршрут для доступа к сети 192.168.0.0/24 через 10.3.7.194. Если нет возможности прописать маршруты у провайдера, то используйте SNAT/MASQUERADE
Опыт растет прямо пропорционально выведенному из строя оборудованию

Ответить