Интернет с двух сетевых карт на одном компьютере

Статус: Offline
Реєстрація: 18.03.2009
Повідом.: 26744
Интернет с двух сетевых карт на одном компьютере

Необходимо простое решение, чтобы можно было использовать Интернет с двух сетевых карт на одном компьютере с Debian 6.

В наличии:
1) два роутера (D-Link DIR-300 и TP-Link TL-WR1043ND), каждый подключен к своему провайдеру, каждый получает интернет по DHCP.
2) компьютер типа десктоп с двумя сетевыми картами (встроенная и PCI-ная), каждая подключена к своему роутеру.
3) На компьютере - операционная система Debian 6, обе сетевые карты настроены на автоматическое получение IP адреса, которые выдают роутеры.

Сейчас для Интернета работает по-умолчанию PCI-ная сетевая карта, получающая Интернет от DIR-300, тем не менее, работает печать на сетевой принтер, подключённый к другому роутеру (TP-Link) через другую сетевую карту. (т.е. обе карты явно активны)

Если отключить кабель от роутера D-Link, интернет автоматически заработает через роутер TP-Link, при подключении обратно - опять заработает через D-Link. НО: если интернет пропадёт без отключения кабеля, то будет тупо ошибка загрузки страниц.

В идеале, хотелось бы чтобы компьютер автоматически переключал Интернет на другую сетевую карту, при пропадании сети в текущей (например, пинговался бы какой-нибудь надёжный сервер, типа Гугла), и возвращался назад при каждой перезагрузке.

А для начала, как наиболее простой вариант, хочется чтобы была возможность вручную переключить сетевую карту по-умолчанию какой-нибудь кнопочкой в трее (чтобы простой юзер смог это сделать сам, без помощи админов). Но чтобы после перезагрузки всегда была по-умолчанию сетевая карта eth1 (которая PCI).

Для второго варианта, Я хотела воспользоваться встроенным в KDE Network Manager'ом, только вот не пойму как он работает:
На приведенном скриншоте видно, что в Network Manager'е нет ни одной проводной сети в настройках, хотя он почему-то их отображает. Если их добавить вручную, появится еще лишние пункты в поп-ап меню в трее:

attachment.php


И самое главное: как переключаться между сетевыми картами? На скриншоте видно, что красным сердечком отмечена сетевая карта по-умолчанию, но если нажать на первую сетевую карту (Ifupdown eth0), то он похоже только перезапускает её, и говорит eth0 is now connected, но по-умолчанию всё равно остаётся вторая сетевая карта (eth1).

Может есть другая программка для трея, чтобы в пару кликов переключать сетевую карту по-умолчанию?

Если нажать на само красное сердечко, то выскакивает окно, как на этом скриншоте:

attachment.php


(И кто-то мне еще доказывал, что Debian стабильная система :D)
И ничего естественно не переключается. Так как тогда переключать сетевую карту по-умолчанию для Интернета?

Если кому надо подробности, конфиги вот:
/etc/NetworkManager/NetworkManager.conf сказав(ла):
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=true
/etc/network/interfaces сказав(ла):
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
Код:
root@Athlon-64:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:13:d4:d4:28:36  
          inet addr:192.168.1.141  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::213:d4ff:fed4:2836/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:29448 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29876 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:15190388 (14.4 MiB)  TX bytes:2568642 (2.4 MiB)
          Interrupt:21 Base address:0xe000 

eth1      Link encap:Ethernet  HWaddr fc:75:16:5e:fa:37  
          inet addr:192.168.0.102  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::fe75:16ff:fe5e:fa37/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37386 errors:0 dropped:0 overruns:0 frame:0
          TX packets:38255 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5593209 (5.3 MiB)  TX bytes:4275005 (4.0 MiB)
          Interrupt:18 Base address:0x6000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2789 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2789 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:162025 (158.2 KiB)  TX bytes:162025 (158.2 KiB)

Если кто может предложить решение идеального случая (чтобы компьютер сам переключал сетевую карту по-умолчанию при пропадании интернета в текущей), будет совсем замечательно. Только проблема еще в том, что обе сетевые карты получают IP динамически, так что роутинг настроить будет тут очень непросто.
 
Останнє редагування:
когда-то для заказчика делал объединение двух интернетов в один широкий канал по этой статье _
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
.
всё объединилось и переключалось, но заказчик отказался от объединения т.к. были глюки с инетом с такой технологией, осталось работать только переключение.
 
