привязывать программное обеспечение к различным сетевым интерфейсам

37

У меня есть два разных сетевых интерфейса, подключенных к 2 сетям. Один - это eth0, а другой - wlan0. Как я могу сказать программному обеспечению использовать только определенный интерфейс?

По сути, я хочу, чтобы Firefox использовал eth0, потому что это университетская локальная сеть, и мне нужно переходить на сайты интрасети, другая - это сеть Wi-Fi, открытая для Интернета, и я хочу привязать ее к Chrome.

Я работаю и мне нужно использовать интранет. Поэтому eth0 - это мой выбор, но eth0 - это интрасеть без доступа в интернет (очевидно). Так как я хочу доступ в интернет, я подключен к wlan0 (университетский Wi-Fi для студентов).

Проблема в том, что, если я подключился, иногда браузер ищет www.stackoverflow.com, используя eth0. Поэтому я хотел назначить браузер для использования только определенного интерфейса.

Dierre
источник
Разве маршрутизация не является лучшим решением для ваших проблем? Я имею в виду, что соединения с ubuntu.stackexchange.com должны использовать один и тот же интерфейс из любой программы.
Хавьер Ривера

Ответы:

23

Вы не можете привязать клиентское программное обеспечение к определенным сетевым интерфейсам, но вы можете сказать ядру, что вы хотите использовать только один сетевой интерфейс для некоторых IP-адресов, а другой - для всего остального. Это называется «маршрутизацией» и может быть настроено с помощью команд /sbin/routeи /sbin/ip.

Если я правильно прочитал ваш вопрос, вы хотите подключиться к IP-адресам интрасети через интерфейс eth0и к Интернету через интерфейс wlan0.

Если вы запустите команду ip route list, вы должны увидеть вывод, подобный следующему (цифры будут другими, а также вы можете иметь больше строк):

$ ip route list
10.60.44.0/25 dev eth0  proto kernel  scope link  src 10.60.44.39  metric 1 
192.168.80.0/21 dev wlan0  proto kernel  scope link  src 192.168.84.122  metric 2 
[...]
default via 10.60.44.1 dev eth0  proto static 

Первые две строки сообщают вам о сетях, подключенных к интерфейсам, eth0и wlan0: сетевой трафик, направленный на компьютеры в этих сетях, будет направляться им напрямую через соответствующий интерфейс.

Последняя строка говорит вам, что такое «маршрут по умолчанию»: если ваш компьютер хочет общаться с компьютером в сети, к которой он не подключен (например, к серверу stackoverflow.com), он будет маршрутизировать трафик через eth0, проходя через хост 10.60.44.1( называется "шлюз по умолчанию").

Таким образом, для маршрутизации интернет-трафика wlan0вы должны убедиться, что последняя строка в ip route listвыводе выглядит примерно так:

default via A.B.C.D dev wlan0 proto static

где A.B.C.DIP-адрес шлюза в беспроводной локальной сети. Если вывод не содержит «dev wlan0», вы можете изменить его с помощью команды:

sudo ip route change to default dev wlan0 via A.B.C.D

Вы можете узнать правильный A.B.C.Dдля wlan0двух способов:

  1. Загляните в каталог /var/lib/dhcp3/: вы должны найти несколько dhclient-...-wlan0.leaseфайлов. Откройте самый последний и найдите строку со строкой option routerв ней: остальная часть строки сообщает вам IP-адрес A.B.C.D.

  2. Спросите местных администраторов сети. (Вероятно, лучшее, что нужно сделать в любом случае.)

С этой конфигурацией вы сможете:

  • просматривать Интернет через wlan0
  • просмотрите свой Интранет eth0, если он находится в одной сети .

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

Риккардо Мурри
источник
Просто из любопытства: что если я захочу привязать днс (чтобы включить субдомены), а не IP-адреса?
Dierre
1
@dierre Короче говоря: вы не можете, маршрутизация основана на IP-адресах. Длинная история начинается с рассказа о том, что маршрутизация - это вещь сетевого уровня 3, поэтому она даже не узнает об именах DNS, разрешение которых происходит дальше по стеку сетевых протоколов ...
Риккардо Мурри,
да, да, я не имел в виду с маршрутизацией. Я имею в виду в целом. Это можно сделать? Привязка DNS к сетевым интерфейсам?
dierre
@dierre Что именно ты хочешь сделать? Заставить DNS-сервер отвечать только по определенному сетевому интерфейсу? Или DNS-клиент (т. Е. Разрешение DNS) использует только выбранный интерфейс?
Риккардо Мурри
1
@Riccardo Murri: ubuntu.stackexchange.com/questions/4988/… et voilà
dierre
2

«ip netns» создает сетевые пространства имен. Затем вы можете создать виртуальные интерфейсы (ip link add ... veth) и связать их с пространствами имен.

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

Затем вы можете запускать команды в этом пространстве имен, которые будут использовать созданное пространство имен .. "ip netns exec NAME cmd ..."

Источник: http://manpages.ubuntu.com/manpages/saucy/en/man8/ip-netns.8.html

olivervbk
источник