Ubuntu и два pppoe к провайдеру Ситуация: Автоматом поднимаются два подключения pppoe через разные eth интерфейсы к одному провайдеру(бывает так, что шлюз одинаковый!) Задача: Необходимо иметь доступ к машине одновременно по двум внешним подключениям и из локалки в интернет. И так же не терять выход в интернет, если одно из подключений отвалилось. Сейчас оба подключения забирают на себя одеяло при подключении. В итоге работает только одно, то что подключилось последним и стало шлюзом по умолчанию, если его отключить работает первое. Пробовал маркировать в iptables и рулить через таблицы, но что-то не получилось. Можно как то дебажить маркирование пакетов и работу правил? Так же не понимаю как разрулить если шлюз одинаковый, переподключаться пока они не станут разные? =). Хотел бы получить возможные варианты реализации и чем подробнее тем лучше =) |
сколько платишь? |
[quote=40KHYTbIU;34040160]Можно как то дебажить маркирование пакетов и работу правил?[/quote] [code]-j LOG[/code] или тупо смотришь количество пакетов в статистике [code]iptables -n -L -v -t nat[/code] [quote=40KHYTbIU;34040160]Хотел бы получить возможные варианты реализации[/quote] посоветую вот [url=http://www.shorewall.net/MultiISP.html]это[/url], ибо с нуля маркировать/маршрутить будет тяжко |
давай так. настраиваем подключение, а за фаервол отдельно платишь. |
Набросал такое скрипт [em]#!/bin/bash echo "1">/proc/sys/net/ipv4/ip_forward echo "0">/proc/sys/net/ipv4/conf/all/rp_filter iptables -t nat -F iptables -t filter -F iptables -t mangle -F ip rule delete table dsl1 ip rule delete table dsl2 ip route delete table dsl1 ip route delete table dsl2 iptables -t mangle -A PREROUTING -i ppp0 -j MARK --set-mark 0x1111 iptables -t mangle -A PREROUTING -i ppp1 -j MARK --set-mark 0x2222 ip rule add fwmark 0x1111 table dsl1 ip rule add fwmark 0x2222 table dsl2 ip route add 0.0.0.0/0 dev ppp0 table dsl1 ip route add 0.0.0.0/0 dev ppp1 table dsl2 ip route flush cache[/em] Но вот чето не работает. 2-droidman > судя по статистике пакеты маркируются, но не ходят куда надо. |
Не хватало маршрута по умолчанию в таблице ip route add default via $P0 table dsl1 |
чета не вкурил как оно у вас заработало.... у вас же mark вроде маркирует просто пакет входящий, откуда ответ знает как лететь, а не просто по порядку по таблицам маршрутизации шлындрает ? и насчет балансировки изнутри на "новые адреса" как-то сомнительно... |
таблицы есть в /etc/iproute2/rt_tables ?) |
так это...мож всеже заменить [code]iptables -t mangle -A PREROUTING -i ppp0 -j MARK --set-mark 0x1111 iptables -t mangle -A PREROUTING -i ppp1 -j MARK --set-mark 0x2222 [/code] на [code] iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark iptables -t mangle -A PREROUTING -i ppp0 -j CONNMARK --set-mark 0x1111 iptables -A PREROUTING -t mangle --match mark --mark 0x1111 -j ACCEPT iptables -t mangle -A PREROUTING -i ppp1 -j CONNMARK --set-mark 0x2222 iptables -A PREROUTING -t mangle --match mark --mark 0x2222 -j ACCEPT iptables -t mangle -A PREROUTING -j CONNMARK --save-mark [/code] CONNMARK он в отличие от mrak - connection tracking, ну т.е. относится ко все сессии собсно верхнее правило востанавливает метку на related , т.е. ответ от сервака полетит по нужному маршруту |
просто марк имеет смысл когда для исходящих надо пустить в завис-и от чего-то например от сурса на нужный маршрут, а ответ и так прилетит куда надо ну на тот интерфейс с которого вылетело.... и ещё надо сбалансировать исходящий в вашем случае, а то оно все полетит одним линком... или я все таки не прально вкуриваю ? я просто практически почти не сталкивался с двумя линками и балансировкой, если было то почти всегда фейловер |
8-701054 >mrak=mark ))))))))) |
10-701054 > Мне не надо балансировать исходящий трафик, мне необходимо только иметь доступ по обоим каналам. Решил через скрипт в ip-up.d, который выставляет правило и маршрут для предыдущего активного подключения. [em] ip rule add from $IPL1 table $TABLE1; ip route add default via $IPR1 table $TABLE1; ip rule delete table $TABLE2; ip route delete table $TABLE2; ip route flush cache;[/em] |
Текущее время: 00:46. Часовой пояс GMT +3. |