А хули там делать? Юзай iproute, ставь 2 шлюза с разной метрикой и всё. Тот у которого метрика меньше - будет по дефолту. Если через него пакеты не идут - то автоматом заюзается второй
 
когда-то для заказчика делал объединение двух интернетов в один широкий канал по этой статье _
Тільки зареєстровані користувачі бачать весь контент у цьому розділі
.
всё объединилось и переключалось, но заказчик отказался от объединения т.к. были глюки с инетом с такой технологией, осталось работать только переключение.
Я тоже видела эту статью, но там немного другое: там внутренняя сеть (LAN), и две WAN, одна из которых вообще ppp соединение. К тому же, там так много скриптов без каких-либо описаний, что Я думаю мне они не подойдут - надо сильно кастомизировать, а Я не знаю что и где там менять. Тем более, что IP адреса у меня динамические (получаемые автоматом от роутера), поэтому не известно что и как прописывать, чтобы оно работало.
А хули там делать? Юзай iproute, ставь 2 шлюза с разной метрикой и всё. Тот у которого метрика меньше - будет по дефолту. Если через него пакеты не идут - то автоматом заюзается второй
Так всё красиво написано, только вот не работает это:
Код:
root@Athlon-64:~$ Юзай iproute, ставь 2 шлюза с разной метрикой и всё. Тот у которого метрика меньше - будет по дефолту. Если через него пакеты не идут - то автоматом заюзается второй
Юзай: command not found
Надо что-то поконкретнее.
 
А хули там делать? Юзай iproute, ставь 2 шлюза с разной метрикой и всё. Тот у которого метрика меньше - будет по дефолту. Если через него пакеты не идут - то автоматом заюзается второй

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

в таком случае понадобится шатдаун интерфейса или вынимани е патч-корда

Я тоже видела эту статью, но там немного другое: там внутренняя сеть (LAN), и две WAN, одна из которых вообще ppp соединение. К тому же, там так много скриптов без каких-либо описаний, что Я думаю мне они не подойдут - надо сильно кастомизировать, а Я не знаю что и где там менять. Тем более, что IP адреса у меня динамические (получаемые автоматом от роутера), поэтому не известно что и как прописывать, чтобы оно работало.

думаю, что ты врядли найдешь GUI приложение с большой кнопкой "СДЕЛАТЬ ЗАЕБИСЬ".

включай голову и вперед - скрипты те не сложные совсем.
 
думаю, что ты врядли найдешь GUI приложение с большой кнопкой "СДЕЛАТЬ ЗАЕБИСЬ".
Мне надо две кнопки - Киевстар и Макснет :D
И еще мне не нравится это:
всё объединилось и переключалось, но заказчик отказался от объединения т.к. были глюки с инетом с такой технологией, осталось работать только переключение.
Так что лучше пусть что-нибудь попроще, но зато без глюков.

включай голову и вперед - скрипты те не сложные совсем.
Но и не такие простые. К тому же, Я не знаю куда потом эти скрипты пихать, когда они будут написаны. Они требуют рут прав для запуска? Мне нужно чтобы всё работало для обычного юзера без лишних запросов паролей. Чтобы загрузив компьютер, всё сразу работало без запуска скриптов и ввода рутового пароля.

Кстати, а можно сделать так, чтобы один браузер использовал одну сетевую карту, а другой - другую? Например, какие-нибудь параметры в командную строку прописать.
Типа: запускаешь Оперу - работает Макснет, запускаешь Хром - работает Киевстар.
 
Кстати, а можно сделать так, чтобы один браузер использовал одну сетевую карту, а другой - другую? Например, какие-нибудь параметры в командную строку прописать.
Типа: запускаешь Оперу - работает Макснет, запускаешь Хром - работает Киевстар.
нет, нельзЯ.
 
Жалко. А тогда виджет переключения в трее? Или как должен работать тот же Network Manager? Может его можно как-то сконфигурировать, чтобы можно было переключать дефолтную сетевую карту в поп-ап меню в трее?
 
Но и не такие простые. К тому же, Я не знаю куда потом эти скрипты пихать, когда они будут написаны. Они требуют рут прав для запуска? Мне нужно чтобы всё работало для обычного юзера без лишних запросов паролей. Чтобы загрузив компьютер, всё сразу работало без запуска скриптов и ввода рутового пароля.

в провославном дебиане это делается так:
добавление скрипта из /etc/init.d/ в афтозагрузку :

update-rc.d <script_name.sh> defaults

Жалко. А тогда виджет переключения в трее? Или как должен работать тот же Network Manager? Может его можно как-то сконфигурировать, чтобы можно было переключать дефолтную сетевую карту в поп-ап меню в трее?

вряд ли
 
А разве так сложно тогда написать скрипт который будет вызываться по крону и пинговать тот же гугл? А при пропадании пинга - переключать гейтвей? Щас попробую накопать свой старый скрипт которым я пользовался... Или доку по которой делал. Я ж тоже тут такую тему с полгода назад размещал

Тільки зареєстровані користувачі бачать весь контент у цьому розділі
 
route delete default и route add default не спасут?

опс, опоздал...
может проще менять шлюз по умолчанию?
 
Ну у меня скрипт так и делал. Вызывался по крону, пинговал через основной канал, если пинг идёт - то проверял является ли роут через основной шлюз дефолтным. Если нет - ставил дефолтным. Если пинг не идёт - проверял пинг через резервный канал. Если идёт - менял дефолтный роут на резервный. И так каждую минуту
 
как два пальца))) но без гуя!)
 
Код:
#!/bin/sh
INTERVAL=10
PACKETS=1
USINGWAN=0
WAN1=eth0
WAN2=eth1
WAN1GW=192.168.0.1
WAN2GW=192.168.1.1
PINGTARGET=8.8.8.8
while sleep $INTERVAL
do
        TARGET=`route | awk '/default/ {print $2}'`
        if [ "$WAN1GW" = "$TARGET" ]; then
            USINGWAN=1;
        else if [ "$WAN2GW" = "$TARGET" ]; then
            USINGWAN=2;
            fi;
        fi
        RET=`ping -c $PACKETS $PINGTARGET 2>/dev/null | awk '/received/ {print $4}'`
        if [ "$RET" -ne "$PACKETS" ]; then
             if [ "$USINGWAN" = "1" ]; then
# тут меняем основной шлюз и DNS сервер на нужные
                route delete default
                route add default gw $WAN2GW  $WAN2
                USINGWAN=2
                echo "Changed active WAN port to 2!"
             else
# тут меняем основной шлюз и DNS сервер на нужные
                route delete default
                route add default gw $WAN1GW  $WAN1
                USINGWAN=1
                echo "Changed active WAN port to 1!"
            fi
         fi
done;

как-то так.

зы: проверить негде
 
Код:
#!/bin/sh
INTERVAL=10
PACKETS=1
USINGWAN=0
WAN1=eth0
WAN2=eth1
WAN1GW=192.168.0.1
WAN2GW=192.168.1.1
PINGTARGET=8.8.8.8
while sleep $INTERVAL
do
        TARGET=`route | awk '/default/ {print $2}'`
        if [ "$WAN1GW" = "$TARGET" ]; then
            USINGWAN=1;
        else if [ "$WAN2GW" = "$TARGET" ]; then
            USINGWAN=2;
            fi;
        fi
        RET=`ping -c $PACKETS $PINGTARGET 2>/dev/null | awk '/received/ {print $4}'`
        if [ "$RET" -ne "$PACKETS" ]; then
             if [ "$USINGWAN" = "1" ]; then
# тут меняем основной шлюз и DNS сервер на нужные
                route delete default
                route add default gw $WAN2GW  $WAN2
                USINGWAN=2
                echo "Changed active WAN port to 2!"
             else
# тут меняем основной шлюз и DNS сервер на нужные
                route delete default
                route add default gw $WAN1GW  $WAN1
                USINGWAN=1
                echo "Changed active WAN port to 1!"
            fi
         fi
done;

как-то так.

зы: проверить негде

Это скрипт надо в файл набрать и запустить из консоли? Что-то тут менять надо, или нет?
 
Ух, ёёёёё.... Что такое крон знаем?

У меня работал такой скрипт

#!/bin/bash

# опрашиваемый узел основного провайдера
HOST=8.8.8.8

# шлюз к основному провайдеру
GW1=192.168.88.1
# шлюз к резервному провайдеру
GW2=192.168.0.1

ping -q -I eth3 -c 3 ${HOST} > /dev/null 2>&1

if [ $? -eq 0 ]; then
ip route change default via ${GW1}
else
ip route change default via ${GW2}
fi

Вызывался по крону каждую минуту. Тут правда логика попроще чем я описывал, но работал вполне неплохо
 
для вашего случая
Код:
...
WAN1GW=192.168.1.1
WAN2GW=192.168.0.1
...
если в resolv.conf прописать адреса
Код:
nameserver 192.168.0.1
nameserver 192.168.1.1
то dns менять не нужно.

да, набрать, сохранить, добавить в автозагрузку.

зы: вы хотите сами сделать или что-бы кто-то сделал?
 
Ещё можно в автозагрузку втулить такое


#!/bin/sh

TABLE1=prov_1
M1=100
IP1=192.168.2.2
GATE1=192.168.2.1

TABLE2=prov_2
M2=101
IP2=192.168.0.2
GATE2=192.168.0.1

ip route flush table $TABLE1 # Необязательно. Очищаем маршрутизацию для первой таблицы
ip route add default via $GATE1 table $TABLE1 # На пакеты из первой таблицы отвечать чере$
ip route del default via $GATE1 # Необязательно. Очищаем маршрутизацию по умолчанию
ip route add default via $GATE1 metric $M1 # Обязательно только для одного из интерфейсов$
ip rule del table $TABLE1 # Необязательно. Очищаем первую таблицу
ip rule add from $IP1 table $TABLE1 # Пакеты полученные на первый IP помещать в первую та$

ip route flush table $TABLE2
ip route add default via $GATE2 table $TABLE2
ip route del default via $GATE2
ip route add default via $GATE2 metric $M2
ip rule del table $TABLE2
ip rule add from $IP2 table $TABLE2

В результате получится 2 роута с разной метрикой, у которого меньше - тот дефолтный
И рулить инетами придётся не сменой гейтвея, а сменой метрики
 
Ух, ёёёёё.... Что такое крон знаем?
Батарейка такая на 9 вольт? :D

У меня работал такой скрипт

#!/bin/bash

# опрашиваемый узел основного провайдера
HOST=8.8.8.8

# шлюз к основному провайдеру
GW1=192.168.88.1
# шлюз к резервному провайдеру
GW2=192.168.0.1

ping -q -I eth3 -c 3 ${HOST} > /dev/null 2>&1

if [ $? -eq 0 ]; then
ip route change default via ${GW1}
else
ip route change default via ${GW2}
fi

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


для вашего случая

Code:
...
WAN1GW=192.168.1.1
WAN2GW=192.168.0.1
...
если в resolv.conf прописать адреса

Code:
nameserver 192.168.0.1
nameserver 192.168.1.1
то dns менять не нужно.

да, набрать, сохранить, добавить в автозагрузку.

зы: вы хотите сами сделать или что-бы кто-то сделал?
ОК, проверю сегодня вечером. Твой скрипт надо 1 раз запускать в автозагрузке, или тоже надо по расписанию каждую минуту?
Ещё можно в автозагрузку втулить такое


#!/bin/sh

TABLE1=prov_1
M1=100
IP1=192.168.2.2
GATE1=192.168.2.1

TABLE2=prov_2
M2=101
IP2=192.168.0.2
GATE2=192.168.0.1

ip route flush table $TABLE1 # Необязательно. Очищаем маршрутизацию для первой таблицы
ip route add default via $GATE1 table $TABLE1 # На пакеты из первой таблицы отвечать чере$
ip route del default via $GATE1 # Необязательно. Очищаем маршрутизацию по умолчанию
ip route add default via $GATE1 metric $M1 # Обязательно только для одного из интерфейсов$
ip rule del table $TABLE1 # Необязательно. Очищаем первую таблицу
ip rule add from $IP1 table $TABLE1 # Пакеты полученные на первый IP помещать в первую та$

ip route flush table $TABLE2
ip route add default via $GATE2 table $TABLE2
ip route del default via $GATE2
ip route add default via $GATE2 metric $M2
ip rule del table $TABLE2
ip rule add from $IP2 table $TABLE2

В результате получится 2 роута с разной метрикой, у которого меньше - тот дефолтный
И рулить инетами придётся не сменой гейтвея, а сменой метрики
Это весь скрипт, или он только назначает метрику, а потом надо еще другим скриптом рулить метрикой?
 
Твой скрипт надо 1 раз запускать в автозагрузке, или тоже надо по расписанию каждую минуту?
Запускается один раз.
INTERVAL - частота проверки.
И, наверное, нужно дописать проверку для возврата на основной (первый) канал при востановлении связи на нем.
 
Назад
Зверху Знизу