Интерактивный литературный клуб "Начало"


Vox audita perit, littera scripta manet - Рукописи не горят.

Распределение интернет трафика на двух провайдеров

Раздел для Дождя. Много всего интересного.

Распределение интернет трафика на двух провайдеров

Сообщение TheRain » 16 авг 2011, 11:36

Пишу для себя, чтобы понять и ничего не упустить.
только для UBUNTU  - с виндой кыш отсюда!
вопросы приветствуются - мне самому еще надо разобраться, потому пока буду отвечать и сам пойму.

Материалы для ознакомления в сети:
http://ru.wikipedia.org/wiki/Iptables
http://interface31.ru/tech_it/2009/11/l ... squid.html
http://www.linuxhorizon.ro/iproute2.html
http://help.ubuntu.ru/wiki/ip_balancing
http://forum.ubuntu.ru/index.php?topic=60258.0

скрипты взяты отсюда и допилены мной для нашей школьной реальности


1. Объявляю таблицы маршрутизации
файл /etc/iproute2/rt_tables

# reserved values
#
255    local
254    main
253    default
0      unspec
#
# local
#
#1      inr.ruhep
10 ED
11 STAR
# 1 - таблица для Департамента образования
# 2- таблица для Старлинк


2. Создаю файл /etc/nat
делаю файл исполняемым
пихаю в него следующее:
#!/bin/bash

echo "Preparing routing tables - 2 ISP"

# Описываем переменные, используемые в скрипте

IP_LOCAL1="192.168.0.1" # адрес нашего маршрутизатора в локальной сети.
IP_INET1="192.168.2.2" # адрес нашего маршрутизатора в сети ED.
IP_INET2="192.168.1.2" # адрес нашего марщрутизатора в сети STAR.

IF_LOCAL1="eth0" # имя интерфейса на локальную сеть
IF_INET1="eth1" # имя интерфейса на ED.
IF_INET2="eth2" # имя интерфейса на STAR.

NET_LOCAL1="192.168.0.0/24" # локальная сеть.
NET_INET1="192.168.2.0/24" # адрес сети в которой гейт ED
NET_INET2="192.168.1.0/24" # адрес сети в которой гейт STAR (а точнее Dlink-роутер).

GW_INET1="192.168.2.1" # гейт ED.
GW_INET2="192.168.1.1" # гейт STAR.


for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
  echo "0" > ${interface}
done

# Настраиваем таблицы маршрутизации

ip route flush table ED        #обнуляем первую таблицу маршрутов
ip route flush table STAR        #обнуляем вторую таблицу маршрутов

ip rule delete table ED      #удаляем наши таблицы, если они присутсвуют в текущей конфигурации (вдруг мы просто перезапускаем скрипт?)
ip rule delete table STAR      #аналогично для второй.

ip rule delete table ED      #и делаем это два раза, так как у нас два правила на каждую таблицу.
ip rule delete table STAR      #аналогично для второй.

ip route add $NET_LOCAL1 dev $IF_LOCAL1 src $IP_LOCAL1 table ED
ip route add $NET_INET1  dev $IF_INET1  src $IP_INET1  table ED 
ip route add $NET_INET2  dev $IF_INET2  src $IP_INET2  table ED 
ip route add 127.0.0.0/8 dev lo        table ED 
ip route add default    via $GW_INET1  table ED 

ip route add $NET_LOCAL1 dev $IF_LOCAL1 src $IP_LOCAL1 table STAR 
ip route add $NET_INET1  dev $IF_INET1  src $IP_INET1  table STAR
ip route add $NET_INET2  dev $IF_INET2  src $IP_INET2  table STAR
ip route add 127.0.0.0/8 dev lo  table STAR
ip route add default    via $GW_INET2  table STAR

ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1      #заполняем основную таблицу адресов. сеть на ED
ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2      #заполняем основную таблицу адресов. сеть на STAR
# А вот это важно для понимания! если понять что происходит в следующих строчках - то можно настраивать любые правила маршрутизации.
ip rule add from $IP_INET1 table ED  #все пакеты от ip адреса первого провайдера маршрутизировать по таблице T1
ip rule add from $IP_INET2 table STAR  #все пакеты от ip адреса второго провайдера маршрутизировать по таблице T2

ip rule add fwmark 10 table ED  #все пакеты, которые имеют метку 10 маршрутизировать по таблице T1
ip rule add fwmark 11 table STAR  #все пакеты, которые имеют метку 11 маршрутизировать по таблицу T2

ip route del default
ip route add default via $GW_INET1  #заполняем основную таблицу адресов. дефолтный гейт
#ip route add default via $GW_INET2

ip route flush cache      #ну и на последок очистить кеш

# 2 ip в интернете, на которые задаем маршруты вручную. Чтобы проверять работает инет на интерфейсах или нет.
route add -host 212.188.4.10  gw $GW_INET1 $IF_INET1
route add -host 195.34.32.116 gw $GW_INET2 $IF_INET2

## Настраиваем распределение трафика
# Очистка таблиц и цепочек
iptables --flush
iptables --delete-chain
iptables --table nat --flush
iptables --table filter --flush
iptables --table mangle --flush
iptables --table nat --delete-chain
iptables --table filter --delete-chain
iptables --table mangle --delete-chain

# Назначение глобальных политик фаервола
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD


## Трафик по 80,8080,443(веб различный) и 110,25(почта) метим меткой 10(это на ED)
## ЕСЛИ ЗАРАБОТАЕТ ЗДЕСЬ ИЗМЕНИТЬ перенаправление на squid портов 80,8080 и 443 ибо фильтр контента
iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 80  -j MARK --set-mark 10
#iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 80 -j RETURN
iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 8080  -j MARK --set-mark 10
#iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 8080 -j RETURN
iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 443  -j MARK --set-mark 10
#iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 443 -j RETURN
iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 110  -j MARK --set-mark 10
#iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 110 -j RETURN
iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 25  -j MARK --set-mark 10
#iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 25 -j RETURN


## Трафик по 5190(аська) , а также весь, неописанный выше, метим меткой 11(это на STAR)
iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 5190  -j MARK --set-mark 11
#iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -p tcp --dport 5190 -j RETURN
iptables -t mangle -A PREROUTING  -s $NET_LOCAL1 -j MARK --set-mark 11

## SNAT
iptables -t nat -A POSTROUTING -o $IF_INET1 -j SNAT --to-source $IP_INET1
iptables -t nat -A POSTROUTING -o $IF_INET2 -j SNAT --to-source $IP_INET2

/data/scripts/fw # тут запуск фаервола

echo "Routing  OK"

exit 0



Скрипт фаервола
#!/bin/bash

echo "preparing iptables firewall..."

# Описываем переменные, используемые в скрипте

IP_LOCAL1="192.168.0.1" # адрес нашего маршрутизатора в локальной сети.
IP_INET1="192.168.2.2" # адрес нашего маршрутизатора в сети ED.
IP_INET2="192.168.1.2" # адрес нашего марщрутизатора в сети STAR.

IF_LOCAL1="eth0" # имя интерфейса на локальную сеть
IF_INET1="eth1" # имя интерфейса на ED.
IF_INET2="eth2" # имя интерфейса на STAR.

NET_LOCAL1="192.168.0.0/24" # локальная сеть.
NET_INET1="192.168.2.0/24" # адрес сети в которой гейт ED
NET_INET2="192.168.1.0/24" # адрес сети в которой гейт STAR (а точнее Dlink-роутер).

GW_INET1="192.168.2.1" # гейт ED.
GW_INET2="192.168.1.1" # гейт STAR.

UNPRIPORTS="1024:65535" # Номера непривилегированных портов


## Настраиваем iptables(общие правила и параметры)

# Загружаем модули, для корректной работы VPN, Active ftp, DCC  которые будут идти через NAT.
modprobe ip_nat_ftp
modprobe ip_nat_pptp
modprobe ip_conntrack_ftp

echo "1" >  /proc/sys/net/ipv4/ip_forward # Разрешаем форвардинг
echo "1" >  /proc/sys/net/ipv4/ip_dynaddr # Разрешаем форвардинг для VPN


# Порты NETBIOS :
iptables -A FORWARD -p udp -m multiport  --ports 135,136,137,138,139,445 -j ACCEPT # Разрешаем форвард NetBIOS
iptables -A FORWARD -p tcp -m multiport  --ports 135,136,137,138,139,445 -j ACCEPT # чтобы при включенном vpn работали общие папки

