Jump to content

Recommended Posts

Posted

Есть комп-маршрутизатор на Linux, в котором:

eth0 - интерфейс в локальную сеть, с провайдером 1

eth1 - интерфейс в ADSL-модем со стримом

ppp0 и ppp1 - pppoe итерфейсы к провайдерам

 

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

 

Есть 2 варианта:

1. Свид x 2

2. iproute2 + iptables

 

Понятно, что более правилен вариант 2, но нигде не нашел схемы решения проблемы на основе iproute. Читал про маркировку пакетов с помощью iptabes и расфасовке iproute, но вникнуть в тему как следует так и не смог.

Заранее спасибо.

 

P.S. До того, как появился стрим, делал фильтрацию входящего траффика с помощью iptables, исходящего - squid

 

P.P.S. Таблица вида:

193.109.114.0/24

193.109.76.0/24

193.109.77.0/24

193.109.89.0/24

193.110.0.0/23

193.110.4.0/23

...

Posted

Ну что-то в этом роде.....

Создаем 2 таблицы

echo 202 net1 >> /etc/iproute2/rt_tables

echo 210 net2 >> /etc/iproute2/rt_tables

перенаправляем помеченый трафик в определенные таблицы

ip rule add fwmark 2 table net1 ##Российский трафик

ip rule add fwmark 3 table net2 ##Иностранный трафик

 

ip route add default via шлюз_прова_1 dev ppp0 table net1 ##Добавляем шлюз для таблицы с российским трафиком

ip route add default via шлюз_прова_2 dev ppp1 table net2 ##Добавляем шлюз для таблицы с иностранным трафиком

ip route flush cache ## Инициализируем таблицу маршрутизации

 

iptables -t mangle -A PREROUTING -d РОССИЙСКАЯ_сеть -j MARK --set-mark 2 ## Маркируем трафик который направлен в РОССИЙСКИЕ сети

iptables -t mangle -A PREROUTING -d ИНОСТРАННАЯ_сеть -j MARK --set-mark 3 ## Маркируем трафик который направлен в ИНОСТРАННЫЕ сети

 

.... А вообще в сети куча инфы по этой тематике. :-) Удачи

Posted

Cyper, не работает твой вариант

Сделал немного по-другому:

ppp1 - default route

сделал так:

ip rule add fwmark 1 table russian

маркирую пакеты, принадлежащие к российским сетям:

/sbin/iptables -t mangle -A PREROUTING -d 193.109.77.0/24 -j MARK --set-mark 1

/sbin/iptables -t mangle -A PREROUTING -d 193.109.89.0/24 -j MARK --set-mark 1

/sbin/iptables -t mangle -A PREROUTING -d 193.110.0.0/23 -j MARK --set-mark 1

затем:

ip route add default via $WAN_GATE dev ppp0 table russian

нат:

/sbin/iptables -t nat -A POSTROUTING -s 192.168.24.3 -d 0/0 -j MASQUERADE

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

Что я делаю не так?

Posted

Всем привет!

 

Совершенно не вижу смысла в двух таблицах маршрутизации и, соответсвенно,

в необходимости маркировать пакеты, для направления в разные таблицы маршрутизации.

 

Я бы делал так:

 

1. для того чтобы отправлять российкий трафик пров-ру 1 необходимо

просто прописать маршруты в эти сети, установив в качесте гейта

для этих маршрутов гейт провайдера 1

 

Что-то вроде

 

route add -net X1 gw GW1

route add -net X2 gw GW1

...

route add -net Xn gw GW1

 

2. Весь остальной трафик идет на default gateway провайдера 2

 

route add default GW2

 

3. А теперь решим вопрос с входящим трафиком. Трафик будет возвращаться по тому каналу

с чьих IP адресов идет отправка. Если отправляете трафик с адресов провайдера

1, то, соответсвенно, возвращаться он и будет через канала 1 провайдера.

 

Если используете NAT, то нужно написать некоторое кол-во правил, которые

будут маскарадить весь трафик в российские сети на адрес или адреса, которые Вам

выдал провайдер 1, а весь остальной трафик натить за адрес/адреса провайдера 2.

 

iptables -t nat -A POSTROUTING -s LOCAL_NET -d X1 -j SNAT --to inet_ip_prov1

iptables -t nat -A POSTROUTING -s LOCAL_NET -d X2 -j SNAT --to inet_ip_prov1

...

iptables -t nat -A POSTROUTING -s LOCAL_NET -d Xn -j SNAT --to inet_ip_prov1

 

# весь остальной трафик

iptables -t nat -A POSTROUTING -s LOCAL_NET -j SNAT --to inet_ip_prov2

 

где:

LOCAL_NET - серые адреса Ваших клиентов

X1..Xn - бесплатные сети

inet_ip_prov1 - адрес из блока адресов, которые вам выдал пров. 1

inet_ip_prov2 - адрес из блока адресов, которые вам выдал пров. 2

Posted

Спасибо огромное, все заработало, как планировалось.. сделал немного проще, чем

iptables -t nat -A POSTROUTING -s LOCAL_NET -d Xn -j SNAT --to inet_ip_prov1

, через маскарад

 

теперь, пожалуй, последний вопрос: как сбрасывать это все хозяйство в первоначальное состояние?

я сделал скриптик, который генерит из той таблицы такую:

route add -net 192.160.233.0/24 gw $GW

route add -net 192.175.48.0/24 gw $GW

и т.д.

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

Posted
Спасибо огромное, все заработало, как планировалось.. сделал немного проще, чем
iptables -t nat -A POSTROUTING -s LOCAL_NET -d Xn -j SNAT --to inet_ip_prov1

, через маскарад

 

теперь, пожалуй, последний вопрос: как сбрасывать это все хозяйство в первоначальное состояние?

я сделал скриптик, который генерит из той таблицы такую:

route add -net 192.160.233.0/24 gw $GW

route add -net 192.175.48.0/24 gw $GW

и т.д.

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

Что Вы имеете ввиду под первоначальным состоянием?

Удаляйте маршруты, удаляйте правила маскарада, далее создавайте все снова.

Posted

ip route | grep "via xxx.xxx.xxx.xxx" | awk '{print $1}'

и далее

route del -net xxx.xxx.xxx.xxx/xx gw xxx.xxx.xxx.xxx

все сбрасывается в состояние, которое было до того, как добавили маршруты

всем спасибо, тема закрыта

Posted

ip rule add to <net1>/24 table 1000

...

ip rule add to <net255>/24 table 1000



ip route add table 1000 via <gw1> dev ppp0

route add default gw <gw2> dev ppp1



iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source <ppp0_ip>

iptables -t nat -A POSTROUTING -o ppp1 -j SNAT --to-source <ppp1_ip>

 

Вроде так... Правил для NAT нужно ровно два - по количеству интерфейсов. Также, IMHO, комбинация 'ip rule'+'ip route' лучше, чем использование только 'route add'.

Posted
ip rule add to <net1>/24 table 1000

Также, IMHO, комбинация 'ip rule'+'ip route' лучше, чем использование только 'route add'.

А можно узнать чем? Разве не появляется лишнее звено - дополнительная таблица маршрутизации?

Posted
ip rule add to <net1>/24 table 1000

Также, IMHO, комбинация 'ip rule'+'ip route' лучше, чем использование только 'route add'.

А можно узнать чем? Разве не появляется лишнее звено - дополнительная таблица маршрутизации?

 

ИМХО например можно вертеть второй таблицей не боясь задеть первую, еще отключать всё оптом, не удаляя правил из таблицы, а вообще это монопенисуально.

Posted

desperado, у меня задача была делать маршрутизацию по одной таблице ;)

Так что route здесь больше всего подходит, IMHO. По крайней мере, минимальные извращения :)

Posted
ip rule add to <net1>/24 table 1000

Также, IMHO, комбинация 'ip rule'+'ip route' лучше, чем использование только 'route add'.

А можно узнать чем? Разве не появляется лишнее звено - дополнительная таблица маршрутизации?

Насчет лишних звеньев - пофиг. А в остальном - гибче и удобнее.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.