Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Как переключить сетевой интерфейс?  (Прочитано 2038 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Wade

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Добрый день - знатоки и новички, у меня возник вопрос.

Ситуация:
Я купил VDS, выбрал ubuntu 8.04 в качестве дистрибутива. У меня три айпишника, которые находятся на venet0:0, venet0:1 и venet0:2 соответственно.

В идеале нужна возможность переключать интерфейсы без /etc/init.d/networking restart

Можно ли это сделать через route? Сейчас у меня так:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.0.2.1       *               255.255.255.255 UH    0      0        0 venet0
default         192.0.2.1       0.0.0.0         UG    0      0        0 venet0

Я пробовал удалить default и записать новый, при удалении у меня рвется ssh :)
Пробовал add default с venet0:0, в route появляется второй default почему-то только с первым номером, т.е. появляется как venet0.

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

Спасибо.

Конфигурация интерфейсов такая:

# Auto generated interfaces
auto lo
iface lo inet loopback

auto venet0
iface venet0 inet static
        address 127.0.0.1
        netmask 255.255.255.255
        broadcast 0.0.0.0
        up route add -net 192.0.2.1 netmask 255.255.255.255 dev venet0
        up route add default gw 192.0.2.1
auto venet0:0
iface venet0:0 inet static
        address 188.xxx.xxx.xxx
        netmask 255.255.255.255
        broadcast 0.0.0.0

auto venet0:1
iface venet0:1 inet static
        address 92.xxx.xxx.xxx
        netmask 255.255.255.255
        broadcast 0.0.0.0

....

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Как переключить сетевой интерфейс?
« Ответ #1 : 10 Март 2010, 21:25:50 »
Пробовал add default с venet0:0, в route появляется второй default почему-то только с первым номером, т.е. появляется как venet0.
Верно. Интерфейс то один - venet0. Только адрес источника другой. Посмотри вывод ip route, он более полон.

Я пробовал удалить default и записать новый, при удалении у меня рвется ssh :)
Не удивительно. Маршрут то убил ;)

В общем либо сначала новый добавляй а потом старый три. Либо делай это одной транзакцией, пока еще ssh не отключился. Команды можно через точкузапятую (;) писать.

Пользователь решил продолжить мысль 10 Март 2010, 21:27:10:
Общая задача - обращаться с помощью скрипта с разных ip адресов.
На каком языке пишется скрипт?

Оффлайн Wade

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Как переключить сетевой интерфейс?
« Ответ #2 : 10 Март 2010, 21:36:27 »
На каком языке пишется скрипт?

На питоне. В идеале, конечно, охота через питон переключать эти виртуальные интерфейсы, но не факт что это возможно.

Как грубое решение - я попробую поменять порядок виртуалов в interfaces и перезапустить сеть. м.б. сработает.

В общем либо сначала новый добавляй а потом старый три. Либо делай это одной транзакцией, пока еще ssh не отключился. Команды можно через точкузапятую (;) писать.

Попробую, спасибо.

Пользователь решил продолжить мысль 10 Март 2010, 21:43:20:


Как грубое решение - я попробую поменять порядок виртуалов в interfaces и перезапустить сеть. м.б. сработает.



Вот так работает. Но хотелось бы конечно без перезагрузки.
« Последнее редактирование: 10 Март 2010, 21:43:20 от Wade »

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Как переключить сетевой интерфейс?
« Ответ #3 : 10 Март 2010, 22:09:15 »
Я тут вот чего думаю. Хоть на питоне я не программил, но в сях, и в похапэ при создании сокета можно биндить (.bind) к определённому адресу. Возможно только маршруты надо будет прописать. А возможно, что и не надо ничего прописывать, что скорее всего.

Оффлайн technic1

  • Участник
  • *
  • Сообщений: 202
    • Просмотр профиля
Re: Как переключить сетевой интерфейс?
« Ответ #4 : 10 Март 2010, 22:28:56 »
как только удаляешь роут, то инет пропадает соответственно падает ssh и все процессы которые были запущены тоже прерываются.
Надо так:

script.sh
#!/bin/bash
route del default
case $1 in
1)
route add default gw 188.xxx.xxx.xxx
;;
2)
#второе
;;
3)
#третье
;;
esac
exit 0

а потом ./script.sh 1 &
вроде так....

Оффлайн Wade

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Как переключить сетевой интерфейс?
« Ответ #5 : 10 Март 2010, 22:54:43 »
Я тут вот чего думаю. Хоть на питоне я не программил, но в сях, и в похапэ при создании сокета можно биндить (.bind) к определённому адресу. Возможно только маршруты надо будет прописать. А возможно, что и не надо ничего прописывать, что скорее всего.

О! Тема, кстати. Возможно и на PHP реализую, если тема прокатит.

Мне чем python понравился - стройный язык и там поточность есть.

Хм... может правда попробовать через сокеты....

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Как переключить сетевой интерфейс?
« Ответ #6 : 10 Март 2010, 22:56:03 »
Да и в пистоне тоже должно быть. Это же основные стандартные функции *nix сокетов.

Пользователь решил продолжить мысль 10 Март 2010, 22:58:48:
и там поточность есть.
Знаю точно, что в похапэ можно форкнуть программу не напрягаясь, почти как в cи. А вот тредов по моему еще не придумали на него.
« Последнее редактирование: 10 Март 2010, 22:58:48 от Mam(O)n »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 25973
    • Просмотр профиля
Re: Как переключить сетевой интерфейс?
« Ответ #7 : 10 Март 2010, 23:25:05 »
Я тут вот чего думаю. Хоть на питоне я не программил, но в сях, и в похапэ при создании сокета можно биндить (.bind) к определённому адресу. Возможно только маршруты надо будет прописать. А возможно, что и не надо ничего прописывать, что скорее всего.

О! Тема, кстати. Возможно и на PHP реализую, если тема прокатит.

Мне чем python понравился - стройный язык и там поточность есть.

Хм... может правда попробовать через сокеты....
PHP не менее строен. Это вопрос использования, а не языка. (Если только не брать таких выблядков, как Lua)

и там поточность есть.
Знаю точно, что в похапэ можно форкнуть программу не напрягаясь, почти как в cи. А вот тредов по моему еще не придумали на него.
Я думаю, если озадачиться конкретным вопросом, решение найдётся. Как минимум управление процессами в нём идет стандартной библиотекой.
« Последнее редактирование: 10 Март 2010, 23:27:52 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Wade

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Как переключить сетевой интерфейс?
« Ответ #8 : 10 Март 2010, 23:54:14 »
technic1, спасибо за подсказку! Используя Вашу помощь, техподдержки и Mam(O)n, я-таки проблему решил.

Проблема решалась просто:
route add default gw xxx.xxx.xxx.xxx , где последнее - ip адрес виртуального интерфейса, после этого все заработало!
либо в одной транзакции, либо в скрипте - оба варианта работают!

И гораздо удобнее полного перезапуска сети, т.к. быстрее происходит!!!

Спасибо, ребята :)

 

Страница сгенерирована за 0.061 секунд. Запросов: 22.