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

Вопрос вдохновлен здесь

Сценарий

Я живу в доме недалеко от моего университета. Тем не менее, студенты Wi-Fi могут добраться до моего дома, поэтому я обычно использую это даже из дома. Проблема в том, что, поскольку Wi-Fi управляется университетскими системными администраторами, невозможно подключиться к некоторым DNS (например, к файлам для загрузки файлов, таким как Rapidshare или Megaupload). Хорошей новостью является то, что у меня также есть интернет-ключ USB, который я могу использовать, но, по сути, это афера, как и все интернет-мобильные планы в Италии, потому что после 20 ГБ они отключат мою пропускную способность.

Наконец ... вопрос

Для оптимизации использования полосы пропускания я хочу сказать Ubuntu: если я подключусь к * .domain.com, используйте этот интерфейс, в противном случае используйте другой. Ради этого вопроса давайте назовем wifi wlan0 и usb internet key ppp0.

П.С.: это действительно конкретный вопрос. Не предлагайте такие вещи, как «использовать Tor, чувак». Я не хочу злоупотреблять Wi-Fi университета. Я на самом деле не знаю, возможно ли это даже с Tor ... но все же ... :)

6
задан 12 April 2017 в 10:23

2 ответа

Если ваш пример домена «* .domain.com» имеет блок статического IP-адреса, вы можете добавить статический маршрут в таблицу маршрутизации, например:

me@thiscomputer:~$ whois domain.com

Это должно дать вам некоторую контактную информацию для владельцы domain.com. Вы можете связаться с ними, чтобы узнать их сетевой адрес. Этот адрес, вероятно, будет в формате CIDR, где: 192.168.0.0/24 == "Набор IP-адресов от 192.168.0.1 до 192.168.0.254". Число после косой черты - это количество битов в сетевой части адреса. Это эквивалентно маске сети 255.255.255.0.

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

Имея информацию об адресе, вы можете добавить статический маршрут следующим образом:

me@thiscomputer:~$ sudo ip route add inet 10.0.0.0/24 dev ppp0

IRL, вероятно, не будет работать точно так же, обратитесь к странице man для команды ip или команды route (это разные команды, которые делают одно и то же, route более старый и входит в coreutils), чтобы понять, как это сделать правильно.

Если адрес домена не является статическим (например, сконфигурирован DHCP), что маловероятно для сайта с постоянной записью A, вы можете использовать вышеуказанный метод в задании cron, выполняемом с некоторым интервалом, меньшим, чем аренда DHCP сайта. Вам, вероятно, придется связаться с администратором сайта, чтобы получить эту информацию, или просто поэкспериментировать. Если работа выполняется один раз в день, это, вероятно, будет достаточно частым.

0
ответ дан 12 April 2017 в 10:23

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

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

Я думаю, что любое решение будет связано с веб-прокси. (Я предполагаю, что для других протоколов вы всегда будете использовать определенную сеть.) Сам веб-прокси не будет делать ничего, кроме запросов ретрансляции, так что любой будет делать: большой (squid), один специализированный для кэширования (wwwoffle), простой крошечный (tinyproxy) и т. д. (aptitude search web proxy; aptitude search http proxy).

Теперь, для решения, которое я предлагаю (могут быть и другие способы), не настраивайте свой прокси-сервер каким-либо особым образом (т.е. сделайте так, чтобы он передавал все запросы), а запустите его как выделенный пользователь: создайте пользователя alt-routed без каких-либо особых привилегий, и настройте прокси для запуска от имени этого пользователя.

Затем сделайте wlan0 маршрут по умолчанию. Затем установите iptables и установите пакет iproute. Правила, которые вы хотите, - направлять исходящие пакеты, которые пришли из процесса, выполняющегося как alt-route-user, в интерфейс ppp0. Прямого способа сделать это не существует, но это можно сделать с помощью:

  1. специальной маркировки (с отметкой 1) исходящих пакетов от пользователя alt-routed;
  2. с использованием другой маршрутизации таблица (таблица 1) для пакетов, помеченных этой меткой;
  3. маршрутизация всего на альтернативный интерфейс в этой таблице.

Если я правильно понимаю документацию, это должно сработать:

iptables -t mangle -A OUTPUT -m owner --uid-owner alt-routed -o wlan0 -j MARK --set-mark 1
ip rule add fwmark 1 table 1
ip route add 0.0.0.0/0 table 1 dev ppp0

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

Любая программа, которую вы запускаете как alt-routed, получит доступ к Интернету через ppp0 вместо стандартной wlan0.

Наконец, настройте свои браузеры так, чтобы они проходили через прокси для сайтов, к которым вы хотите получить доступ через ppp0, а не проходили через прокси для сайтов, к которым вы хотите получить доступ через wlan0. Есть несколько способов сделать это, в зависимости от того, на какой браузер (ы) вы нацеливаетесь, и хотите ли вы иметь графический интерфейс или хотите редактировать файл конфигурации.

0
ответ дан 12 April 2017 в 10:23

Другие вопросы по тегам:

Похожие вопросы: