2

Я часто использую Wi-Fi из некоторых общедоступных сетей, которые не поддерживают некоторые протоколы (например, торрент или IRC - далее я буду говорить только о IRC). Если я хочу использовать один из этих протоколов, я должен использовать свое телефонное соединение 3G (через интерфейс usb0 ).

Я хотел бы оставаться подключенным к Wi-Fi для моей веб-навигации (поэтому используйте классический интерфейс wlan0), но используйте другой интерфейс (здесь usb0) для некоторых программ (часто только для weechat, клиент CLI IRC).

Таким образом, у меня есть два (связанных) вопроса:

  • как одновременно подключиться к двум интерфейсам, чтобы все не испортилось?
  • Как настроить одно программное обеспечение для использования интерфейса, а другое программное обеспечение для использования другого интерфейса? Поскольку weechat - это программное обеспечение CLI, возможно, мне просто нужно объявить определенную переменную среды; но как быть уверенным, что Firefox не использует usb0 вместо wlan0 ?

2 ответа2

2

Самое простое решение - иметь две отдельные таблицы маршрутизации; один из них (wlan0 , в вашем случае) будет по умолчанию, в то время как мы можем использовать хитрый прием, чтобы заставить определенное приложение использовать таблицу не по умолчанию.

Сначала создайте две таблицы (замените NAME1 именем, имеющим для вас смысл, то же самое с IP1, DEV1 и т.д.):

echo 201 NAME2 >> /etc/iproute2/rt_tables

Добавьте шлюз к каждой таблице маршрутизации (при необходимости):

ip route add NET1 dev DEV1 src SRC1 table main
ip route add NET2 dev DEV2 src SRC2 table NAME2

Тогда маршрут по умолчанию:

ip route add default via IP1 table main
ip route add default via IP2 table NAME2

Затем правила выбора таблицы маршрутов на основе адреса источника:

ip rule add from IP1 table main
ip rule add from IP2 table NAME2

Теперь нам нужно заставить weechat использовать IP2.Мы делаем это путем создания нового модуля связывания. Это тривиально, в ссылке есть простые инструкции. После того, как вы скомпилировали модуль и поместили в /usr/lib , вы вводите команду:

 BIND_ADDR=IP2 LD_PRELOAD=/usr/lib/bind.so weechat

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

2

Если вы определяете две подсети, например:

  • 192.168.1.x / 255.255.255.0 - wlan0
  • 192.168.2.x / 255.255.255.0 - usb0

Если вы определяете шлюз только для wlan0 , весь сетевой трафик, адресованный непосредственно к 192.168.2.x, проходит через wlan0 .

Вы можете направлять сетевой трафик на определенные IP-адреса через интерфейс usb0 . Вы также можете направить трафик через определенный интерфейс для процесса в Linux .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .