The OpenNET Project / Index page

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

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

"Два провайдена + локалка, Linux исключительно iptables+route..."  +/
Сообщение от Bzz email(ok) on 13-Окт-09, 00:41 
Вопрос такой.
Система Федора 9
eth0 - интерфейс с внешним ип. через него инет от первого провайдера. ип 194.х.х.16 (248)
eth1 - интерфейс локальный в него приходит вся локалка 10.0.0.0 и 10.0.1.0
eth2 - интерфейс локальный в него приходит ADSL модем, который работает как роутер. Т.е на нем есть инет по умолчанию всегда от второго провайдера. 192.168.1.0

На eth1 два адреса 10.0.0.0 и 10.0.1.0 алиасом, соответственно приходят две локалки через свич.

Задача. В инет 10.0.0.0 все идут через eth2, а 10.0.1.0 через eth1
Вторая задача. Хочу все это сделать скриптом с помощью route и iptables без iproute2. Потому, что мне нравится логика, когда все прописываешь поэтапно в въезжаешь в каждую деталь. Во-вторых хочется для себя разобраться полностью как это все делается сначала так, без упрощающих утилит.

Я пока сделал так:
1. iptables все политики на DENY . Затем на инпут и оутпут цепочках ип каждого интерфейса разрешил ходить куда им положено.
2. в FORWARD зафорвардил все подсети, т.е дал им свободные маршруты во все направления, фактически.
iptables -A FORWARD -s 194.44.x.x/255.255.255.248 -j ACCEPT (ип что дан провайдеру свободно форвардится в любом направлении) и остальные правила в этом стиле как для 194.44.х.х, так и локальных подсетей
3. В роуте поставил
route add default gw 194.x.x.17 dev eth0

4. Затем в iptables
iptables -t nat -A POSTROUTING -s 10.0.0.10 -j MASQUERADE

С этого шага все заработало с 10.0.0.10 компа можно ходить в инет через превого провайдера, добавляя сюда правила добавляем пользователей которые получают доступ.

Далее надо часть пробросить через второго прова.
И вот тут начались проблемы.

5. В инете прочитал что надо сделать так, добавить дефаулт гв для второго пути:
route add default gw 192.168.1.1 (адрес модема) dev eth2
route add default gw 194.х.х.17 (адрес гв прова) dev eth0

Логика, что все приходящее на eth2 роутится через модем. Однако ничего сам собой не вышло.
Я начал адаптироваться и поменял правила в FORWARDе.

iptables -A FORWARD -s 10.0.1.0/255.255.255.0 -d 192.168.1.0/255.255.255.0 -j ACCEPT
И в этом стиле остальные.
Таким образом отрезал 10.0.1.0 подсеть от возможности вообще ходить через шлюз первого провайдера, а только дав возможность ходить через 192.168.1.0 подсеть т.е. через модем.

Сработало, на удивление. Компы из 10.0.1.0 подсети выходят в инет через второго прова.

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

Я не могу дать весь конфиг, потому, что зайти не могу на машинку извне, а она в офисе. Завтра из локалки буд ковырять.


Я думаю следующий шаг улучшить это дело - это разнатить подсети полностью по интерфейсам. Что-то вроде как:
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth0 -j SNAT 194.x.x.17
iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.255.0 -o eth2 -j SNAT 192.168.1.1
Не знаю, может ошибся - завтра на серве проверю.
И затем в FORWARDe тоже подсети зажать, чтобы могли ходить только по задуманному туннелю.
Но как правильно route и default gw прописать пока нигде не нашел.


Помогите разобраться с сабжем. Для меня это дело - хобби. И интересует не столько конфиг. Я его буду так вот по чуть-чуть отшлифовывать и напишу сам. Сколько въехать в саму логику процесса.

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

Оглавление

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


1. "Два провайдена + локалка, Linux исключительно iptables+route..."  +/
Сообщение от Andrew (??) on 13-Окт-09, 07:03 
>[оверквотинг удален]
>Не знаю, может ошибся - завтра на серве проверю.
>И затем в FORWARDe тоже подсети зажать, чтобы могли ходить только по
>задуманному туннелю.
>Но как правильно route и default gw прописать пока нигде не нашел.
>
>
>
>Помогите разобраться с сабжем. Для меня это дело - хобби. И интересует
>не столько конфиг. Я его буду так вот по чуть-чуть отшлифовывать
>и напишу сам. Сколько въехать в саму логику процесса.

http://lartc.org

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

2. "Два провайдена + локалка, Linux исключительно iptables+route..."  +/
Сообщение от ALex_hha (ok) on 13-Окт-09, 13:30 
>[оверквотинг удален]
>
>На eth1 два адреса 10.0.0.0 и 10.0.1.0 алиасом, соответственно приходят две локалки
>через свич.
>
>Задача. В инет 10.0.0.0 все идут через eth2, а 10.0.1.0 через eth1
>
>Вторая задача. Хочу все это сделать скриптом с помощью route и iptables
>без iproute2. Потому, что мне нравится логика, когда все прописываешь поэтапно
>в въезжаешь в каждую деталь. Во-вторых хочется для себя разобраться полностью
>как это все делается сначала так, без упрощающих утилит.

Это из серии - "мы не ищем легких путей"? route уже давно deprecated и рекомендуют использовать именно ip из пакета iproute2.


>Я пока сделал так:
>1. iptables все политики на DENY . Затем на инпут и оутпут
>цепочках ип каждого интерфейса разрешил ходить куда им положено.
>2. в FORWARD зафорвардил все подсети, т.е дал им свободные маршруты во
>все направления, фактически.
>iptables -A FORWARD -s 194.44.x.x/255.255.255.248 -j ACCEPT (ип что дан провайдеру свободно
>форвардится в любом направлении) и остальные правила в этом стиле как
>для 194.44.х.х, так и локальных подсетей

не понятно для чего эти правила, в цепочке FORWARD будут только транзитные пакеты и уж точно там не будет 194.44.x.x

>3. В роуте поставил
>route add default gw 194.x.x.17 dev eth0
>
>4. Затем в iptables
>iptables -t nat -A POSTROUTING -s 10.0.0.10 -j MASQUERADE
>
>С этого шага все заработало с 10.0.0.10 компа можно ходить в инет
>через превого провайдера, добавляя сюда правила добавляем пользователей которые получают доступ.

Лучше использовать SNAT, если ip статический


>Далее надо часть пробросить через второго прова.
>И вот тут начались проблемы.
>
>5. В инете прочитал что надо сделать так, добавить дефаулт гв для
>второго пути:
>route add default gw 192.168.1.1 (адрес модема) dev eth2
>route add default gw 194.х.х.17 (адрес гв прова) dev eth0

не правильно


>[оверквотинг удален]
>Я думаю следующий шаг улучшить это дело - это разнатить подсети полностью
>по интерфейсам. Что-то вроде как:
>iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth0 -j SNAT 194.x.x.17
>
>iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.255.0 -o eth2 -j SNAT 192.168.1.1
>
>Не знаю, может ошибся - завтра на серве проверю.
>И затем в FORWARDe тоже подсети зажать, чтобы могли ходить только по
>задуманному туннелю.
>Но как правильно route и default gw прописать пока нигде не нашел.

тебе нужно натсроить source policy routing. Ссылку тебе уже дали

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

3. "Два провайдена + локалка, Linux исключительно iptables+route..."  +/
Сообщение от Bzz (ok) on 14-Окт-09, 15:28 
Короче говоря уговорили, сделал все через ip
Получился следующий скрипт:

---------------------------
#!/bin/bash

IF0=eth0   -- провайдер лан
IF1=eth1   -- локалка
IF2=eth2   -- линк в АДСЛ модем

IP0=194.44.хх.хх
IP10=10.0.0.254
IP11=10.0.1.254
IP2=192.168.1.254

P0=194.44.хх.хх --провайдер лан
P2=192.168.1.1  --АДСЛ модем в режиме роутера

P0_NET=194.44.хх.хх/29
P10_NET=10.0.0.0/24
P11_NET=10.0.1.0/24
P2_NET=192.168.1.0/24

/sbin/ip route flush table T1
/sbin/ip route flush table T2

/sbin/ip route add $P0_NET dev $IF0 src $IP0 table T1
/sbin/ip route add default via $P0 table T1
/sbin/ip route add $P2_NET dev $IF2 src $IP2 table T2
/sbin/ip route add default via $P2 table T2

/sbin/ip route add $P0_NET dev $IF0 src $IP0
/sbin/ip route add $P2_NET dev $IF2 src $IP2
/sbin/ip route add default via $P2

/sbin/ip rule flush
/sbin/ip rule del from all lookup main
/sbin/ip rule add from $IP0 table T1
/sbin/ip rule add from $IP2 table T2
/sbin/ip rule add from $P10_NET table T2
/sbin/ip rule add from $P11_NET table T1
/sbin/ip rule add from all lookup main

/sbin/ip route add $P10_NET     dev $IF1 table T2
/sbin/ip route add $P2_NET      dev $IF2 table T2
/sbin/ip route add 127.0.0.0/8  dev lo   table T2
/sbin/ip route add $P11_NET     dev $IF1 table T1
/sbin/ip route add $P0_NET      dev $IF0 table T1
/sbin/ip route add 127.0.0.0/8  dev lo   table T1
-------------------------------------------------------

flush rule и del from all lookup main стоит там потому, что немного запортачил пока делал правила и мейн всевремя подкидывало наверх и через него в маршрут по-умолчанию уходили все пакеты.

В целом скрипт вот такой. Все работает.
Второй скрипт на iptables но его не привожу он просто раскидывает кому куда ходить и с каких именно ИП можно ходить в инет.

Вопросы - может кто поможет систематизировать это дело? Может чего лишнего написал.


И мне не нравится положение дел вот здесь:
[root@qwerty firewall]# /sbin/ip rule list
0:      from all lookup local
0:      from all lookup local
0:      from 194.44.хх.хх lookup T1
0:      from 192.168.1.254 lookup T2
0:      from 10.0.0.0/24 lookup T2
0:      from 10.0.1.0/24 lookup T1
0:      from all lookup main
Два локала вверху, все что ниже них не flushится . Получилась такая сиутация из-за длительных опытов над этими правилами как-то сама.
Как можно по-умному тут все раскидать один раз скриптом, чтобы уже не лазить сюда повторно?

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

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

Индекс форумов | Темы | Пред. тема | След. тема




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

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