Вопрос вдохновлен здесь
Сценарий
Я живу в доме недалеко от моего университета. Тем не менее, студенты Wi-Fi могут добраться до моего дома, поэтому я обычно использую это даже из дома. Проблема в том, что, поскольку Wi-Fi управляется университетскими системными администраторами, невозможно подключиться к некоторым DNS (например, к файлам для загрузки файлов, таким как Rapidshare или Megaupload). Хорошей новостью является то, что у меня также есть интернет-ключ USB, который я могу использовать, но, по сути, это афера, как и все интернет-мобильные планы в Италии, потому что после 20 ГБ они отключат мою пропускную способность.
Наконец ... вопрос
Для оптимизации использования полосы пропускания я хочу сказать Ubuntu: если я подключусь к * .domain.com, используйте этот интерфейс, в противном случае используйте другой. Ради этого вопроса давайте назовем wifi wlan0
и usb internet key ppp0
.
П.С.: это действительно конкретный вопрос. Не предлагайте такие вещи, как «использовать Tor, чувак». Я не хочу злоупотреблять Wi-Fi университета. Я на самом деле не знаю, возможно ли это даже с Tor ... но все же ... :)
Если ваш пример домена «* .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 сайта. Вам, вероятно, придется связаться с администратором сайта, чтобы получить эту информацию, или просто поэкспериментировать. Если работа выполняется один раз в день, это, вероятно, будет достаточно частым.
Есть ли веб-прокси в вашей университетской сети? Если это так, используйте его для обычного просмотра веб-страниц, но не для доступа к заблокированным сайтам.
1124 В противном случае это возможно, но не очень легко. Маршрутизация (то есть принятие решения, куда отправлять пакеты) выполняется на уровне IP , который знает только об IP-адресах. С другой стороны, ваши требования к маршрутизации основаны на имени хоста, но уровень, который знает об именах, не контролирует маршрутизацию.
Я думаю, что любое решение будет связано с веб-прокси. (Я предполагаю, что для других протоколов вы всегда будете использовать определенную сеть.) Сам веб-прокси не будет делать ничего, кроме запросов ретрансляции, так что любой будет делать: большой (squid
), один специализированный для кэширования (wwwoffle
), простой крошечный (tinyproxy
) и т. д. (aptitude search web proxy; aptitude search http proxy
).
Теперь, для решения, которое я предлагаю (могут быть и другие способы), не настраивайте свой прокси-сервер каким-либо особым образом (т.е. сделайте так, чтобы он передавал все запросы), а запустите его как выделенный пользователь: создайте пользователя alt-routed
без каких-либо особых привилегий, и настройте прокси для запуска от имени этого пользователя.
Затем сделайте wlan0
маршрут по умолчанию. Затем установите iptables и установите пакет iproute
. Правила, которые вы хотите, - направлять исходящие пакеты, которые пришли из процесса, выполняющегося как alt-route-user
, в интерфейс ppp0
. Прямого способа сделать это не существует, но это можно сделать с помощью:
alt-routed
; Если я правильно понимаю документацию, это должно сработать:
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
. Есть несколько способов сделать это, в зависимости от того, на какой браузер (ы) вы нацеливаетесь, и хотите ли вы иметь графический интерфейс или хотите редактировать файл конфигурации.