# закрываем APACHE снаружи и открываем изнутри(все сайты(их несколько - и влом на каждом прописывать Allow From) веб-сервера доступены только из локальной
сети)
iptables -A INPUT -p tcp -i $IF_INET1  -m multiport  --ports 80,8080,443 -j DROP
iptables -A INPUT -p tcp -i $IF_INET2  -m multiport  --ports 80,8080,443 -j DROP
iptables -A INPUT -p tcp -i $IF_LOCAL1  -m multiport  --ports 80,8080,443 -j ACCEPT

# Разрешаем все ранее запрошенные/установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $IF_INET1 -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! $IF_INET2 -j ACCEPT
iptables -A FORWARD -i $IF_INET1 -o $IF_LOCAL1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $IF_INET2 -o $IF_LOCAL1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем прохождение пакетов по интерфейсу обратной петли
iptables -A INPUT -i lo -j ACCEPT

# Statistics and auths for customers, ping tests
for net_ips in $NET_LOCAL1; do

iptables -A INPUT -p icmp -i $IF_LOCAL1 --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $IF_INET1 --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $IF_INET2 --icmp-type echo-request -j ACCEPT

done

#Траффик на сквид
#iptables -t nat -A PREROUTING -i eth0 -d ! 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128

# DNS сервер имен разрешаем.
iptables -A OUTPUT -p udp -m udp -o $IF_INET1 --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -o $IF_INET1 --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A INPUT -p udp -m udp -i $IF_INET1 --dport $UNPRIPORTS --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -i $IF_INET1 --dport $UNPRIPORTS --sport 53 -j ACCEPT

iptables -A OUTPUT -p udp -m udp -o $IF_INET2 --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -o $IF_INET2 --dport 53 --sport $UNPRIPORTS -j ACCEPT
iptables -A INPUT -p udp -m udp -i $IF_INET2 --dport $UNPRIPORTS --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -i $IF_INET2 --dport $UNPRIPORTS --sport 53 -j ACCEPT

# Не знаю, будет ли FTP. Если подниму - открою эти правила для доступа
# FTP
#iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT

# PASSIVE FTP
#iptables -t filter -A INPUT -p tcp -m tcp --dport 50000:50500 -m state --state NEW -j ACCEPT
#iptables -t filter -A INPUT -p udp -m udp --dport 50000:50500 -m state --state NEW -j ACCEPT

# Пока закрываю доступ по VPN пока не настроен VPN сервер
# Разрешаем VPN для определенных адресов и запрещаем остальным
#iptables -A INPUT -s 93.157.124.11 -i $IF_INET1 -p tcp --dport 1723 -j ACCEPT
#iptables -A INPUT -s 91.204.149.84 -i $IF_INET1 -p tcp --dport 1723 -j ACCEPT
#iptables -A INPUT -i $IF_INET1 -p tcp --dport 1723 -j DROP

#iptables -A INPUT -s 93.157.124.11 -i $IF_INET2 -p tcp --dport 1723 -j ACCEPT
#iptables -A INPUT -s 91.204.149.84 -i $IF_INET2 -p tcp --dport 1723 -j ACCEPT
#iptables -A INPUT -i $IF_INET2 -p tcp --dport 1723 -j DROP

#iptables -A INPUT -s 93.157.124.11 -p tcp --dport 1723 -m state --state NEW -j ACCEPT
#iptables -A INPUT -s 91.204.149.84 -p tcp --dport 1723 -m state --state NEW -j ACCEPT
#iptables -A INPUT -p tcp --dport 1723 -j DROP

# Разрешаем доступ к pptp-серверу для всех
#iptables -A INPUT -p tcp --dport 1723 -m state --state NEW -j ACCEPT

# Пока закрываю доступ по SSH извне ибо не помню домашний адрес
# Разрешаем доступ по ssh на внешние интерфейсы только с определенных адресов, с остальных закрываем
#iptables -A INPUT -s 93.157.124.11 -i $IF_INET1 -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -i $IF_INET1 -p tcp --dport 22 -j DROP

#iptables -A INPUT -s 93.157.124.11 -i $IF_INET2 -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -i $IF_INET2 -p tcp --dport 22 -j DROP

#iptables -A INPUT -s 93.157.124.11 -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -p tcp --dport 22 -j DROP

# Разрешаем работу почтовых клиентов(учитываем, что почтовый траффик идет у нас через ED, т.е. eth0, IF_INET1)
iptables -A INPUT -i $IF_INET1 -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $IF_INET1 -p tcp --dport 25 -j ACCEPT
#iptables -A INPUT -i $IF_INET2 -p tcp --dport 110 -j ACCEPT
#iptables -A INPUT -i $IF_INET2 -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -i $IF_LOCAL1 -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i $IF_LOCAL1 -p tcp --dport 25 -j ACCEPT

# Отключены форварды на почтовые порты пока не поднят почтовый сервер
# Форвард 25 порта на MS Exchange 2003(SBS)
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET1 --dport 25 -j DNAT --to-destination 192.168.0.110:25
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET2 --dport 25 -j DNAT --to-destination 192.168.0.110:25
#iptables -A FORWARD -i $IF_INET1 -d 192.168.0.110 -p tcp --dport 25 -j ACCEPT
#iptables -A FORWARD -i $IF_INET2 -d 192.168.0.110 -p tcp --dport 25 -j ACCEPT

# Форвард 110 порта на MS Exchange 2003(SBS)

#iptables -t nat -A PREROUTING -p tcp -d $IP_INET1 --dport 110 -j DNAT --to-destination 192.168.0.110:110
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET2 --dport 110 -j DNAT --to-destination 192.168.0.110:110
#iptables -A FORWARD -i $IF_INET1 -d 192.168.0.110 -p tcp --dport 110 -j ACCEPT
#iptables -A FORWARD -i $IF_INET2 -d 192.168.0.110 -p tcp --dport 110 -j ACCEPT

# Форвард Рабочего места SBS
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET1 --dport 80 -j DNAT --to-destination 192.168.0.110:80
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET1 --dport 443 -j DNAT --to-destination 192.168.0.110:443
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET1 --dport 444 -j DNAT --to-destination 192.168.0.110:444
#iptables -A FORWARD -i $IF_INET1 -d 192.168.0.110 -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -i $IF_INET1 -d 192.168.0.110 -p tcp --dport 443 -j ACCEPT
#iptables -A FORWARD -i $IF_INET1 -d 192.168.0.110 -p tcp --dport 444 -j ACCEPT

#iptables -t nat -A PREROUTING -p tcp -d $IP_INET2 --dport 80 -j DNAT --to-destination 192.168.0.110:80
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET2 --dport 443 -j DNAT --to-destination 192.168.0.110:443
#iptables -t nat -A PREROUTING -p tcp -d $IP_INET2 --dport 444 -j DNAT --to-destination 192.168.0.110:444
#iptables -A FORWARD -i $IF_INET2 -d 192.168.0.110 -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -i $IF_INET2 -d 192.168.0.110 -p tcp --dport 443 -j ACCEPT
#iptables -A FORWARD -i $IF_INET2 -d 192.168.0.110 -p tcp --dport 444 -j ACCEPT


# Закрываем известные троянские порты:
iptables -A FORWARD -p udp -m multiport --sport 16355,21111,1349,26274,29891,31337,31338,47262 -j DROP
iptables -A FORWARD -p tcp -m multiport --sport 555,666,1001,1025,1026,1028,1243,2000,5000,6667,6670,6711 -j DROP
iptables -A FORWARD -p tcp -m multiport --sport 6969,7000,12345,123456,21554,22222,27374,29559,31337,31338 -j DROP

## Запрещаем часть рекламы(режем известные серверы рекламы)
iptables -A FORWARD -j DROP -s 194.67.32.247
iptables -A FORWARD -j REJECT -d 194.67.32.247
iptables -A FORWARD -j DROP -s 81.222.128.0/24
iptables -A FORWARD -j REJECT -d 81.222.128.0/24
iptables -A FORWARD -j DROP -s 80.68.240.245
iptables -A FORWARD -j REJECT -d 80.68.240.245
iptables -A FORWARD -j DROP -s 81.19.80.0/26
iptables -A FORWARD -j REJECT -d 81.19.80.0/26
iptables -A FORWARD -j DROP -s 85.12.15.12
iptables -A FORWARD -j REJECT -d 85.12.15.12
iptables -A FORWARD -j DROP -s 80.68.242.108
iptables -A FORWARD -j REJECT -d 80.68.242.108
iptables -A FORWARD -j DROP -s 88.212.200.101
iptables -A FORWARD -j REJECT -d 88.212.200.101
iptables -A FORWARD -j DROP -s 88.212.200.102
iptables -A FORWARD -j REJECT -d 88.212.200.102
iptables -A FORWARD -j DROP -s 88.212.200.103
iptables -A FORWARD -j REJECT -d 88.212.200.103
iptables -A FORWARD -j DROP -s 88.212.200.104
iptables -A FORWARD -j REJECT -d 88.212.200.104
iptables -A FORWARD -j DROP -s 88.212.200.105
iptables -A FORWARD -j REJECT -d 88.212.200.105
iptables -A FORWARD -j DROP -s 88.212.200.106
iptables -A FORWARD -j REJECT -d 88.212.200.106
iptables -A FORWARD -j DROP -s 88.212.200.107
iptables -A FORWARD -j REJECT -d 88.212.200.107
iptables -A FORWARD -j DROP -s 88.212.200.108
iptables -A FORWARD -j REJECT -d 88.212.200.108
iptables -A FORWARD -j DROP -s 200.124.141.73
iptables -A FORWARD -j REJECT -d 200.124.141.73
iptables -A FORWARD -j DROP -s 213.95.1.55
iptables -A FORWARD -j REJECT -d 213.95.1.55
iptables -A FORWARD -j DROP -s 78.140.139.98
iptables -A FORWARD -j REJECT -d 78.140.139.98
iptables -A FORWARD -j DROP -s 87.98.205.19
iptables -A FORWARD -j REJECT -d 87.98.205.19
iptables -A FORWARD -j DROP -s 91.194.91.210
iptables -A FORWARD -j REJECT -d 91.194.91.210
iptables -A FORWARD -j DROP -s 208.43.125.105
iptables -A FORWARD -j REJECT -d 208.43.125.105
iptables -A FORWARD -j DROP -s 80.93.49.141
iptables -A FORWARD -j REJECT -d 80.93.49.141
iptables -A FORWARD -j DROP -s 80.93.58.59
iptables -A FORWARD -j REJECT -d 80.93.58.59
iptables -A FORWARD -j DROP -s 213.174.137.32
iptables -A FORWARD -j REJECT -d 213.174.137.32
iptables -A FORWARD -j DROP -s 213.174.136.0/24
iptables -A FORWARD -j REJECT -d 213.174.136.0/24
iptables -A FORWARD -j DROP -s 209.160.65.196
iptables -A FORWARD -j REJECT -d 209.160.65.196
iptables -A FORWARD -j DROP -s 83.229.248.167
iptables -A FORWARD -j REJECT -d 83.229.248.167
iptables -A FORWARD -j DROP -s 83.229.249.92
iptables -A FORWARD -j REJECT -d 83.229.249.92

echo "Iptables  OK"

exit 0


после всего вышенаписанного добавляю в конец /etc/network/interfaces строку вида

push-up /data/scripts/nat

Интересно, будет ли работать? ;)
Последний раз редактировалось TheRain 17 авг 2011, 02:38, всего редактировалось 1 раз.
Изменения в природе происходят год от года,
Непогода нынче в моде, непогода, непогода.
Аватара пользователя
TheRain
Администратор
Администратор
 
Сообщения: 229
Зарегистрирован: 14 фев 2011, 15:02
Блог: Просмотр блога (2)

Re: Распределение интернет трафика на двух провайдеров

Сообщение TheRain » 17 авг 2011, 02:30

Я идиот!

Простейшая внимательность!!!

Stupid idiot!

РРРРРРРРРРРРРРРРРРРРРРрррррррррррррррррррррррррррррр  >:( >:( >:( >:( >:( >:( >:( >:( >:(

Первый пост fixed
Последний раз редактировалось TheRain 17 авг 2011, 02:39, всего редактировалось 1 раз.
Изменения в природе происходят год от года,
Непогода нынче в моде, непогода, непогода.
Аватара пользователя
TheRain
Администратор
Администратор
 
Сообщения: 229
Зарегистрирован: 14 фев 2011, 15:02
Блог: Просмотр блога (2)


Вернуться в Для Дождя

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2